Solr MM(最小匹配)和q.alt行为

Solr MM(最小匹配)和q.alt行为,solr,lucene,Solr,Lucene,我试图实现一个搜索,在我们的网站上迭代新的注册,并寻找重复的 为了原型化和游戏化,我用字段索引了我的测试用户 名字 姓氏 城市 假设我们有一个新用户,他的名字是Rob Lewis,他住在西雅图。我想对所有现有用户进行MM搜索,这些用户至少匹配两个名字:Rob lastName:Lewis city:Seattle 所以我想找到 所有罗布·刘易斯 所有住在西雅图的强盗 所有住在西雅图的刘易斯 我想我应该能够用Demax(或eDiscoveryMax)和 q、 alt=firstName:

我试图实现一个搜索,在我们的网站上迭代新的注册,并寻找重复的

为了原型化和游戏化,我用字段索引了我的测试用户

  • 名字
  • 姓氏
  • 城市
假设我们有一个新用户,他的名字是Rob Lewis,他住在西雅图。我想对所有现有用户进行MM搜索,这些用户至少匹配两个名字:Rob lastName:Lewis city:Seattle

所以我想找到

  • 所有罗布·刘易斯
  • 所有住在西雅图的强盗
  • 所有住在西雅图的刘易斯
我想我应该能够用Demax(或eDiscoveryMax)和

  • q、 alt=firstName:Rob lastName:Lewis城市:西雅图
  • 毫米=2
但它似乎不起作用。MM对结果没有影响,我只是得到了相同的列表,就像我没有指定MM一样(即所有Rob、所有Lewise和所有住在西雅图的用户)

另外,为了测试,我尝试了mm=100%,我希望这只与西雅图的Rob Lewis相匹配。然而,它再次匹配了所有罗伯斯、刘易斯和所有住在西雅图的用户)


我怎样才能达到我想要的结果?

除非我误解了你的问题,否则没有必要使用
q.alt
-你可以直接使用
q
defType=edismax
。我将按说明回答问题的其余部分(使用
q.alt

默认情况下,
q.alt
参数使用Lucene查询语法,
mm
仅被识别为(e)demax参数

您也可以通过localParams指示Solr对q.alt选项使用(e)Demax解析器:

q.alt={!dismax}firstName:Rob lastName:Lewis city:Seattle
还可以通过localparams提供特定的mm值:

q.alt={!dismax mm=2}firstName:Rob lastName:Lewis city:Seattle

你是对的!我曾尝试将q与Demax一起使用,但在指定字段时它不起作用(它在没有字段的情况下也起作用,例如“Rob Lewis Seattle”,但这不是理想的行为)。然而,使用eDiscoveryMax,它似乎确实像我预期的那样处理带有字段的查询。