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.