是否有可能确保与Elasticsearch中的搜索匹配?

时间:2014-02-12 15:02:47

标签: elasticsearch

我正在试图弄清楚如何在Elasticsearch中实现以下内容,并感觉好像我之前已经阅读过如何操作文档但却无法再找到它。

我将搜索3个字段; profileIds,title和description。

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

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

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

这在Elasticsearch中是否可行?

1 个答案:

答案 0 :(得分:0)

您可以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查询将匹配,如果所有字词都匹配。