练习 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* 将被猜测为多值 |
索引数据
现在我们已经更新了模式,我们需要索引示例电影数据,或者,如果您已经索引了数据,则需要重新索引它以利用我们添加的新字段定义。
$ bin/solr post -c films example/films/films.json
开始搜索!
搜索“蝙蝠侠”
-
如果您收到有关 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:当哈里遇到劳埃德》?这显然与任何哈利·波特电影无关。
让我们使用我们的 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 搜索“哈利·波特”
我们返回了五个结果,包括哈利·波特电影,但是请注意,我们仍然有《阿呆与阿瓜2:当哈里遇到劳埃德》这部电影返回?
使用算法 B 搜索“哈利·波特”
我们只返回了四部哈利·波特电影,从而获得了更精确的结果!我们可以说,至少对于这个查询,我们认为算法 B 比算法 A 更好。您可以使用在线 A/B 测试来验证这个假设,以确认算法 B 总体上更好。