Elasticsearch一个匹配查询的一条记录

时间:2016-09-27 10:17:05

标签: elasticsearch

我有一个弹性搜索索引,其中有很多记录。有一个字段用户名,我希望通过传递逗号分隔值得到每个用户名的最新1个帖子,例如::

  

约翰,沙希德,话筒,朱莉

我想要每个用户名的最新1个帖子。我怎样才能做到这一点?我可以通过一次传递一个用户名来实现它,但它会打到这么多的http请求。我想在一个请求中做到这一点。

2 个答案:

答案 0 :(得分:0)

此查询可以为您提供按post_date按降序排序的这4个ID的所有帖子。您可以处理该数据以获得结果。

  {
       "sort" : [
        { "post_date" : {"order" : "desc"}}
       ],
      "query" : {
        "filtered" : {
          "filter" : {
            "terms" : {
              "username" : ["john","shahid","mike","jolie]
            }
          }
        }
      }
    }

答案 1 :(得分:0)

您可以使用已过滤的terms聚合与top_hits聚合,以实现您的需求:

{
  "size": 0,
  "query": {
    "bool": {
      "filter": {
        "terms": {
          "username": [ "john", "shahid", "mike", "jolie" ]
        }
      }
    }
  },
  "aggs": {
    "usernames": {
      "filter": {
        "terms": {
          "username": [ "john", "shahid", "mike", "jolie" ]
        }
      },
      "aggs": {
        "by_username": {
          "terms": {
            "field": "username"
          },
          "aggs": {
            "top1": {
              "top_hits": {
                "size": 1,
                "sort" : {"created_date" : "desc"}
              }
            }
          }
        }
      }
    }
  }
}