Elasticsearch查询具有唯一值的文档

时间:2018-04-11 16:02:06

标签: java elasticsearch

是否可以获取按日期排序的文档列表,并过滤所有较早的文档?具有相同字段值的文档?

假设我有以下文档:

  1. {date = ts1,value =" example1"}
  2. {date = ts2,value =" example2"}
  3. {date = ts3,value =" example3"}
  4. {date = ts4,value =" example1"}
  5. {date = ts5,value =" example3"}
  6. 我希望得到以下结果(ts4> ts1,ts3> ts5):

    1. {date = ts2,value =" example2"}
    2. {date = ts4,value =" example1"}
    3. {date = ts5,value =" example3"}
    4. 我目前使用Java客户端(2.4.6)来实现我的需求。

      以下几行表达了一个聚合,让我从源头获得前20个点击。

      TopHitsBuilder lastFromSourceAggregation = AggregationBuilders
                  .topHits("last_from_source")
                  .addSort(SortBuilders.fieldSort("date").order(SortOrder.DESC))
                  .setFetchSource(true)
                  .setSize(20);
      

      不幸的是,它还包含字段值的重复值。该值应该是唯一的。我不知道如何制作一个能满足我需要的过滤器查询。

      我要求这个,因为我需要实际文档中的特定字段。因此,我不能只获得一个聚合,它给出了一组值。

      Edit1:生成JSON 这是java客户端生成的内容(省略了详细的过滤器部分)。 ``

      {
        "by_attribute": {
          <...omitted...>,
          "aggregations": {
            "by_source": {
              "terms": {
                "field": "metadata.source"
              },
              "aggregations": {
                "last_from_source": {
                  "top_hits": {
                    "size": 20,
                    "_source": {
                      "includes": [],
                      "excludes": []
                    },
                    "sort": [
                      {
                        "metadata.date": {
                          "order": "desc"
                        }
                      }
                    ]}}}}}}}
      

      ``

0 个答案:

没有答案