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

我正在使用Olivere的v.5 elasticsearch库- https://godoc.org/github.com/olivere/elastic </ p>

尝试做类似的事情 使用v.2库的帖子-如何在按时间范围进行Go过滤结果的Elasticsearch中搜索 </ p>

但是在v.5中无法使用“ NewRangeFilter”和“ NewFilteredQuery”。
v.5中的“ DateRange” API( https://godoc.org/github .com / olivere / elastic#Aggregations.DateRange ),我可以从Aggregation中调用它,但是它需要一个字符串,所以我不知道应该传递什么。</ p> \ n

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

  timeline:= elasticClient.NewTermsAggregation()  .Field(“ timestamp”)。Size(10).OrderByCountDesc()

searchResult,err:= elasticClient.Search()。
Index(“ tmpindex”)。 //搜索索引“ tmpindex”
Aggregation(“ timeline”,timeline)。
From(0).Size(10)。 //取文件0-9
Pretty(true)。 //漂亮的打印请求和响应JSON
Do(context.Background())//如果错误err!= nil {
return err
}
</ code> </ pre>
</ n>执行 DIV>

展开原文

原文

I'm using olivere's v.5 elasticsearch library - https://godoc.org/github.com/olivere/elastic

Trying to do something similar to this post which uses the v.2 library - How to search in elasticsearch with Go filtering results by time frames

But 'NewRangeFilter' and 'NewFilteredQuery' are not available in v.5. There is a 'DateRange' API in v.5 (https://godoc.org/github.com/olivere/elastic#Aggregations.DateRange) that I can call from an Aggregation, but it takes in a string, so I don't know what I'm supposed to pass in.

This is what I've tried so far to build an aggregation. After that, I'm not sure what to pass into the DateRange function. I have an index called 'tmpindex' and type called 'user' and each document has a 'timestamp' property which is an integer.

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个回答



我认为您正在寻找范围查询。</ p>

您可以使用类似的方法... </ p>

 < 代码>查询:= elastic.NewBool​​Query()。
过滤器(elastic.NewRangeQuery(“时间戳记”)。
从(开始)开始。
到(结束))
</ code> </ pre>

其中开始</ code>和 end </ code>为 time.Time 值和“ timestamp” </ code>是您的时间字段的名称。</ p>

我应注意,将其包装在a的过滤器中 布尔查询只是使用它的一种方式。 可以在任何可以通过查询的地方使用。</ p>
</ div>

展开原文

原文

I think you're looking for Range Query.

You'd use it something like this...

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

Where start and end are time.Time values and "timestamp" is the name of your time field.

I should note that wrapping it in a filter of a Bool Query is just one way to use it. It can be used anywhere you can pass a Query.

Csdn user default icon
上传中...
上传图片
插入图片
抄袭、复制答案,以达到刷声望分或其他目的的行为,在CSDN问答是严格禁止的,一经发现立刻封号。是时候展现真正的技术了!
立即提问
相关内容推荐