ElasticSearch:如何查询(长)数组?

ElasticSearch: How to query an array (of long)?

我正在尝试查询 array 字段中值为 [1,2] 的文档。

GET a/g/_search
{"query":{"match":{"array":[1,2]}}}

returns错误:

{"error": "SearchPhaseExecutionException[Failed to execute phase [query], all shards failed... "status": 400 }

索引成功,使用命令:

PUT a/g/2
{"array": [1,2]}

映射如下:

{
   "a": {
      "mappings": {
         "g": {"properties": {"array": {"type": "long"}}}
      }
   }
}

您只能搜索该数组中的项目,而不是整个数组。

所以这会起作用:

{
    "query": {
        "match": {
            "array": 1
        }
    }
}

但是,可以使用变通方法搜索完整数组,方法是为跟踪数组中项目数的附加字段编制索引。通过结合搜索数组中的所有项目和计算它们,这在某种程度上是可以实现的。 http://www.elastic.co/guide/en/elasticsearch/guide/current/_finding_multiple_exact_values.html#_equals_exactly

假设您索引附加字段 count,文档变为 {"array": [1,2], "count": 2}。本例中的查询将是:

{
    "query": {
        "bool": {
            "must": [
                {"match": {"array": 1}},
                {"match": {"array": 2}},
                {"match": {"count": 2}}
            ]
        }
    }
}