9
我遇到了一個問題,即elasticsearch無法通過在嵌套字段上使用聚合條件來返回唯一文檔的計數。如何使用elasticsearch聚合返回唯一文檔的計數
這裏是我們的模型的例子:
{
...,
"location" : [
{"city" : "new york", "state" : "ny"},
{"city" : "woodbury", "state" : "ny"},
...
],
...
}
我想做的狀態領域聚集,但這個文件將在「NY」鬥,因爲「紐約」中出現兩次被計算兩次文件。
所以我想知道是否有辦法抓住不同文件的計數。
映射:
people = {
:properties => {
:location => {
:type => 'nested',
:properties => {
:city => {
:type => 'string',
:index => 'not_analyzed',
},
:state => {
:type => 'string',
:index => 'not_analyzed',
},
}
},
:last_name => {
:type => 'string',
:index => 'not_analyzed'
}
}
}
查詢是很簡單:
curl -XGET 'http://localhost:9200/people/_search?pretty&search_type=count' -d '{
"query" : {
"bool" : {
"must" : [
{"term" : {"last_name" : "smith"}}
]
}
},
"aggs" : {
"location" : {
"nested" : {
"path" : "location"
},
"aggs" : {
"state" : {
"terms" : {"field" : "location.state", "size" : 10}
}
}
}
}
}'
響應:
{
"took" : 104,
"timed_out" : false,
"_shards" : {
"total" : 5,
"successful" : 5,
"failed" : 0
},
"hits" : {
"total" : 1248513,
"max_score" : 0.0,
"hits" : [ ]
},
"aggregations" : {
"location" : {
"doc_count" : 2107012,
"state" : {
"buckets" : [ {
"key" : 6,
"key_as_string" : "6",
"doc_count" : 214754
}, {
"key" : 12,
"key_as_string" : "12",
"doc_count" : 168887
}, {
"key" : 48,
"key_as_string" : "48",
"doc_count" : 101333
} ]
}
}
}
}
的doc_count比命中總大得多。所以必須有重複。
謝謝!
發佈您的索引和您正在使用的查詢的映射,否則我無法幫助您。 –
@AndreiStefan我更新了映射和查詢。謝謝! – milodky