Guide til Solr i Java med Apache SolrJ

1. Oversikt

Apache Solr er en åpen kildekode-søkeplattform bygget på toppen av Lucene. Apache SolrJ er en Java-basert klient for Solr som gir grensesnitt for hovedfunksjonene i søk som indeksering, spørring og sletting av dokumenter.

I denne artikkelen skal vi utforske hvordan du kan samhandle med en Apache Solr-server ved hjelp av SolrJ.

2. Oppsett

For å installere en Solr-server på maskinen din, se Solr QuickStart Guide.

Installasjonsprosessen er enkel - bare last ned zip / tar-pakken, trekk ut innholdet og start serveren fra kommandolinjen. For denne artikkelen oppretter vi en Solr-server med en kjerne kalt ‘bigboxstore’:

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

Som standard lytter Solr til port 8983 for innkommende HTTP-spørsmål. Du kan bekrefte at den er vellykket lansert ved å åpne // localhost: 8983 / solr / # / bigboxstore URL i en nettleser og observere Solr Dashboard.

3. Maven-konfigurasjon

Nå som vi har vår Solr-server oppe, kan vi hoppe rett til SolrJ Java-klienten. For å bruke SolrJ i prosjektet ditt, må du ha følgende Maven-avhengighet erklært i din pom.xml fil:

 org.apache.solr solr-solrj 6.4.0 

Du kan alltid finne den nyeste versjonen som er hostet av Maven Central.

4. Apache SolrJ Java API

La oss starte SolrJ-klienten ved å koble til vår Solr-server:

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

Merk: SolrJ bruker et binært format, i stedet for XML, som standard svarformat. For kompatibilitet med Solr, er det nødvendig å eksplisitt påberope seg setParser () til XML som vist ovenfor. Flere detaljer om dette finner du her.

4.1. Indeksere dokumenter

La oss definere dataene som skal indekseres ved hjelp av a SolrInputDocument og legg den til i indeksen vår ved hjelp av legge til() metode:

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

Merk: Enhver handling som endrer Solr-databasen krever at handlingen følges av begå().

4.2. Indeksering med bønner

Du kan også indeksere Solr-dokumenter ved hjelp av bønner. La oss definere en ProductBean hvis egenskaper er merket med @Felt:

offentlig klasse ProductBean {String id; Strengnavn; Strengpris; @Field ("id") beskyttet tomrom setId (streng-id) {this.id = id; } @Field ("name") beskyttet ugyldig setName (strengnavn) {this.name = name; } @Field ("pris") beskyttet ugyldig setPrice (strengpris) {this.price = pris; } // getters og constructor utelatt for plass}

La oss deretter legge bønnen til indeksen vår:

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

4.3. Spørre om indekserte dokumenter etter felt og ID

La oss bekrefte at dokumentet vårt er lagt til ved hjelp av SolrQuery for å spørre Solr-serveren vår.

De QueryResponse fra serveren vil inneholde en liste over SolrDocument objekter som samsvarer med alle spørsmål med formatet felt: verdi. I dette eksemplet spør vi etter pris:

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

Et enklere alternativ er å spørre etter Id ved hjelp av getById (). som bare returnerer ett dokument hvis en samsvar er funnet:

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

4.4. Slette dokumenter

Når vi vil fjerne et dokument fra indeksen, kan vi bruke det deleteById () og bekreft at den er fjernet:

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

Vi har også muligheten til å deleteByQuery (), så la oss prøve å slette ethvert dokument med et bestemt navn:

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

5. Konklusjon

I denne raske artikkelen har vi sett hvordan du bruker SolrJ Java API til å utføre noen av de vanligste interaksjonene med Apache Solr-fulltekst-søkemotoren.

Du kan sjekke ut eksemplene i denne artikkelen på GitHub.


$config[zx-auto] not found$config[zx-overlay] not found