如何通过数组使用Elasticsearch检索类型为array字段的数组并检索是否至少有一个匹配项

时间:2018-08-17 08:20:19

标签: elasticsearch

我有情况,我使用bool和filter,在数组上搜索具有字段类型为array的数组,如果我匹配一个,我想得到它,但它不起作用

使用['one', 'two', 'three']进行搜索时,您希望获得甚至包含一个如下数组数据的东西

{
  "created_at": "2018-01-01",
  "tag": ['one']
},
{
  "created_at": "2018-01-01",
  "tag": ['one', 'four', 'ten']
},
{
  "created_at": "2018-01-01",
  "tag": ['two', 'three', 'ten']
},

我如下进行了各种尝试,但是它不起作用

{
  "query": {
    "bool": {
      "filter": {"terms": {"tag": ['one', 'two', 'three']}}
    }
  }
}

{
  "query": {
    "bool": {
      "filter": {"bool": {"should": {"terms": {"tag": ['one', 'two', 'three']}}}
     }
   }
  }
}

我该怎么办?

{
  "query": {
    "bool": {
      "filter": ????
    }
  }
}

1 个答案:

答案 0 :(得分:0)

条款查询过滤器具有与任何提供的条款(未分析)匹配的字段的文档。

GET /_search 

{
    "query": {
        "constant_score" : {
            "filter" : {
                 "bool" : {
                    "should" : { "terms" : { "tag" : ["one","two","three"] } }
                }
            }
        }
    }
}