【问题标题】:Is it possible to ensure n-matches to a search in Elasticsearch?是否可以确保与 Elasticsearch 中的搜索匹配?
【发布时间】:2014-02-13 02:06:52
【问题描述】:

我正在尝试弄清楚如何在 Elasticsearch 中实现以下内容,感觉好像我之前已经阅读过有关如何实现的文档,但现在找不到了。

我将搜索 3 个字段; profileIds、标题和描述。

对于个人资料 ID,我只是在搜索完全匹配的词,这很简单。

我将有一个短语列表来匹配标题和描述,但我只想匹配任何关键字与标题或描述的匹配项总共有 3 个或更多(不一定是相同字段上的相同关键字)。

我知道我应该有一个这样的嵌套或查询设置:(匹配个人资料 ID,(在任何关键字的标题或描述上有 3 个匹配项))但我正在努力的部分是说“3 个匹配项” .

这在 Elasticsearch 中可行吗?

【问题讨论】:

    标签: elasticsearch


    【解决方案1】:

    您可以尝试将bool queryterms query 并用minimum_should_match

    例子:

    {
      "query": {
         "bool": {
            "must": [
               {
                  "term": {
                     "profile_ids": {
                        "value": "42"
                     }
                  }
               }
            ],
            "should": [
               {
                  "terms": {
                     "title": ["foo", "bar", "baz"],
                     "minimum_should_match": 3
                  }
               },
               {
                  "terms": {
                     "description": ["a", "b", "c", "d"],
                     "minimum_should_match": 3
                  }
               }
            ],
            "minimum_should_match": 1
         }
      }
    }
    

    因此,terms 的两个查询必须至少匹配 3 个关键字。然后这两者之一应该匹配,而profile_ids 必须始终匹配。

    请注意,如果您的关键字少于 3 个,则 terms 查询将在所有字词匹配时匹配。

    【讨论】:

    • 重读问题后,我发现这并不完全正确。要求是两个字段中总共有 3 个匹配项,而不是两个字段之一中的 3 个匹配项。我暂时先放着吧,它可能仍然有用。
    猜你喜欢
    • 2016-11-04
    • 2014-05-14
    • 1970-01-01
    • 1970-01-01
    • 2013-09-11
    • 1970-01-01
    • 1970-01-01
    • 2015-02-12
    • 1970-01-01
    相关资源
    最近更新 更多