Vodič za rješavanje u Javi s Apache SolrJ

1. Pregled

Apache Solr je platforma za pretraživanje otvorenog koda izgrađena na vrhu Lucene. Apache SolrJ je klijent zasnovan na Javi za Solr koji pruža sučelja za glavne značajke pretraživanja poput indeksiranja, postavljanja upita i brisanja dokumenata.

U ovom ćemo članku istražiti kako komunicirati s Apache Solr poslužiteljem koristeći SolrJ.

2. Postavljanje

Da biste instalirali Solr poslužitelj na svoj stroj, pogledajte Solr QuickStart Guide.

Postupak instalacije je jednostavan - samo preuzmite zip / tar paket, izvucite sadržaj i pokrenite poslužitelj iz naredbenog retka. Za ovaj ćemo članak stvoriti Solr poslužitelj s jezgrom nazvanom "bigboxstore":

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

Solr prema zadanim postavkama preslušava port 8983 za dolazne HTTP upite. Možete provjeriti je li uspješno pokrenut otvaranjem programa // localhost: 8983 / solr / # / bigboxstore URL u pregledniku i promatranje Solr nadzorne ploče.

3. Konfiguracija Mavena

Sad kad imamo naš poslužitelj Solr i pokrenut, krenimo ravno na klijent SolrJ Java. Da biste koristili SolrJ u svom projektu, morat ćete imati sljedeću ovisnost o Mavenu koja je deklarirana u vašem pom.xml datoteka:

 org.apache.solr solr-solrj 6.4.0 

Uvijek možete pronaći najnoviju verziju koju hostira Maven Central.

4. Apache SolrJ Java API

Pokrenimo SolrJ klijenta povezivanjem na naš Solr poslužitelj:

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

Bilješka: SolrJ koristi binarni format, a ne XML, kao zadani format odgovora. Za kompatibilnost sa Solrom potrebno je izričito pozvati se setParser () u XML kao što je gore prikazano. Više detalja o tome možete pronaći ovdje.

4.1. Indeksiranje dokumenata

Definirajmo podatke za indeksiranje pomoću a SolrInputDocument i dodajte ga u naš indeks pomoću dodati() metoda:

Dokument SolrInputDocument = novi SolrInputDocument (); document.addField ("id", "123456"); document.addField ("ime", "Kenmore perilica posuđa"); document.addField ("cijena", "599,99"); solr.add (dokument); solr.commit ();

Napomena: Svaka akcija koja modificira bazu podataka Solr zahtijeva da je slijedi akcija počiniti().

4.2. Indeksiranje grahom

Također možete indeksirati Solr dokumente pomoću graha. Definirajmo ProductBean čija su svojstva označena s @Polje:

javna klasa ProductBean {ID niza; Naziv niza; String cijena; @Field ("id") zaštićena praznina setId (ID niza) {this.id = id; } @Field ("name") zaštićena praznina setName (ime niza) {this.name = name; } @Field ("price") protected void setPrice (String price) {this.price = price; } // geteri i konstruktor izostavljeni za prostor}

Zatim, dodajte grah u naš indeks:

solrClient.addBean (novi ProductBean ("888", "Apple iPhone 6s", "299,99")); solrClient.commit ();

4.3. Upit indeksiranih dokumenata prema polju i id

Provjerimo je li naš dokument dodan pomoću SolrQuery za upit našeg Solr poslužitelja.

The QueryResponse s poslužitelja sadržavat će popis SolrDocument objekti koji odgovaraju bilo kojem upitu s formatom polje: vrijednost. U ovom primjeru postavljamo upit prema cijeni:

Upit SolrQuery = novi SolrQuery (); query.set ("q", "cijena: 599,99"); QueryResponse odgovor = solr.query (upit); SolrDocumentList docList = response.getResults (); assertEquals (docList.getNumFound (), 1); za (SolrDocument doc: docList) {assertEquals ((String) doc.getFieldValue ("id"), "123456"); assertEquals ((Double) doc.getFieldValue ("cijena"), (Double) 599,99); }

Jednostavnija opcija je upit prema Iskaznica koristeći getById (). koji će vratiti samo jedan dokument ako se pronađe podudaranje:

SolrDocument doc = solr.getById ("123456"); assertEquals ((String) doc.getFieldValue ("ime"), "Kenmore perilica posuđa"); assertEquals ((Double) doc.getFieldValue ("cijena"), (Double) 599,99);

4.4. Brisanje dokumenata

Kada želimo ukloniti dokument iz indeksa, možemo koristiti deleteById () i provjerite je li uklonjen:

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

Također imamo mogućnost da deleteByQuery (), pa pokušajmo izbrisati bilo koji dokument s određenim imenom:

solr.deleteByQuery ("naziv: perilica posuđa Kenmore"); solr.commit (); Upit SolrQuery = novi SolrQuery (); query.set ("q", "id: 123456"); QueryResponse odgovor = solr.query (upit); SolrDocumentList docList = response.getResults (); assertEquals (docList.getNumFound (), 0);

5. Zaključak

U ovom kratkom članku vidjeli smo kako koristiti SolrJ Java API za obavljanje nekih uobičajenih interakcija s Apache Solr pretraživačem punog teksta.

Na GitHubu možete provjeriti primjere iz ovog članka.