我有一个Elasticsearch数据库,我上传这样的条目:{"s_food": "bread", "s_store": "Safeway", "s_date" : "2020-06-30", "l_run" : 28900, "l_covered": 1}
当我将其上传到elasticsearch时,它会添加一个_id
,_type
,@timestamp
和_index
字段。因此,条目看起来像这样:{"s_food": "bread", "s_store": "Safeway", "s_date" : "2020-06-30", "l_run" : 28900, "l_covered": 1, "_type": "_doc", "_index": "my_index", "_id": pe39u5hs874kee}
我使用Elasticsearch数据库的方式导致相同的原始条目被多次上传。在此示例中,我只关心s_food
,s_date
和l_run
字段是唯一的组合。由于条目太多,因此我想使用elasticsearch滚动工具浏览所有匹配项。到目前为止,在Elasticsearch中,我仅看到人们使用聚合来获取每个术语的存储区,然后在每个分区上进行迭代。我想使用类似聚合的方式为我关心的三个字段(食物,日期,运行)的每个唯一组合获取一个完整的条目(仅为1)。现在,我将聚集与滚动一起使用,如下所示:
GET /my-index/_search?scroll=25m
{
size: 10000,
aggs: {
foods: {
terms: {
field: s_food
},
aggs: {
dates: {
terms: {
field: s_date
},
aggs: {
runs: {
terms: {
field: l_run
}
}
}
}
}
}
}
不幸的是,这只是给了我不需要的常规存储结构。还有什么我应该尝试的吗?
最佳答案
您所需要做的就是将热门匹配与size: 1
结合使用。阅读更多关于top-hits聚合here的信息。
查询如下所示:
{
"size": 10000,
"aggs": {
"foods": {
"terms": {
"field": "s_food"
},
"aggs": {
"dates": {
"terms": {
"field": "s_date"
},
"aggs": {
"runs": {
"terms": {
"field": "l_run"
},
"aggs": {
"topOne": {
"top_hits": {
"size": 1
}
}
}
}
}
}
}
}
}
}
}
关于python - 从elasticsearch获取字段的每个唯一组合的第一条记录,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62667202/