10 petua untuk pertanyaan carian yang lebih baik di Apache Solr

Apache Solr adalah enjin carian sumber terbuka, tetapi ia lebih daripada itu. Ia adalah pangkalan data NoSQL dengan sokongan transaksi. Ia adalah pangkalan data dokumen yang menawarkan sokongan SQL dan melaksanakannya secara diedarkan.

Sebelum ini, saya telah menunjukkan cara membuat dan memuatkan koleksi ke dalam Solr; anda boleh memuatkan koleksi itu sekarang jika anda tidak melakukannya sebelum ini. (Pendedahan penuh: Saya bekerja untuk Lucidworks, yang menggunakan banyak penyumbang utama untuk projek Solr.)

Dalam catatan ini, saya akan menunjukkan lebih banyak lagi 10 perkara yang boleh anda lakukan dengan koleksi itu:

1. Tapis pertanyaan

Pertimbangkan pertanyaan ini:

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

Di wajahnya, pertanyaan ini kelihatan serupa dengan jika saya baru sahaja melakukannya q=Provider_State:NC. Walau bagaimanapun, pertanyaan penapis hanya mengembalikan ID dan tidak mempengaruhi skor. Pertanyaan tapisan juga disimpan dalam cache. Ini adalah cara yang baik untuk mencari yang paling relevan q=blue suededalam department:footwearyang bertentangan dengan department:clothingatau department:music.

2. Menghadap

Cuba pertanyaan ini:

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

Perkara berikut dikembalikan di bahagian atas:

ID

Faceting memberi anda jumlah kategori (antara lain). Sekiranya anda melaksanakan laman web runcit, ini adalah cara anda menyediakan kategori dan kiraan kategori untuk jabatan atau cara lain untuk membahagikan inventori anda.

3. Rentang segi

Tambahkan ini ke rentetan pertanyaan: 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 mendapat:

Rangkaian aspek ini dapat membantu membahagikan medan angka menjadi kategori julat. Sekiranya anda membantu seseorang mencari komputer riba dalam lingkungan $ 2,000- $ 3,000, ini sesuai untuk anda. Anda boleh membuat pertanyaan serupa tanpa mengekodkan julat dengan melakukan ini sebagai gantinya:facet.range=Average_Total_Payments&facet.range.gap=999.99&facet.range.start=2000&facet.range.end=10000

4. Nilai Doc

Dalam skema anda, pastikan docValuesatribut dipilih untuk bidang yang anda hadapi. Ini mengoptimumkan medan untuk jenis carian dan menyimpan memori pada masa pertanyaan, seperti yang ditunjukkan dalam petikan schema.xml ini:

5. PseudoFields

Anda boleh melakukan operasi pada data anda dan mengembalikan nilai. Cuba 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

Contohnya menggunakan beberapa fungsi bawaan Solr untuk mengkategorikan penyedia sebagai mahal atau murah berdasarkan jumlah pembayaran rata-rata. Saya masukkan ke price_category:if(min(0,sub(Average_Total_Payments,5000)),"inexpensive","expensive")dalam fl, atau senarai bidang, bersama dengan dua bidang lain.

6. Penghurai pertanyaan

defType membolehkan anda memilih salah satu penghurai pertanyaan Solr. Standard Query Parser lalai benar-benar baik untuk pertanyaan yang dihasilkan oleh mesin tertentu. Tetapi Solr juga mempunyai penghurai Dismax dan eDismax, yang lebih baik untuk orang normal: Anda boleh mengklik salah satu dari mereka di bahagian bawah skrin pertanyaan pentadbir atau menambah defType=dismaxrentetan pertanyaan anda. Penghurai Dismax secara amnya menghasilkan hasil yang lebih baik untuk pertanyaan yang dimasukkan oleh pengguna dengan mencari "maksimum gangguan", atau bidang dengan padanan paling banyak, dan menambahkannya ke skor.

7. Meningkatkan

Sekiranya anda mencari Provider_State:AL^5 OR Provider_State:NC^10, keputusan di North Carolina akan mendapat markah lebih tinggi daripada keputusan di Alabama. Anda boleh melakukan ini dalam pertanyaan anda ( q=""). Ini adalah kaedah penting untuk memanipulasi hasil yang dikembalikan.

8. Julat tarikh

Walaupun data contoh tidak menyokong carian jangka masa apa pun, jika dilakukan, ia akan diformat seperti timestamp_dt:[2016-12-31T17:51:44.000Z TO 2017-02-20T18:06:44.000Z]. Solr menyokong bidang jenis tarikh dan carian dan penapisan jenis tarikh.

9. TF-IDF dan BM25

Mekanisme pemarkahan asal yang digunakan Solr (untuk menentukan dokumen mana yang relevan dengan istilah carian anda) disebut TF-IDF, untuk "frekuensi istilah berbanding frekuensi dokumen terbalik." Ia mengembalikan seberapa kerap istilah itu berlaku di bidang atau dokumen anda berbanding seberapa kerap istilah itu berlaku secara keseluruhan dalam koleksi anda. Masalah dengan algoritma ini adalah bahawa "Game of Thrones" berlaku 100 kali dalam dokumen 10 halaman berbanding sepuluh kali dalam dokumen 10 halaman tidak menjadikan dokumen 10 kali lebih relevan. Ini menjadikannya lebih relevan tetapi tidak 1 0 kali lebih relevan.

BM25 melancarkan proses ini, dengan berkesan membiarkan dokumen mencapai titik tepu, setelah itu kesan kejadian tambahan dapat dikurangkan. Versi terbaru Solr semua menggunakan BM25 secara lalai.

10. debugQuery

Di konsol Pertanyaan Pentadbir, anda boleh menyemak debugQuery untuk menambah debugQuery=onrentetan pertanyaan Solr. Sekiranya anda memeriksa hasilnya, anda akan mendapat hasilnya:

Antara lain yang anda lihat ialah menggunakan LuceneQParser (nama parser pertanyaan standard) dan, di atas itu, bagaimana setiap keputusan dijaringkan. Anda melihat algoritma BM25 itu sendiri dan bagaimana peningkatan mempengaruhi pemarkahan. Sekiranya anda cuba menyahpepijat carian anda, ini adalah alat yang sangat berharga!

Sepuluh aspek Solr ini pasti menolong saya ketika menggunakan Solr untuk mencari dan menyesuaikan hasil saya.