SOLR 6.6 eDisMax 查询不考虑 mm 参数
SOLR 6.6 eDisMax query not respecting mm parameter
我使用的是 Solr 6.6.2,到目前为止,我们一直在使用 DisMax 查询和 mm
参数,它按预期工作。一个小例子
defType=dismax&q=samsung+iphone&qf=name+brand&mm=1
会 return 符合预期的结果集,包含 iPhone 和三星产品。 但是当做完全同样的事情时,只需将defType
替换为defType=edismax
(保持mm=1
) 没有结果 returned。我已经在 Apache SOLR reference 阅读了 eDisMax 查询解析器的文档,它清楚地表明 eDisMax 是一个 扩展 所以我希望 mm
在DisMax 和 eDisMax,如果您在同一页面上向下滚动,文档还提供了 mm
参数的示例,它应该按我的预期工作。
这是一个错误,还是我遗漏了一些非常明显的东西?喜欢这里的帮助
编辑添加随请求一起发送的 solr 参数
eDisMax
{
"responseHeader":{
"zkConnected":true,
"status":0,
"QTime":0,
"params":{
"mm":"1",
"q":"samsung iphone",
"defType":"edismax",
"indent":"on",
"fl":"name, category_names, score",
"fq":"channel:outbound",
"wt":"json",
"_":"1515855895772"}},
"response":{"numFound":0,"start":0,"maxScore":0,"docs":[]
}}
DisMax
{
"responseHeader":{
"zkConnected":true,
"status":0,
"QTime":22,
"params":{
"mm":"1",
"q":"samsung iphone",
"defType":"dismax",
"indent":"on",
"fl":"name, category_names, score",
"fq":"channel:outbound",
"wt":"json",
"_":"1515855895772"}},
"response":{"numFound":2147,"start":0,"maxScore":12.172616,"docs":[
{
"name":"Apple iPhone 5s",
"score":12.172616},...]
}}
不确定其他人是否遇到过这个问题,但我觉得没有很好的记录。
我们的 Solr q.op
默认为 AND
,因此像 "foo bar car"
这样的搜索词被搜索为 foo AND bar AND cat
。现在使用 mm=2
和 defType=dismax
查询被解析为 (foo AND bar AND cat)~2
到目前为止还不错..
当我更改 defType=edismax
时,相同的查询 "foo bar cat"
和 mm=2
被解析为 (foo AND bar AND cat)
注意: 缺少~2
。
现在,如果我继续添加 q.op=OR
,有趣的事情就会开始发生。解析后的查询现在看起来像 (foo bar cat)~2
这正是 dismax
所做的。所以你可以理解 (foo bar cat)~2
找到我至少 2 个这些术语。如果我删除 mm
参数,解析后的查询看起来像 (foo bar cat)
并且由于 q.op=OR
它 returns 任何包含 3 个术语中的任何一个的文档。
无论哪种方式,都没有关系,可以实现相同的行为,只是令人困惑的是 disMax
和 eDisMax
之间的行为有些不一致。
希望这对其他人有帮助。
我使用的是 Solr 6.6.2,到目前为止,我们一直在使用 DisMax 查询和 mm
参数,它按预期工作。一个小例子
defType=dismax&q=samsung+iphone&qf=name+brand&mm=1
会 return 符合预期的结果集,包含 iPhone 和三星产品。 但是当做完全同样的事情时,只需将defType
替换为defType=edismax
(保持mm=1
) 没有结果 returned。我已经在 Apache SOLR reference 阅读了 eDisMax 查询解析器的文档,它清楚地表明 eDisMax 是一个 扩展 所以我希望 mm
在DisMax 和 eDisMax,如果您在同一页面上向下滚动,文档还提供了 mm
参数的示例,它应该按我的预期工作。
这是一个错误,还是我遗漏了一些非常明显的东西?喜欢这里的帮助
编辑添加随请求一起发送的 solr 参数
eDisMax
{
"responseHeader":{
"zkConnected":true,
"status":0,
"QTime":0,
"params":{
"mm":"1",
"q":"samsung iphone",
"defType":"edismax",
"indent":"on",
"fl":"name, category_names, score",
"fq":"channel:outbound",
"wt":"json",
"_":"1515855895772"}},
"response":{"numFound":0,"start":0,"maxScore":0,"docs":[]
}}
DisMax
{
"responseHeader":{
"zkConnected":true,
"status":0,
"QTime":22,
"params":{
"mm":"1",
"q":"samsung iphone",
"defType":"dismax",
"indent":"on",
"fl":"name, category_names, score",
"fq":"channel:outbound",
"wt":"json",
"_":"1515855895772"}},
"response":{"numFound":2147,"start":0,"maxScore":12.172616,"docs":[
{
"name":"Apple iPhone 5s",
"score":12.172616},...]
}}
不确定其他人是否遇到过这个问题,但我觉得没有很好的记录。
我们的 Solr q.op
默认为 AND
,因此像 "foo bar car"
这样的搜索词被搜索为 foo AND bar AND cat
。现在使用 mm=2
和 defType=dismax
查询被解析为 (foo AND bar AND cat)~2
到目前为止还不错..
当我更改 defType=edismax
时,相同的查询 "foo bar cat"
和 mm=2
被解析为 (foo AND bar AND cat)
注意: 缺少~2
。
现在,如果我继续添加 q.op=OR
,有趣的事情就会开始发生。解析后的查询现在看起来像 (foo bar cat)~2
这正是 dismax
所做的。所以你可以理解 (foo bar cat)~2
找到我至少 2 个这些术语。如果我删除 mm
参数,解析后的查询看起来像 (foo bar cat)
并且由于 q.op=OR
它 returns 任何包含 3 个术语中的任何一个的文档。
无论哪种方式,都没有关系,可以实现相同的行为,只是令人困惑的是 disMax
和 eDisMax
之间的行为有些不一致。
希望这对其他人有帮助。