我正在使用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
}
答案 0 :(得分:4)
我认为你正在寻找Range Query。
你会用这样的东西......
query := elastic.NewBoolQuery().
Filter(elastic.NewRangeQuery("timestamp").
From(start).
To(end))
其中start
和end
的值为time.Time,而"timestamp"
是您的时间字段的名称。
我应该注意,将它包装在Bool Query的过滤器中只是一种使用它的方法。它可以在任何可以传递查询的地方使用。