Útmutató a Solr Java használatához az Apache SolrJ segítségével

1. Áttekintés

Az Apache Solr egy nyílt forráskódú keresési platform, amely a Lucene tetejére épül. Az Apache SolrJ egy Java-alapú kliens a Solr számára, amely interfészeket biztosít a keresés főbb jellemzőihez, például indexeléshez, lekérdezéshez és dokumentumok törléséhez.

Ebben a cikkben felfedezzük hogyan lehet kölcsönhatásba lépni egy Apache Solr szerverrel a SolrJ használatával.

2. Beállítás

A Solr szerver telepítéséhez olvassa el a Solr QuickStart útmutatót.

A telepítési folyamat egyszerű - csak töltse le a zip / tar csomagot, bontsa ki a tartalmát, és indítsa el a szervert a parancssorból. Ehhez a cikkhez létrehozunk egy „bigboxstore” nevű Solr szervert:

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

Alapértelmezés szerint a Solr a 8983-as portra figyeli a bejövő HTTP-lekérdezéseket. A. Megnyitásával ellenőrizheti, hogy sikeresen elindult-e // localhost: 8983 / solr / # / bigboxstore URL egy böngészőben, és figyelje a Solr irányítópultot.

3. Maven konfiguráció

Most, hogy beindult a Solr szerver, ugorjunk egyenesen a SolrJ Java kliensre. A SolrJ használatához a projektben a következő Maven-függőséget kell deklarálnia a projektben pom.xml fájl:

 org.apache.solr solr-solrj 6.4.0 

Mindig megtalálhatja a Maven Central által üzemeltetett legújabb verziót.

4. Apache SolrJ Java API

Indítsuk el a SolrJ klienst a Solr szerverhez csatlakozással:

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

Jegyzet: A SolrJ bináris formátumot használ, nem pedig XML-t, mint az alapértelmezett válaszformátum. A Solr kompatibilitás érdekében kifejezetten hivatkozni kell rá setParser () XML-be a fent látható módon. További részletek itt találhatók.

4.1. Dokumentumok indexelése

Határozzuk meg az indexelni kívánt adatokat az a használatával SolrInputDocument és adja hozzá indexünkhöz a add () módszer:

SolrInputDocument document = új SolrInputDocument (); document.addField ("id", "123456"); document.addField ("név", "Kenmore Mosogatógép"); document.addField ("ár", "599,99"); solr.add (dokumentum); solr.commit ();

Megjegyzés: Bármely művelet, amely módosítja a Solr adatbázist, megköveteli a műveletet elkövetni().

4.2. Indexelés babokkal

A Solr dokumentumokat bab segítségével is indexelheti. Határozzunk meg egy ProductBean-t, amelynek tulajdonságait @ -gal jelöltükTerület:

public class ProductBean {String id; Karakterlánc neve; String ár; @Field ("id") védett void setId (String id) {this.id = id; } @Field ("név") védett void setName (karakterlánc neve) {this.name = név; } @Field ("price") védett void setPrice (String price) {this.price = price; } // getterek és a konstruktor kihagyva az űrhöz}

Ezután adjuk hozzá a babot az indexünkhöz:

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

4.3. Indexelt dokumentumok lekérdezése mező és azonosító szerint

Ellenőrizzük, hogy a dokumentum használatával hozzáadjuk-e SolrQuery hogy lekérdezzük a Solr szerverünket.

A QueryResponse a szerverről egy listát fog tartalmazni SolrDocument bármely lekérdezésnek megfelelő formátumú objektumok mező: érték. Ebben a példában ár szerint kérdezünk:

SolrQuery lekérdezés = new SolrQuery (); query.set ("q", "ár: 599,99"); QueryResponse response = solr.query (lekérdezés); SolrDocumentList docList = response.getResults (); assertEquals (docList.getNumFound (), 1); mert (SolrDocument doc: docList) {assertEquals ((String) doc.getFieldValue ("id"), "123456"); assertEquals ((Dupla) doc.getFieldValue ("ár"), (Dupla) 599,99); }

Egyszerűbb lehetőség a lekérdezés Id felhasználásával getById (). amely csak egy dokumentumot ad vissza, ha talál egyezést:

SolrDocument doc = solr.getById ("123456"); assertEquals ((String) doc.getFieldValue ("név"), "Kenmore mosogatógép"); assertEquals ((Dupla) doc.getFieldValue ("ár"), (Dupla) 599,99);

4.4. Dokumentumok törlése

Amikor el akarunk távolítani egy dokumentumot az indexből, használhatjuk deleteById () és ellenőrizze, hogy eltávolították-e:

solr.deleteById ("123456"); solr.commit (); SolrQuery lekérdezés = new SolrQuery (); query.set ("q", "id: 123456"); QueryResponse response = solr.query (lekérdezés); SolrDocumentList docList = response.getResults (); assertEquals (docList.getNumFound (), 0);

Arra is van lehetőségünk deleteByQuery (), ezért próbáljunk meg törölni minden olyan nevet tartalmazó dokumentumot:

solr.deleteByQuery ("név: Kenmore Mosogatógép"); solr.commit (); SolrQuery lekérdezés = new SolrQuery (); query.set ("q", "id: 123456"); QueryResponse response = solr.query (lekérdezés); SolrDocumentList docList = response.getResults (); assertEquals (docList.getNumFound (), 0);

5. Következtetés

Ebben a rövid cikkben azt láthattuk, hogyan használhatjuk a SolrJ Java API-t az Apache Solr teljes szövegű keresőmotorral végzett gyakori interakciók végrehajtására.

A cikkben található példákat a GitHubon tekintheti meg.