弹性搜索最新数据

时间:2016-09-26 13:44:48

标签: java elasticsearch

我是弹性搜索的新手。

我有类型和文档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

2 个答案:

答案 0 :(得分:0)

假设“version”字段是时间戳,请尝试此查询

{
  "query": { 
    "bool": { 
      "filter": [ 
        { "term":  { "category_id": 1 } }
      ]
    }
  },
  "sort" : [
        { "version" : {"order" : "desc" } }
    ]
}

答案 1 :(得分:0)

直接搜索查询的替代方法是嵌套聚合。 Jay建议的直接搜索很棒,但它将返回所有6个文件而不是2个...只是最新版本。如果您的目标只是看到最新的,您可以尝试以下方法。

我只是将termstop_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
}