演習 4:ParamSets の使用
演習 4:ParamSets の使用
この演習では、ParamSets を使用して多数の異なるクエリパラメータをラベル付きのグループにまとめ、クエリで参照する方法を学習します。
準備
tutorial-films.adoc#restart-solrの手順に従って、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 フィールドは複数値の |
データのインデックス作成
スキーマを更新したので、サンプルの映画データのインデックスを作成する必要があります。既にインデックスを作成している場合は、追加した新しいフィールド定義を利用するために再インデックスを作成します。
Linux/Mac
$ bin/solr post -c films example/films/films.json
Windows
$ bin/solr post -c films example\films\films.json
検索を始めましょう!
'Batman' を検索
-
name フィールドが存在しないというエラーが発生する場合は、まだデータのインデックスを作成していません。
-
エラーは発生しないが、結果がゼロの場合、name フィールドのスキーマタイプのオーバーライドがデータの最初のインデックス作成前に設定されていない可能性があります(「string」タイプになり、大文字と小文字を区別した正確な一致が必要になります)。環境をリセットしてやり直すのが最も簡単で、各手順が正常に実行されるようにします。
すべての 'スーパーヒーロー' 映画を表示
$ 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 を使用してパラメータを 2 つのエクスペリメントに整理してみましょう。
'harry potter' を検索
最初の結果が映画「アダムス・ファミリー2」であることに注目してください。これは明らかにハリーポッターの映画とは関係ありません。
API を使用して関連性アルゴリズムを 2 つ設定し、結果の品質を比較してみましょう。アルゴリズム A は dismax
と qf
パラメータを使用し、アルゴリズム B は dismax
、qf
、および 100% に設定された必須一致 mm
を使用します。
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」を検索します。
ハリー・ポッター映画を含む 5 つの結果が返されますが、「Dumb & Dumberer: When Harry Met Lloyd」という映画も返されていることに注意してください。
アルゴリズム B を使用して「harry potter」を検索します。
ハリー・ポッター映画 4 本のみが返され、より正確な結果が得られました!少なくともこの 1 つのクエリに関しては、アルゴリズム B の方がアルゴリズム A より優れていると考えられます。この仮説は、オンライン A/B テストで検証し、アルゴリズム B が全体として優れていることを実際のユーザーで確認できます。