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

时间:2017-08-30 23:43:28

标签: elasticsearch go elasticsearch-5

我正在使用olivere的v.5弹性搜索库 - https://godoc.org/github.com/olivere/elastic

尝试执行类似于使用v.2库的帖子 - How to search in elasticsearch with Go filtering results by time frames

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

这是我迄今为止尝试构建聚合的方法。之后,我不确定将什么传递给DateRange函数。我有一个名为' tmpindex'的索引。并输入名为“用户'并且每个文档都有一个'时间戳'属性是一个整数。

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
    }

1 个答案:

答案 0 :(得分:4)

我认为你正在寻找Range Query

你会用这样的东西......

query := elastic.NewBoolQuery().
    Filter(elastic.NewRangeQuery("timestamp").
        From(start).
        To(end))

其中startend的值为time.Time,而"timestamp"是您的时间字段的名称。

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