【问题标题】:Solr MM (Min Match) and q.alt behaviourSolr MM(最小匹配)和 q.alt 行为
【发布时间】:2014-08-29 03:58:45
【问题描述】:

我正在尝试实现一个搜索,该搜索会遍历我们网站上的新注册并查找重复项。

为了原型设计和玩耍,我用字段索引了我的测试用户

  • 名字
  • 姓氏
  • 城市

假设我们有一个名为 Rob Lewis 的新用户,他住在西雅图。我想对至少匹配 2 个 firstName:Rob lastName:Lewis city:Seattle 的所有现有用户进行 MM 搜索。

所以我想找到

  • 所有罗布·刘易斯
  • 所有住在西雅图的罗伯
  • 所有住在西雅图的刘易斯人

我认为我应该能够使用 dismax(或 edismax)来做到这一点

  • q.alt=firstName:Rob lastName:Lewis city:Seattle
  • mm=2

但它似乎不起作用。 MM 对结果没有影响,我只得到与我没有指定 MM 相同的列表(即所有 Rob、所有 Lewises 和所有住在西雅图的用户)。

另外只是为了测试,我尝试了 mm=100%,我希望它只匹配西雅图的 Rob Lewis。然而,它再次匹配了所有 Rob、所有 Lewises 和所有居住在西雅图的用户)。

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

【问题讨论】:

    标签: solr lucene


    【解决方案1】:

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

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

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

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

    也可以通过localparams提供具体的mm值:

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

    【讨论】:

    • 你是对的!我曾尝试将 q 与 dismax 一起使用,但在指定字段时它不起作用(它在没有字段的情况下工作,即“Rob Lewis Seattle”,但这不是所需的行为)。但是,使用 edismax,它似乎确实可以按我的预期处理带有字段的查询。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2016-08-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-04-27
    相关资源
    最近更新 更多