我使用的是 Solr 6.6.2,到目前为止,我们一直使用 DisMax 查询和mm
参数,它的工作方式符合预期。一个小例子
defType=dismax&q=samsung+iphone&qf=name+brand&mm=1
将按预期返回一个结果集,其中包含iPhone和三星产品。但是,当做完全相同的事情时,只需将defType
替换到defType=edismax
(保持mm=1
)没有返回任何结果。我已经在Apache SOLR参考中阅读了eDisMax查询解析器的文档,它清楚地表明eDisMax是一个扩展,因此我希望mm
在DisMax和eDisMax中的行为相同,如果您在同一页面上向下滚动,该文档还提供了mm
参数的示例,该参数应该按我预期工作。 这是一个错误,还是我错过了一些非常明显的东西?喜欢这里的一些帮助
编辑 添加与请求一起发送的 solr 参数
易迪斯麦克斯
{
"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":[]
}}
最大
{
"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},...]
}}
不确定是否有其他人遇到这个问题,但我觉得它没有很好的记录。 我们的 Solrq.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
之间的行为有些不一致。
希望这对其他人有所帮助。