练习 4:使用 ParamSets
练习 4:使用 ParamSets
本练习将教您如何使用 ParamSets 将许多不同的查询参数分组到一个标记分组中,您可以在查询中引用该分组。
准备工作
确保您运行了 Solr,按照 tutorial-films.adoc#restart-solr 中的步骤进行操作。然后继续进行下一部分。
创建新集合
$ bin/solr create -c films
由于我们没有指定 ConfigSet,因此我们将最终使用 _default
ConfigSet。我们将为 Solr 会以不同方式(与我们希望的)猜测的几个字段指定特定模式
$ curl http://localhost: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 'http://localhost:8983/solr/films/query?q=*:*&fq=genre:"Superhero movie"'
让我们看看所有电影中流派的分布。有关计数,请参阅响应的方面部分
$ curl 'http://localhost:8983/solr/films/query?q=*:*&facet=true&facet.field=genre'
使用 ParamSets 进行相关性调整的时间
现在我们可以查询我们的数据了,让我们实际使用 ParamSets 将我们的参数组织成两个实验。
搜索“哈利波特”
注意第一个结果是电影Dumb & Dumberer: When Harry Met Lloyd?这显然与任何哈利波特电影无关。
让我们使用我们的 API 设置两个相关性算法,然后比较结果的质量。算法A将指定使用dismax
和qf
参数,而算法B将使用dismax
、qf
和将必须匹配设置为 100% 的mm
。
curl http://localhost: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搜索“哈利波特”
我们返回五个结果,包括哈利波特电影,但请注意,我们仍然有Dumb & Dumberer: When Harry Met Lloyd电影回来?
使用算法B搜索“哈利波特”
我们只返回四部哈利波特电影,从而得到更精确的结果!我们可以说,我们相信算法B比算法A更好,至少对于这个查询是这样。您可以通过在线 A/B 测试验证此假设,以确认算法B总体上更好。