Panduan Untuk Solr di Java Dengan Apache SolrJ

1. Gambaran keseluruhan

Apache Solr adalah platform carian sumber terbuka yang dibina di atas Lucene. Apache SolrJ adalah klien berbasis Java untuk Solr yang menyediakan antara muka untuk ciri utama pencarian seperti pengindeksan, pertanyaan, dan penghapusan dokumen.

Dalam artikel ini, kita akan meneroka cara berinteraksi dengan pelayan Apache Solr menggunakan SolrJ .

2. Persediaan

Untuk memasang pelayan Solr pada mesin anda, rujuk Panduan Memulai Solr.

Proses pemasangannya mudah - cukup muat turun pakej zip / tar, ekstrak kandungannya, dan mulakan pelayan dari baris arahan. Untuk artikel ini, kami akan membuat pelayan Solr dengan inti yang disebut 'bigboxstore':

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

Secara lalai, Solr mendengar port 8983 untuk pertanyaan HTTP yang masuk. Anda boleh mengesahkan bahawa ia berjaya dilancarkan dengan membuka // localhost: 8983 / solr / # / bigboxstore URL dalam penyemak imbas dan memerhatikan Solr Dashboard.

3. Konfigurasi Maven

Setelah pelayan Solr kita aktif dan aktif, mari terus ke pelanggan SolrJ Java. Untuk menggunakan SolrJ dalam projek anda, anda perlu menyatakan ketergantungan Maven berikut dalam fail pom.xml anda :

 org.apache.solr solr-solrj 6.4.0 

Anda selalu dapat mencari versi terbaru yang dihoskan oleh Maven Central.

4. API Java Apache SolrJ

Mari mulakan pelanggan SolrJ dengan menyambung ke pelayan Solr kami:

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

Catatan: SolrJ menggunakan format binari, bukan XML , sebagai format respons lalai. Untuk keserasian dengan Solr, diperlukan untuk memanggil setParser () ke XML secara eksplisit seperti yang ditunjukkan di atas. Maklumat lebih lanjut mengenai ini boleh didapati di sini.

4.1. Dokumen Pengindeksan

Mari tentukan data yang akan diindeks menggunakan SolrInputDocument dan tambahkan ke indeks kami menggunakan kaedah add () :

SolrInputDocument document = new SolrInputDocument(); document.addField("id", "123456"); document.addField("name", "Kenmore Dishwasher"); document.addField("price", "599.99"); solr.add(document); solr.commit();

Catatan: Segala tindakan yang mengubah pangkalan data Solr memerlukan tindakan yang diikuti oleh komit () .

4.2. Pengindeksan Dengan Kacang

Anda juga dapat mengindeks dokumen Solr menggunakan kacang . Mari tentukan ProductBean yang sifatnya diberi penjelasan dengan @ Field :

public class ProductBean { String id; String name; String price; @Field("id") protected void setId(String id) { this.id = id; } @Field("name") protected void setName(String name) { this.name = name; } @Field("price") protected void setPrice(String price) { this.price = price; } // getters and constructor omitted for space }

Kemudian, mari tambah kacang ke indeks kami:

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

4.3. Meminta Dokumen Terindeks mengikut Bidang dan Id

Mari sahkan dokumen kami ditambahkan dengan menggunakan SolrQuery untuk membuat pertanyaan kepada pelayan Solr kami.

The QueryResponse dari pelayan akan mengandungi senarai SolrDocument objek yang hampir sama apa-apa pertanyaan dengan format yang bidang: Nilai . Dalam contoh ini, kami membuat pertanyaan mengikut harga:

SolrQuery query = new SolrQuery(); query.set("q", "price:599.99"); QueryResponse response = solr.query(query); SolrDocumentList docList = response.getResults(); assertEquals(docList.getNumFound(), 1); for (SolrDocument doc : docList) { assertEquals((String) doc.getFieldValue("id"), "123456"); assertEquals((Double) doc.getFieldValue("price"), (Double) 599.99); }

Pilihan yang lebih mudah adalah membuat pertanyaan dengan Id menggunakan getById () . yang akan mengembalikan hanya satu dokumen sekiranya perlawanan dijumpai:

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

4.4. Memadam Dokumen

Apabila kita ingin membuang dokumen dari indeks, kita dapat menggunakan deleteById () dan mengesahkannya telah dikeluarkan:

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

Kami juga mempunyai pilihan untuk menghapusByQuery () , jadi mari kita cuba memadam dokumen dengan nama tertentu:

solr.deleteByQuery("name:Kenmore Dishwasher"); solr.commit(); SolrQuery query = new SolrQuery(); query.set("q", "id:123456"); QueryResponse response = solr.query(query); SolrDocumentList docList = response.getResults(); assertEquals(docList.getNumFound(), 0);

5. Kesimpulan

Dalam artikel ringkas ini, kami telah melihat bagaimana menggunakan API Java SolrJ untuk melakukan beberapa interaksi umum dengan mesin carian teks penuh Apache Solr.

Anda boleh melihat contoh yang diberikan dalam artikel ini di GitHub.