Gids voor Solr in Java met Apache SolrJ

1. Overzicht

Apache Solr is een open-source zoekplatform dat bovenop Lucene is gebouwd. Apache SolrJ is een Java-gebaseerde client voor Solr die interfaces biedt voor de belangrijkste zoekfuncties, zoals indexeren, opvragen en verwijderen van documenten.

In dit artikel gaan we het verkennen hoe om te gaan met een Apache Solr-server met SolrJ.

2. Installatie

Raadpleeg de Solr QuickStart Guide om een ​​Solr-server op uw computer te installeren.

Het installatieproces is eenvoudig - download gewoon het zip / tar-pakket, pak de inhoud uit en start de server vanaf de opdrachtregel. Voor dit artikel maken we een Solr-server met een kern genaamd ‘bigboxstore ':

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

Standaard luistert Solr naar poort 8983 voor inkomende HTTP-queries. U kunt controleren of het succesvol is gestart door het // localhost: 8983 / solr / # / bigboxstore URL in een browser en observeer het Solr Dashboard.

3. Maven-configuratie

Nu we onze Solr-server in gebruik hebben, gaan we meteen naar de SolrJ Java-client. Om SolrJ in uw project te gebruiken, moet u de volgende Maven-afhankelijkheid hebben gedeclareerd in uw pom.xml het dossier:

 org.apache.solr solr-solrj 6.4.0 

U kunt altijd de nieuwste versie vinden die wordt gehost door Maven Central.

4. Apache SolrJ Java API

Laten we de SolrJ-client starten door verbinding te maken met onze Solr-server:

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

Opmerking: SolrJ gebruikt een binair formaat in plaats van XML, als het standaard antwoordformaat. Voor compatibiliteit met Solr is het vereist om expliciet aan te roepen setParser () naar XML zoals hierboven weergegeven. Meer informatie hierover vindt u hier.

4.1. Documenten indexeren

Laten we de te indexeren gegevens definiëren met een SolrInputDocument en voeg het toe aan onze index met de toevoegen() methode:

SolrInputDocument document = nieuwe SolrInputDocument (); document.addField ("id", "123456"); document.addField ("naam", "Kenmore Dishwasher"); document.addField ("prijs", "599,99"); solr.add (document); solr.commit ();

Opmerking: elke actie die de Solr-database wijzigt, vereist dat de actie wordt gevolgd door plegen ().

4.2. Indexeren met bonen

U kunt Solr-documenten ook indexeren met bonen. Laten we een ProductBean definiëren waarvan de eigenschappen zijn geannoteerd met @Veld:

openbare klasse ProductBean {String-id; String naam; String prijs; @Field ("id") protected void setId (String id) {this.id = id; } @Field ("naam") beschermde ongeldige setName (String naam) {this.name = naam; } @Field ("prijs") protected void setPrice (String prijs) {this.price = price; } // getters en constructor weggelaten voor spatie}

Laten we dan de boon aan onze index toevoegen:

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

4.3. Geïndexeerde documenten opvragen op veld en id

Laten we controleren of ons document is toegevoegd door te gebruiken SolrQuery om onze Solr-server te raadplegen.

De QueryResponse van de server bevat een lijst met SolrDocument objecten die overeenkomen met een zoekopdracht met het formaat veld: waarde. In dit voorbeeld zoeken we op prijs:

SolrQuery-query = nieuwe SolrQuery (); query.set ("q", "prijs: 599,99"); QueryResponse response = solr.query (query); SolrDocumentList docList = response.getResults (); assertEquals (docList.getNumFound (), 1); voor (SolrDocument doc: docList) {assertEquals ((String) doc.getFieldValue ("id"), "123456"); assertEquals ((Double) doc.getFieldValue ("price"), (Double) 599,99); }

Een eenvoudigere optie is om te zoeken via ID kaart gebruik makend van getById (). die slechts één document retourneert als er een overeenkomst wordt gevonden:

SolrDocument doc = solr.getById ("123456"); assertEquals ((String) doc.getFieldValue ("naam"), "Kenmore Dishwasher"); assertEquals ((Double) doc.getFieldValue ("price"), (Double) 599,99);

4.4. Documenten verwijderen

Als we een document uit de index willen verwijderen, kunnen we gebruiken deleteById () en controleer of het is verwijderd:

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

We hebben ook de mogelijkheid om deleteByQuery (), dus laten we proberen elk document met een specifieke naam te verwijderen:

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

5. Conclusie

In dit korte artikel hebben we gezien hoe we de SolrJ Java API kunnen gebruiken om enkele veelvoorkomende interacties uit te voeren met de volledige-tekstzoekmachine van Apache Solr.

Je kunt de voorbeelden in dit artikel bekijken op GitHub.