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}}
]
}
}
}
我正在尝试查询 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}}
]
}
}
}