Komitmen dan Pencarian NRT di SolrCloud

1. Gambaran keseluruhan

Solr adalah salah satu penyelesaian carian berasaskan Lucene yang paling popular. Ia cepat, diedarkan, kukuh, fleksibel dan mempunyai komuniti pemaju yang aktif di belakangnya. SolrCloud adalah versi baru Solr yang diedarkan .

Salah satu ciri utamanya di sini adalah carian masa nyata (NRT) , iaitu dokumen yang tersedia untuk dicari sebaik sahaja diindeks.

2. Pengindeksan di SolrCloud

Koleksi di Solr terdiri dari beberapa pecahan, dan setiap pecahan memiliki berbagai replika. Salah satu replika shard dipilih sebagai pemimpin untuk shard itu ketika koleksi dibuat:

  • Apabila pelanggan cuba mengindeks dokumen, dokumen pertama kali diberikan pecahan berdasarkan hash id dokumen
  • Pelanggan mendapat URL pemimpin shard dari penjaga zook, dan akhirnya, permintaan indeks dibuat ke URL tersebut
  • Pemimpin shard mengindeks dokumen secara tempatan sebelum menghantarnya ke replika
  • Setelah pemimpin menerima pengakuan dari semua replika aktif dan pulih, ia mengembalikan pengesahan ke aplikasi klien pengindeksan

Apabila kita mengindeks dokumen di Solr, dokumen tersebut tidak langsung masuk ke indeks. Ia ditulis dalam apa yang disebut tlog (log transaksi). Solr menggunakan log transaksi untuk memastikan bahawa dokumen tidak hilang sebelum dibuat, sekiranya berlaku kerosakan sistem.

Jika sistem mogok sebelum dokumen dalam log transaksi dilakukan, yaitu, disisipkan ke disk, log transaksi dimainkan semula ketika sistem muncul kembali, menyebabkan kehilangan dokumen secara sifar.

Setiap permintaan indeks / kemas kini dicatat ke log transaksi yang terus berkembang sehingga kami mengeluarkan komit.

3. Berkomitmen di SolrCloud

A melakukan cara operasi memuktamadkan perubahan dan berterusan bahawa perubahan pada cakera. SolrCloud menyediakan dua jenis operasi komitmen iaitu. komit dan komit lembut.

3.1. Komit (Komitmen Keras)

Komitmen atau komit keras adalah salah satu di mana Solr memindahkan semua dokumen yang tidak disertakan dalam log transaksi ke cakera. Log transaksi aktif diproses, dan kemudian fail log transaksi baru dibuka.

Ini juga menyegarkan komponen yang disebut pencari sehingga dokumen yang baru dibuat tersedia untuk dicari. Pencari boleh dianggap sebagai pandangan baca sahaja dari semua dokumen yang berkomitmen dalam indeks.

Operasi komit dapat dilakukan secara eksklusif oleh klien dengan memanggil API komit :

String zkHostString = "zkServer1:2181,zkServer2:2181,zkServer3:2181/solr"; SolrClient solr = new CloudSolrClient.Builder() .withZkHost(zkHostString) .build(); SolrInputDocument doc1 = new SolrInputDocument(); doc1.addField("id", "123abc"); doc1.addField("date", "14/10/2017"); doc1.addField("book", "To kill a mockingbird"); doc1.addField("author", "Harper Lee"); solr.add(doc1); solr.commit();

Sama, ia dapat diotomatiskan sebagai autoCommit dengan menentukannya dalam file solrconfig.xml , lihat bahagian 3.4.

3.2. Komuniti Lembut

Softcommit telah ditambahkan dari Solr 4 dan seterusnya, terutamanya untuk menyokong ciri NRT SolrCloud. Ini adalah mekanisme untuk menjadikan dokumen dapat dicari dalam masa nyata dengan melewatkan aspek-aspek yang sukar dilakukan dalam melakukan kerja keras.

Semasa melakukan softcommit, log transaksi tidak dipotong, ia terus berkembang. Namun, pencari baru dibuka , yang membuat dokumen sejak softcommit terakhir terlihat untuk mencari. Juga, beberapa cache tahap tinggi di Solr tidak sah, jadi ini bukan operasi sepenuhnya.

Apabila kita menentukan maxTime untuk softcommit sebagai 1000, ini bermakna dokumen tersebut akan tersedia dalam pertanyaan selewat-lewatnya 1 saat dari saat ia diindeks.

Ciri ini memberi SolrCloud kehebatan pencarian dalam masa nyata, kerana dokumen baru dapat dicari walaupun tanpa melakukannya. Softcommit hanya dapat dipicu sebagai autoSoftCommit dengan menentukannya dalam file olrconfig.xml , lihat bahagian 3.4.

3.3. Autocommit dan Autosoftcommit

The solrconfig.xml fail adalah salah satu yang paling fail konfigurasi penting dalam SolrCloud. Ia dihasilkan semasa pembuatan koleksi. Untuk mengaktifkan autoCommit atau autoSoftCommit , kita perlu mengemas kini bahagian berikut dalam fail:

 10000 30000 true   6000 1000 

maxTime: Bilangan milisaat sejak kemas kini paling awal tanpa komit selepas itu komit / softcommit seterusnya harus berlaku.

maxDocs: Jumlah kemas kini yang berlaku sejak komit terakhir dan selepas itu komit / softcommit seterusnya harus berlaku.

openSearcher: Properti ini memberitahu Solr sama ada membuka pencari baru setelah melakukan operasi atau tidak. Sekiranya benar , setelah melakukan komit, pencari lama ditutup, dan pencari baru dibuka, menjadikan dokumen yang berkomitmen dapat dilihat untuk dicari , Jika salah , dokumen tersebut tidak akan tersedia untuk dicari setelah melakukan.

4. Berhampiran Carian Masa Nyata

Pencarian Hampir Masa Nyata dicapai di Solr menggunakan gabungan komitmen dan softcommit. Seperti yang telah disebutkan sebelumnya, ketika dokumen ditambahkan ke Solr, dokumen tersebut tidak akan dapat dilihat dalam hasil carian sehingga dokumen tersebut diberikan ke indeks.

Normal commits are costly, which is why softcommits are useful. But, as softcommit doesn't persist the documents, we do need to set the autocommit maxTime interval (or maxDocs) to a reasonable value, depending upon the load we are expecting.

4.1. Real-Time Gets

There is another feature provided by Solr which is in-fact real time – the get API. The get API can return us a document that is not even soft committed yet.

It searches directly in the transaction logs if the document is not found in the index. So we can fire a get API call, immediately after the index call returns and we'll still be able to retrieve the document.

However, like all too-good things, there is a catch here. We need to pass the id of the document in the get API call. Of course, we can provide other filter queries along with the id, but without id, the call doesn't work:

//localhost:8985/solr/myCollection/get?id=1234&fq=name:baeldung

5. Conclusion

Solr provides quite a bit of flexibility to us regarding tweaking the NRT capability. To get the best performance out of the server, we need to experiment with the values of commits and softcommits, based upon our use case and expected load.

We shouldn't keep our commit interval too long, or else our transaction log will grow to a considerable size. We shouldn't execute our softcommits too frequently though.

Juga disarankan untuk melakukan pengujian prestasi sistem kami dengan betul sebelum kami pergi ke produksi. Kita harus memeriksa apakah dokumen tersebut dapat dicari dalam selang waktu yang kita inginkan.