Guide de Solr en Java avec Apache SolrJ

1. Vue d'ensemble

Apache Solr est une plateforme de recherche open-source construite sur Lucene. Apache SolrJ est un client Java pour Solr qui fournit des interfaces pour les principales fonctionnalités de recherche telles que l'indexation, l'interrogation et la suppression de documents.

Dans cet article, nous allons explorer comment interagir avec un serveur Apache Solr à l'aide de SolrJ .

2. Configuration

Pour installer un serveur Solr sur votre machine, veuillez vous référer au Guide de démarrage rapide Solr.

Le processus d'installation est simple - il suffit de télécharger le package zip / tar, d'extraire le contenu et de démarrer le serveur à partir de la ligne de commande. Pour cet article, nous allons créer un serveur Solr avec un noyau appelé 'bigboxstore':

bin/solr start bin/solr create -c 'bigboxstore'

Par défaut, Solr écoute le port 8983 pour les requêtes HTTP entrantes. Vous pouvez vérifier qu'il a été lancé avec succès en ouvrant l' URL // localhost: 8983 / solr / # / bigboxstore dans un navigateur et en observant le tableau de bord Solr.

3. Configuration Maven

Maintenant que notre serveur Solr est opérationnel, passons directement au client SolrJ Java. Pour utiliser SolrJ dans votre projet, vous aurez besoin de déclarer la dépendance Maven suivante dans votre fichier pom.xml :

 org.apache.solr solr-solrj 6.4.0 

Vous pouvez toujours trouver la dernière version hébergée par Maven Central.

4. API Java Apache SolrJ

Lançons le client SolrJ en nous connectant à notre serveur Solr:

String urlString = "//localhost:8983/solr/bigboxstore"; HttpSolrClient solr = new HttpSolrClient.Builder(urlString).build(); solr.setParser(new XMLResponseParser());

Remarque: SolrJ utilise un format binaire, plutôt que XML , comme format de réponse par défaut. Pour la compatibilité avec Solr, il est nécessaire d'appeler explicitement setParser () en XML comme indiqué ci-dessus. Vous trouverez plus de détails à ce sujet ici.

4.1. Indexation de documents

Définissons les données à indexer à l'aide d'un SolrInputDocument et ajoutons-les à notre index à l'aide de la méthode add () :

SolrInputDocument document = new SolrInputDocument(); document.addField("id", "123456"); document.addField("name", "Kenmore Dishwasher"); document.addField("price", "599.99"); solr.add(document); solr.commit();

Remarque: toute action qui modifie la base de données Solr nécessite que l'action soit suivie de commit () .

4.2. Indexation avec des haricots

Vous pouvez également indexer des documents Solr à l'aide de beans . Définissons un ProductBean dont les propriétés sont annotées avec @ Field :

public class ProductBean { String id; String name; String price; @Field("id") protected void setId(String id) { this.id = id; } @Field("name") protected void setName(String name) { this.name = name; } @Field("price") protected void setPrice(String price) { this.price = price; } // getters and constructor omitted for space }

Ensuite, ajoutons le bean à notre index:

solrClient.addBean( new ProductBean("888", "Apple iPhone 6s", "299.99") ); solrClient.commit();

4.3. Interroger les documents indexés par champ et par identifiant

Vérifions que notre document est ajouté en utilisant SolrQuery pour interroger notre serveur Solr.

La QueryResponse du serveur contiendra une liste d' objets SolrDocument correspondant à n'importe quelle requête avec le champ de format : valeur . Dans cet exemple, nous interrogeons par prix:

SolrQuery query = new SolrQuery(); query.set("q", "price:599.99"); QueryResponse response = solr.query(query); SolrDocumentList docList = response.getResults(); assertEquals(docList.getNumFound(), 1); for (SolrDocument doc : docList) { assertEquals((String) doc.getFieldValue("id"), "123456"); assertEquals((Double) doc.getFieldValue("price"), (Double) 599.99); }

Une option plus simple consiste à interroger par Id en utilisant getById () . qui ne renverra qu'un seul document si une correspondance est trouvée:

SolrDocument doc = solr.getById("123456"); assertEquals((String) doc.getFieldValue("name"), "Kenmore Dishwasher"); assertEquals((Double) doc.getFieldValue("price"), (Double) 599.99);

4.4. Supprimer des documents

Lorsque nous voulons supprimer un document de l'index, nous pouvons utiliser deleteById () et vérifier qu'il a été supprimé:

solr.deleteById("123456"); solr.commit(); SolrQuery query = new SolrQuery(); query.set("q", "id:123456"); QueryResponse response = solr.query(query); SolrDocumentList docList = response.getResults(); assertEquals(docList.getNumFound(), 0);

Nous avons également la possibilité de deleteByQuery () , alors essayons de supprimer tout document avec un nom spécifique:

solr.deleteByQuery("name:Kenmore Dishwasher"); solr.commit(); SolrQuery query = new SolrQuery(); query.set("q", "id:123456"); QueryResponse response = solr.query(query); SolrDocumentList docList = response.getResults(); assertEquals(docList.getNumFound(), 0);

5. Conclusion

Dans cet article rapide, nous avons vu comment utiliser l'API Java SolrJ pour effectuer certaines des interactions courantes avec le moteur de recherche en texte intégral Apache Solr.

Vous pouvez consulter les exemples fournis dans cet article sur GitHub.