聚合后的Elasticsearch排序日期

时间:2018-08-14 11:18:57

标签: elasticsearch elasticsearch-2.0 elasticsearch-aggregation

我需要找到相关或相似的帖子,然后按日期对其进行排序。我怎样才能做到这一点? 这是一个查询:

     {
  "fields":[
    "id", "score"
  ],
  "size":0,
  "query":{
    "function_score":{
      "query":{
        "bool":{
          "should":[
            { "match":{ "main_headline.en":{"query":"some text"}}},
            {"match":{"body.en":"some text" }}
          ],
          "must_not":{ "term":{  "id":76484 }}
        }
      },
      "functions":[
        {
          "gauss":{
            "published_at":{ "scale":"140w","decay":0.3
            }
          }
        }]
    }
  },
  "aggregations":{
    "postslug":{
      "terms":{
        "field":"slug",
        "size":9,
        "order":{"max_score":"desc"}
      },
      "aggs":{
        "max_score":{
          "max":{ "script":"_score" }
        },
        "fields":{
          "top_hits":{
            "size":1,
            "_source":{
              "includes":["id", "published_at", "slug"]
            }
          }
        },
        "aggs":{
          "byDate":{
            "max":{"field":"published_at"}
          }
        }
      }
    }
  }
}

我尝试通过子聚合-byDate来实现,但是出现错误`在[ags]中找不到聚合器类型[byDate]。如何解决此错误或如何在汇总后对数据进行排序?

1 个答案:

答案 0 :(得分:0)

您收到的错误告诉我们Elasticsearch无法找到byDate聚合类型,我想您打算将其用作聚合的名称(有关更多详细信息,请参见this section of the documentation)。

在您提供的示例中,aggsfields处于同一级别,ES将其解释为另一个子聚合的名称。可能您想将aggs移到fields下。

由于您使用的是top_hits,因此可以使用内置的sort选项。

希望有帮助!