最小值应匹配筛选查询

bet*_*o86 8 elasticsearch

是否有可能有这样的查询

  "query": {
  "filtered": {
     "filter": {
        "terms": {
           "names": [
             "Anna",
             "Mark",
             "Joe"
           ],
           "execution" : "and"
        }
      }
    }
  } 
Run Code Online (Sandbox Code Playgroud)

随着"minimum_should_match": "2"声明?

我知道我可以使用一个简单的查询(我已经尝试过,它有效)但我不需要计算得分.我的目标是过滤包含2个值的文档.

分数通常会严重影响检索文档所需的时间吗?

使用此查询:

  "query": {
  "filtered": {
     "filter": {
        "terms": {
           "names": [
             "Anna",
             "Mark",
             "Joe"
           ],
           "execution" : "and",
           "minimum_should_match": "2"
        }
      }
    }
  } 
Run Code Online (Sandbox Code Playgroud)

我收到了这个错误:

QueryParsingException[[my_db] [terms] filter does not support [minimum_should_match]]
Run Code Online (Sandbox Code Playgroud)

Ian*_*bes 9

最小匹配不是参数terms filter.如果这是您正在寻找的功能,我可能会像这样重写您的查询,以使用bool query包装在query filter:

{
   "filter": {
      "query": {
         "bool": {
            "must": [
               {
                  "term": {
                     "names": "Anna"
                  }
               },
               {
                  "term": {
                     "names": "Mark"
                  }
               },
               {
                  "term": {
                     "name": "Joe"
                  }
               }
            ],
            "minimum_number_should_match": 2
         }
      }
   }
}
Run Code Online (Sandbox Code Playgroud)

您将获得最接近所有三个匹配的文档,但查询也将使文档与三个术语中的两个完全匹配.这must是隐含的和.我们也没有计算得分,因为我们已将查询作为过滤器执行.

  • 不要在bool查询中使用`must`.使用`should`代替,因为`minimum_number_should_match`仅适用于should. (5认同)