我有一组文件,每个文件看起来像
{
"_id": ... ,
"Author": ...,
"Content": ....,
"DateTime": ...
}
我想对集合发布一个查询,以便得到每个作者的最早文献作为回应。我正在考虑使用术语汇总,但是当我这样做时,我得到了一个存储桶列表,它们是唯一的Author值,并且没有告诉我有关哪个文档最旧的信息。此外,该方法要求随后调用ES,这是不希望的。
您可以提供的任何建议将不胜感激。谢谢。
最佳答案
您可以在 flex 搜索中使用collapse。
它将返回按DateTime排序的每个作者的前1条记录
{
"size": 10,
"collapse": {
"field": "Author.keyword"
},
"sort": [
{
"DateTime": {
"order": "desc"
}
}
]
}
结果
"hits" : [
{
"_index" : "index83",
"_type" : "_doc",
"_id" : "e1QwrnABAWOsYG7tvNrB",
"_score" : null,
"_source" : {
"Author" : "b",
"Content" : "ADSAD",
"DateTime" : "2019-03-11"
},
"fields" : {
"Author.keyword" : [
"b"
]
},
"sort" : [
1552262400000
]
},
{
"_index" : "index83",
"_type" : "_doc",
"_id" : "elQwrnABAWOsYG7to9oS",
"_score" : null,
"_source" : {
"Author" : "a",
"Content" : "ADSAD",
"DateTime" : "2019-03-10"
},
"fields" : {
"Author.keyword" : [
"a"
]
},
"sort" : [
1552176000000
]
}
]
}
编辑1:
{
"size": 10,
"collapse": {
"field": "Author.keyword"
},
"sort": [
{
"DateTime": {
"order": "desc"
}
}
],
"aggs":
{
"authors": {
"terms": {
"field": "Author.keyword", "size": 10 },
"aggs": {
"doc_count": { "value_count": { "field":
"Author.keyword"
}
}
}
}
}
}
关于elasticsearch - Elasticsearch重复数据删除,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/60555128/