計數我插入這個數據到彈性搜索:彈性搜索:聚集,通過場
[
{ "name": "Cassandra Irwin", "location": "Monzon de Campos" .. },
{ "name": "Gayle Mooney", "location": "Villarroya del Campo" .. },
{ "name": "Angelita Charles", "location": "Revenga de Campos" .. },
{ "name": "Sheppard Sweet", "location": "Santiago del Campo" .. },
..
..
旁註:重現: 1)下載:http://wmo.co/20160928_es_query/bulk.json 2)執行:捲曲-s -XPOST' http://localhost:9200/testing/external/_bulk?pretty'--data-binary @ bulk.json
問題:獲得每個「位置」有多少記錄的計數。
解決方案1:桶聚合..不給所期望的結果
curl -s -XPOST 'localhost:9200/testing/_search?pretty' -d '
{
"aggs": { "location_count": { "terms": { "field":"location", "size":100 }}}
}' | jq '.aggregations'
結果:
{"location_count":{"doc_count_error_upper_bound":0,"sum_other_doc_count":0,
"buckets":[
{"key":"campo", "doc_count":47},
{"key":"del", "doc_count":47},
{"key":"campos", "doc_count":29},
{"key":"de", "doc_count":29},
{"key":"villarroya","doc_count":15},
{"key":"torre", "doc_count":12},
{"key":"monzon", "doc_count":11},
{"key":"santiago", "doc_count":11},
{"key":"pina", "doc_count":9},
{"key":"revenga", "doc_count":9},
{"key":"uleila", "doc_count":9}
]}}
問題:它將該 '位置' 字段成單詞,並返回每個單詞的文檔數。
解決方案2:期望的結果,但性能方面的擔憂。
我可以使用此查詢,拿出所有的位置,並在做JQ聚集(在每一個方便的JSON CLI工具), 但是當應用到大量數據,這可以變成一個性能噩夢做到這一點:
curl -s -XPOST 'localhost:9200/testing/_search?pretty' -d '
{
"query": { "wildcard": { "location": "*" } }, "size":1000,
"_source": ["location"]
}' | jq '[.hits.hits[] |
{location:._source.location,"count":1}] |
group_by(.location) |
map({ key: .[0].location, value: map(.count)|add })'
結果:
[
{ "key": "Monzon de Campos", "value": 11 },
{ "key": "Pina de Campos", "value": 9 },
{ "key": "Revenga de Campos", "value": 9 },
{ "key": "Santiago del Campo", "value": 11 },
{ "key": "Torre del Campo", "value": 12 },
{ "key": "Uleila del Campo", "value": 9 },
{ "key": "Villarroya del Campo", "value": 15 }
]
這是我想確切的結果。
問題:如何通過彈性搜索查詢獲得相同的結果? (即與彈性搜索處理的聚集,而不是由JQ)
現貨! (我嘗試過這個)。 非常感謝您的快速和正確的答案! – WillemM
真棒,很高興它幫助! – Val