練習 4:使用 ParamSets
練習 4:使用 ParamSets
本練習將教您如何使用 ParamSets 將許多不同的查詢參數分組到標記的分組中,以便您在查詢中參考。
準備就緒
請確保您已執行 Solr,並遵循tutorial-films.adoc#restart-solr中的步驟。然後繼續下一節。
建立新集合
$ bin/solr create -c films
由於我們沒有指定 ConfigSet,因此我們最終將使用 _default
ConfigSet。我們將為幾個欄位指定特定的架構,Solr 在其他情況下會以不同的方式(與我們期望的不同)猜測它們
$ curl https://127.0.0.1:8983/solr/films/schema -X POST -H 'Content-type:application/json' --data-binary '{
"add-field" : [
{
"name":"name",
"type":"text_general",
"multiValued":false,
"stored":true
},
{
"name":"initial_release_date",
"type":"pdate",
"stored":true
}
]
}'
在未明確定義這些欄位類型的情況下,name 欄位會被猜測為多值字串欄位類型,而 initial_release_date 會被猜測為多值 |
索引資料
現在我們已經更新了架構,我們需要索引範例電影資料,或者,如果您已經索引過,則重新索引它以利用我們新增的新欄位定義。
$ bin/solr post -c films example/films/films.json
開始搜尋吧!
搜尋「蝙蝠俠」
-
如果您收到關於名稱欄位不存在的錯誤,表示您尚未索引資料。
-
如果您沒有收到錯誤,但結果為零,則很可能是在第一次索引資料之前沒有設定 name 欄位架構類型覆寫(它最終成為「字串」類型,甚至需要區分大小寫的精確匹配)。最簡單的方法是直接重設您的環境並重試,確保每個步驟都成功執行。
顯示所有「超級英雄」電影
$ curl 'https://127.0.0.1:8983/solr/films/query?q=*:*&fq=genre:"Superhero movie"'
讓我們看看所有電影的類型分佈。請參閱回應的分面部分以查看計數
$ curl 'https://127.0.0.1:8983/solr/films/query?q=*:*&facet=true&facet.field=genre'
是時候使用 ParamSets 調整相關性了
現在我們可以查詢我們的資料了,讓我們實際使用 ParamSets 將我們的參數組織成兩個實驗。
搜尋「哈利波特」
請注意,第一個結果是電影《阿呆與阿瓜:當哈利遇到萊德》?這顯然與任何哈利波特電影無關。
讓我們使用我們的 API 設定兩個相關性演算法,然後比較結果的品質。演算法 A 將指定使用 dismax
和 qf
參數,而演算法 B 將使用 dismax
、qf
和必須匹配的 mm
設定為 100%。
curl https://127.0.0.1:8983/solr/films/config/params -X POST -H 'Content-type:application/json' --data-binary '{
"set": {
"algo_a":{
"defType":"dismax",
"qf":"name"
}
},
"set": {
"algo_b":{
"defType":"dismax",
"qf":"name",
"mm":"100%"
}
}
}'
使用演算法 A 搜尋「harry potter」
我們傳回了五個結果,包括哈利波特電影,但是請注意,我們仍然有《阿呆與阿瓜:當哈利遇上勞埃德》這部電影出現?
使用演算法 B 搜尋「harry potter」
我們只傳回了四部哈利波特電影,產生了更精確的結果!我們可以說,至少對於這個查詢,我們認為演算法 B 比演算法 A 更好。您可以使用線上 A/B 測試來驗證此假設,以確認演算法 B 在整體上對真實使用者來說更好。