我使用的是Solr 6.6.2,直到现在,我们使用的是DisMax查询和mm参数,它的工作原理与预期一样。一个小例子
defType=dismax&q=samsung+iphone&qf=name+brand&mm=1将按预期返回一个结果集,其中包含iPhones和三星产品。然而当与完全相同时,只需将defType替换为defType=edismax (保持mm=1),就不会返回结果。我已经阅读了eDisMax查询解析器在Apache引用上的文档,它明确表示eDisMax是一个扩展,因此我希望mm在DisMax和eDisMax中的行为都是一样的,如果您在相同的页面上向下滚动,文档还提供了一个mm参数的示例,这个示例应该像我所期望的那样工作。这是一个bug,还是我遗漏了一些很明显的东西?我喜欢这里的帮助
编辑添加与请求一起发送的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},...]
}}发布于 2018-01-30 15:17:02
我不确定是否还有其他人面临这个问题,但我觉得它没有得到很好的记录。我们的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至少给我找了两个这样的术语。如果删除mm参数,解析的查询看起来像(foo bar cat),因为q.op=OR返回包含这3个术语中任何一个的任何文档。
无论是哪种方式,这都不重要,也可以实现相同的行为,但令人困惑的是,disMax和eDisMax之间的行为有些不一致。
希望这能帮到别人。
https://stackoverflow.com/questions/48234331
复制相似问题