我是弹性搜索的新手。
我有类型和文档ex:文章,每篇文章都有版本和类别ID的时间戳。
存在具有唯一版本和相同类别ID的重复记录。
我的问题是如何获取给定类别ID的最新文章列表
例如:文章名称:java,类别ID:1,版本:123345
例如:文章名称:java,类别ID:1,版本:123346
例如:文章名称:java,类别ID:1,版本:123347
例如:文章名称:mysql,类别ID:1,版本:123345
例如:文章名称:mysql,类别ID:1,版本:123346
例如:文章名称:mysql,类别ID:1,版本:123347
答案 0 :(得分:0)
假设“version”字段是时间戳,请尝试此查询
{
"query": {
"bool": {
"filter": [
{ "term": { "category_id": 1 } }
]
}
},
"sort" : [
{ "version" : {"order" : "desc" } }
]
}
答案 1 :(得分:0)
直接搜索查询的替代方法是嵌套聚合。 Jay建议的直接搜索很棒,但它将返回所有6个文件而不是2个...只是最新版本。如果您的目标只是看到最新的,您可以尝试以下方法。
我只是将terms和top_hits聚合结合起来。此聚合组合将仅为category_id 1提供每个特定名称(java vs mysql)的最新名称。
{
"query": {
"bool": {
"filter": [{ "term": {"category_id": 1 }}]
}
},
"aggs": {
"top-versions": {
"terms": { "field": "name"},
"aggs": {
"top_match": {
"top_hits": {
"sort": [{ "version": {"order": "desc"}}],
"_source": { "include": ["name","_id"]},
"size": 1
}
}
}
}
},
"size": 0
}