10 tips untuk permintaan pencarian yang lebih baik di Apache Solr

Apache Solr adalah mesin pencari open source, tetapi lebih dari itu. Ini adalah database NoSQL dengan dukungan transaksional. Ini adalah database dokumen yang menawarkan dukungan SQL dan menjalankannya secara terdistribusi.

Sebelumnya, saya telah menunjukkan kepada Anda cara membuat dan memuat koleksi ke Solr; Anda dapat memuat koleksi itu sekarang jika Anda belum melakukannya sebelumnya. (Pengungkapan penuh: Saya bekerja untuk Lucidworks, yang mempekerjakan banyak kontributor utama proyek Solr.)

Dalam posting ini, saya akan menunjukkan 10 hal lagi yang dapat Anda lakukan dengan koleksi itu:

1. Filter kueri

Pertimbangkan pertanyaan ini:

//localhost:8983/solr/ipps/select?fq=Provider_State:NC&indent=on&q=*:*&wt=json

Secara sepintas, kueri ini terlihat mirip jika saya baru saja melakukannya q=Provider_State:NC. Namun, kueri filter hanya mengembalikan ID, dan tidak memengaruhi skor. Kueri filter juga disimpan dalam cache. Ini adalah cara yang baik untuk menemukan yang paling relevan q=blue suededalam department:footwearsebagai lawan department:clothingatau department:music.

2. Faceting

Coba kueri ini:

//localhost:8983/solr/ipps/select?facet=on&facet.field=Provider_State&facet.limit=-1&indent=on&q=*:*&wt=json

Berikut ini dikembalikan di atas:

Indo

Faceting memberi Anda jumlah kategori Anda (antara lain). Jika Anda menerapkan situs ritel, inilah cara Anda memberikan jumlah kategori dan kategori untuk departemen atau cara lain untuk membagi inventaris Anda.

3. Rentang segi

Tambahkan ini ke string kueri: facet.interval=Average_Total_Payments&facet.interval.set=[0,1999.99]&facet.interval.set=[2000,2999.99]&facet.interval.set=[3000,3999.99]&facet.interval.set=[4000,4999.99]&facet.interval.set=[5000,5999.99]&facet.interval.set=[6000,6999.99]&facet.interval.set=[7000,7999.99]&&facet.interval.set=[8000,8999.99]&facet.interval.set=[9000,10000]

Anda akan mendapatkan:

Faset rentang ini dapat membantu membagi bidang numerik menjadi kategori rentang. Jika Anda membantu seseorang menemukan laptop dalam kisaran $ 2.000- $ 3.000, ini untuk Anda. Anda dapat melakukan kueri serupa tanpa hard-coding rentang dengan melakukan ini sebagai gantinya:facet.range=Average_Total_Payments&facet.range.gap=999.99&facet.range.start=2000&facet.range.end=10000

4. DocValues

Dalam skema Anda, pastikan docValuesatribut dipilih untuk kolom yang Anda gunakan faceting. Ini mengoptimalkan bidang untuk penelusuran semacam ini dan menghemat memori pada waktu kueri, seperti yang ditunjukkan dalam kutipan schema.xml ini:

5. PseudoFields

Anda dapat melakukan operasi pada data Anda dan mengembalikan nilai. Coba ini:

//localhost:8983/solr/ipps/select?fl=Provider_Name,%20Average_Total_Payments,price_category:if(min(0,sub(Average_Total_Payments,5000)),%22inexpensive%22,%22expensive%22)&indent=on&q=*:*&rows=10&wt=json

Contoh ini menggunakan beberapa fungsi bawaan Solr untuk mengkategorikan penyedia mahal atau murah berdasarkan pembayaran total rata-rata. Aku meletakkan price_category:if(min(0,sub(Average_Total_Payments,5000)),"inexpensive","expensive")di fl, atau daftar bidang, bersama dengan dua bidang lainnya.

6. Pengurai kueri

defType memungkinkan Anda memilih salah satu parser kueri Solr. Standard Query Parser default sangat bagus untuk kueri yang dibuat oleh mesin tertentu. Tetapi Solr juga memiliki parser Dismax dan eDismax, yang lebih baik untuk orang normal: Anda dapat mengklik salah satunya di bagian bawah layar kueri admin atau menambahkan defType=dismaxke string kueri Anda. Pengurai Dismax umumnya menghasilkan hasil yang lebih baik untuk kueri yang dimasukkan pengguna dengan menemukan "maksimum disjungsi", atau bidang dengan kecocokan paling banyak, dan menambahkannya ke skor.

7. Meningkatkan

Jika Anda menelusuri Provider_State:AL^5 OR Provider_State:NC^10, hasil di Carolina Utara akan diberi skor lebih tinggi daripada hasil di Alabama. Anda bisa melakukan ini di kueri Anda ( q=""). Ini adalah cara penting untuk memanipulasi hasil yang dikembalikan.

8. Rentang tanggal

Although the example data doesn’t support any date-range searches, if it did it would be formatted like timestamp_dt:[2016-12-31T17:51:44.000Z TO 2017-02-20T18:06:44.000Z]. Solr supports date type fields and date type searches and filtering.

9. TF-IDF and BM25

The original scoring mechanism that Solr used (to determine which documents were relevant to your search term) is called TF-IDF, for “term frequency versus the inverse document frequency.” It returns how frequently a term occurs in your field or document versus how frequently that term occurs overall in your collection. The problem with this algorithm is that having "Game of Thrones" occur 100 times in a 10-page document versus ten times in a 10-page document doesn't make the document 10 times more relevant. It makes it more relevant but not 10 times more relevant.

BM25 memperlancar proses ini, secara efektif membiarkan dokumen mencapai titik jenuh, setelah itu dampak dari kejadian tambahan dikurangi. Versi terbaru dari Solr semua menggunakan BM25 secara default.

10. debugQuery

Di konsol Admin Query, Anda dapat memeriksa debugQuery untuk ditambahkan debugQuery=onke string kueri Solr. Jika Anda memeriksa hasilnya, Anda akan menemukan keluaran ini:

Antara lain yang Anda lihat adalah menggunakan LuceneQParser (nama parser kueri standar) dan, di atasnya, bagaimana setiap hasil dinilai. Anda melihat algoritme BM25 itu sendiri dan bagaimana peningkatan memengaruhi penilaian. Jika Anda mencoba men-debug penelusuran Anda, ini adalah alat yang sangat berharga!

Sepuluh aspek Solr ini pasti membantu saya saat menggunakan Solr untuk mencari dan menyetel hasil saya.