如何按时间范围过滤Go中的Elasticsearch结果?

cov*_*efe 2 go elasticsearch elasticsearch-5

我使用olivere的第5节elasticsearch库- https://godoc.org/github.com/olivere/elastic

尝试做与使用v.2库的此帖子类似的操作- 如何在按时间范围进行Go过滤结果的Elasticsearch 中搜索

但是“ NewRangeFilter”和“ NewFilteredQuery”在v.5中不可用。v.5(https://godoc.org/github.com/olivere/elastic#Aggregations.DateRange)中有一个'DateRange'API ,我可以从Aggregation中调用它,但是它需要一个字符串,所以我不这样做不知道我该传递什么。

到目前为止,这是我尝试构建的汇总。在那之后,我不确定传递给DateRange函数的内容。我有一个名为“ tmpindex”的索引,类型为“ user”,每个文档都有一个“ timestamp”属性,该属性是整数。

timeline := elasticClient.NewTermsAggregation().Field("timestamp").Size(10).OrderByCountDesc()

    searchResult, err := elasticClient.Search().
        Index("tmpindex"). // search in index "tmpindex"
        Aggregation("timeline", timeline).
        From(0).Size(10).        // take documents 0-9
        Pretty(true).            // pretty print request and response JSON
        Do(context.Background()) // execute
    if err != nil {
        return err
    }
Run Code Online (Sandbox Code Playgroud)

Ver*_*ran 5

我认为您正在寻找Range Query

你会用这样的东西...

query := elastic.NewBoolQuery().
    Filter(elastic.NewRangeQuery("timestamp").
        From(start).
        To(end))
Run Code Online (Sandbox Code Playgroud)

在哪里startend了time.time价值观和"timestamp"是你的时间字段的名称。

我应该注意,将其包装在Bool Query的过滤器中只是使用它的一种方法。它可以在可以传递查询的任何地方使用。