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

时间:2015-03-11 13:01:48

标签: elasticsearch

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

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

返回错误:

{"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"}}}
      }
   }
}

1 个答案:

答案 0 :(得分:0)

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

所以这会奏效:

{
    "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}}
            ]
        }
    }
}