我正在使用Solr 6.6.2,直到现在我们使用DisMax查询和mm
参数,它的工作方式与预期一致。一个小例子
defType=dismax&q=samsung+iphone&qf=name+brand&mm=1
将按预期返回结果集,其中包含iPhone和Samsung产品。 然而当完全同样的事情时,只需将defType
替换为defType=edismax
(保持mm=1
),就不会返回任何结果。我已经在own error function上阅读了eDisMax查询解析器的文档,它清楚地说eDisMax是扩展所以我希望mm
在DisMax和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},...]
}}
答案 0 :(得分:0)
不确定是否有其他人遇到过这个问题,但我觉得它没有得到很好的记录。
我们的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
后它返回包含3个术语中的任何一个的任何文档。
无论哪种方式,它都无关紧要,并且可以实现相同的行为,它只是令人困惑的是disMax
和eDisMax
之间的行为有些不一致。
希望这有助于其他人。