Panduan Untuk Solr di Java Dengan Apache SolrJ

1. Ikhtisar

Apache Solr adalah platform pencarian sumber terbuka yang dibangun di atas Lucene. Apache SolrJ adalah klien berbasis Java untuk Solr yang menyediakan antarmuka untuk fitur utama pencarian seperti mengindeks, membuat kueri, dan menghapus dokumen.

Pada artikel ini, kita akan mempelajari cara berinteraksi dengan server Apache Solr menggunakan SolrJ .

2. Penyiapan

Untuk menginstal server Solr pada mesin Anda, silakan merujuk ke Panduan Memulai Cepat Solr.

Proses instalasinya sederhana - cukup unduh paket zip / tar, ekstrak isinya, dan mulai server dari baris perintah. Untuk artikel ini, kami akan membuat server Solr dengan inti yang disebut 'bigboxstore':

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

Secara default, Solr mendengarkan port 8983 untuk permintaan HTTP yang masuk. Anda dapat memverifikasi bahwa itu berhasil diluncurkan dengan membuka URL // localhost: 8983 / solr / # / bigboxstore di browser dan mengamati Dasbor Solr.

3. Konfigurasi Maven

Sekarang setelah server Solr kita aktif dan berjalan, mari langsung beralih ke klien SolrJ Java. Untuk menggunakan SolrJ dalam proyek Anda, Anda harus memiliki dependensi Maven berikut yang dideklarasikan di file pom.xml Anda :

 org.apache.solr solr-solrj 6.4.0 

Anda selalu dapat menemukan versi terbaru yang dihosting oleh Maven Central.

4. Apache SolrJ Java API

Mari mulai klien SolrJ dengan menghubungkan ke server Solr kami:

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

Catatan: SolrJ menggunakan format biner, bukan XML , sebagai format respons defaultnya. Untuk kompatibilitas dengan Solr, diperlukan untuk secara eksplisit memanggil setParser () ke XML seperti yang ditunjukkan di atas. Rincian lebih lanjut tentang ini dapat ditemukan di sini.

4.1. Mengindeks Dokumen

Mari tentukan data yang akan diindeks menggunakan SolrInputDocument dan tambahkan ke indeks kita menggunakan metode 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: Setiap tindakan yang mengubah database Solr memerlukan tindakan tersebut untuk diikuti oleh commit () .

4.2. Mengindeks Dengan Kacang

Anda juga dapat mengindeks dokumen Solr menggunakan kacang . Mari kita tentukan ProductBean yang propertinya dianotasi 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 }

Lalu, mari tambahkan kacang ke indeks kita:

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

4.3. Membuat Kueri Dokumen Terindeks berdasarkan Bidang dan Id

Mari verifikasi dokumen kita ditambahkan dengan menggunakan SolrQuery untuk menanyakan server Solr kita.

The QueryResponse dari server akan berisi daftar SolrDocument benda yang cocok dengan query dengan format bidang: nilai . Dalam contoh ini, kami melakukan kueri berdasarkan 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); }

Opsi yang lebih sederhana adalah melakukan kueri dengan Id menggunakan getById () . yang hanya akan mengembalikan satu dokumen jika kecocokan ditemukan:

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

4.4. Menghapus Dokumen

Saat kami ingin menghapus dokumen dari indeks, kami dapat menggunakan deleteById () dan memverifikasi bahwa itu telah dihapus:

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 memiliki opsi untuk deleteByQuery () , jadi mari coba hapus dokumen apa pun 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 singkat ini, kita telah melihat bagaimana menggunakan SolrJ Java API untuk melakukan beberapa interaksi umum dengan mesin pencari teks lengkap Apache Solr.

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