Vejledning til Solr i Java med Apache SolrJ

1. Oversigt

Apache Solr er en open source-søgeplatform bygget oven på Lucene. Apache SolrJ er en Java-baseret klient til Solr, der giver grænseflader til de vigtigste funktioner i søgning som indeksering, forespørgsel og sletning af dokumenter.

I denne artikel skal vi udforske hvordan man interagerer med en Apache Solr-server ved hjælp af SolrJ.

2. Opsætning

Se Solr QuickStart Guide for at installere en Solr-server på din maskine.

Installationsprocessen er enkel - bare download zip / tar-pakken, udpak indholdet, og start serveren fra kommandolinjen. Til denne artikel opretter vi en Solr-server med en kerne kaldet 'bigboxstore':

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

Som standard lytter Solr til port 8983 for indgående HTTP-forespørgsler. Du kan kontrollere, at den er startet med succes ved at åbne // localhost: 8983 / solr / # / bigboxstore URL i en browser og iagttagelse af Solr Dashboard.

3. Maven-konfiguration

Nu hvor vi har vores Solr-server kørende, lad os springe direkte til SolrJ Java-klienten. For at bruge SolrJ i dit projekt skal du have deklareret følgende Maven-afhængighed i din pom.xml fil:

 org.apache.solr solr-solrj 6.4.0 

Du kan altid finde den nyeste version hostet af Maven Central.

4. Apache SolrJ Java API

Lad os starte SolrJ-klienten ved at oprette forbindelse til vores Solr-server:

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

Bemærk: SolrJ bruger et binært format snarere end XML, som standardresponsformat. For kompatibilitet med Solr kræves det eksplicit at påberåbe sig setParser () til XML som vist ovenfor. Flere detaljer om dette kan findes her.

4.1. Indeksering af dokumenter

Lad os definere de data, der skal indekseres, ved hjælp af a SolrInputDocument og tilføj det til vores indeks ved hjælp af tilføje() metode:

SolrInputDocument-dokument = nyt SolrInputDocument (); document.addField ("id", "123456"); document.addField ("navn", "Kenmore opvaskemaskine"); document.addField ("pris", "599,99"); solr.add (dokument); solr.commit ();

Bemærk: Enhver handling, der ændrer Solr-databasen, kræver, at handlingen følges af begå().

4.2. Indeksering med bønner

Du kan også indeksere Solr-dokumenter ved hjælp af bønner. Lad os definere en ProductBean, hvis egenskaber er kommenteret med @Mark:

offentlig klasse ProductBean {streng-id; Strengnavn; Stringpris; @Field ("id") beskyttet ugyldigt setId (streng-id) {this.id = id; } @Field ("navn") beskyttet ugyldigt sætnavn (strengnavn) {dette.navn = navn; } @Field ("pris") beskyttet ugyldigt setPrice (strengpris) {this.price = pris; } // getters og constructor udeladt for plads}

Lad os derefter tilføje bønnen til vores indeks:

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

4.3. Forespørgsel på indekserede dokumenter efter felt og id

Lad os kontrollere, at vores dokument er tilføjet ved hjælp af SolrQuery for at spørge vores Solr-server.

Det QueryResponse fra serveren indeholder en liste over SolrDocument objekter, der matcher enhver forespørgsel med formatet felt: værdi. I dette eksempel spørger vi efter pris:

SolrQuery-forespørgsel = ny SolrQuery (); query.set ("q", "pris: 599,99"); QueryResponse respons = solr.query (forespørgsel); SolrDocumentList docList = respons.getResults (); assertEquals (docList.getNumFound (), 1); til (SolrDocument doc: docList) {assertEquals ((String) doc.getFieldValue ("id"), "123456"); assertEquals ((Double) doc.getFieldValue ("price"), (Double) 599.99); }

En enklere mulighed er at spørge efter Id ved brug af getById (). som kun returnerer et dokument, hvis der findes et match:

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

4.4. Sletning af dokumenter

Når vi vil fjerne et dokument fra indekset, kan vi bruge det deleteById () og bekræft, at den er fjernet:

solr.deleteById ("123456"); solr.commit (); SolrQuery-forespørgsel = ny SolrQuery (); query.set ("q", "id: 123456"); QueryResponse respons = solr.query (forespørgsel); SolrDocumentList docList = respons.getResults (); assertEquals (docList.getNumFound (), 0);

Vi har også mulighed for at deleteByQuery (), så lad os prøve at slette ethvert dokument med et specifikt navn:

solr.deleteByQuery ("navn: Kenmore opvaskemaskine"); solr.commit (); SolrQuery-forespørgsel = ny SolrQuery (); query.set ("q", "id: 123456"); QueryResponse respons = solr.query (forespørgsel); SolrDocumentList docList = respons.getResults (); assertEquals (docList.getNumFound (), 0);

5. Konklusion

I denne hurtige artikel har vi set, hvordan man bruger SolrJ Java API til at udføre nogle af de almindelige interaktioner med Apache Solr fuldtekst-søgemaskine.

Du kan tjekke eksemplerne i denne artikel på GitHub.