練習 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 會被猜測為多值 pdate 類型。對於這個特定的資料集網域來說,電影名稱是一個單值的通用全文可搜尋欄位,而發行日期也是單值的,這樣更有意義。

索引資料

現在我們已經更新了架構,我們需要索引範例電影資料,或者,如果您已經索引過,則重新索引它以利用我們新增的新欄位定義。

$ 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 將指定使用 dismaxqf 參數,而演算法 B 將使用 dismaxqf 和必須匹配的 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 在整體上對真實使用者來說更好。

練習 4 總結

在本練習中,我們使用了 Schema API 來建立我們需要的欄位,然後學習如何將查詢參數組織成名為 ParamSets 的參數群組,這些群組是我們使用 Config API 建立並隨後在查詢中引用的。