一尘不染

Elasticsearch与字段的匹配列表

elasticsearch

我有一个列表,数组或您熟悉的任何一种语言。例如,names:如果与这些名称之一匹配["John","Bas","Peter"],我想查询该name字段。

一种方法是使用OR过滤器。例如

{
    "filtered" : {
        "query" : {
            "match_all": {}
        },
        "filter" : {
            "or" : [
                {
                    "term" : { "name" : "John" }
                },
                {
                    "term" : { "name" : "Bas" }
                },
                {
                    "term" : { "name" : "Peter" }
                }
            ]
        }
    }
}

有什么更好的办法吗?如果它是查询,则比过滤器更好。


阅读 363

收藏
2020-06-22

共1个答案

一尘不染

{
  "query": {
    "filtered" : {
      "filter" : {
        "terms": {
          "name": ["John","Bas","Peter"]
        }
      }
    }
  }
}

哪一个Elasticsearch会像您曾经使用过的那样重写

{
  "query": {
    "filtered" : {
      "filter" : {
        "bool": {
          "should": [
            {
              "term": {
                "name": "John"
              }
            },
            {
              "term": {
                "name": "Bas"
              }
            },
            {
              "term": {
                "name": "Peter"
              }
            }
          ]
        }
      }
    }
  }
}

在大多数情况下,使用布尔型过滤器时,使用bool过滤器比and或更好or。原因在Elasticsearch博客中进行了解释:http://www.elasticsearch.org/blog/all-about-
elasticsearch-filter-bitsets/

2020-06-22