为了账号安全,请及时绑定邮箱和手机立即绑定

如何在 Golang 中将数组传递给 Elasticsearch 的 NewTermsQuery?

如何在 Golang 中将数组传递给 Elasticsearch 的 NewTermsQuery?

Go
子衿沉夜 2023-04-17 15:25:03
我想使用 Golang 实现以下 Elasticsearch 查询。{  "query": {    "bool": {      "must": {        "range": { "sales_start_date": { "gte": "2018-07-01T00:00:00.000Z" } }      },      "filter": {        "terms": { "item_holder_id": [2, 7, 9] }      }    }  }}'我当前的代码如下(我正在使用http://github.com/olivere/elastic库)。query := elastic.NewBoolQuery()query = query.Must(elastic.NewRangeQuery("sales_start_date").Gte(date).TimeZone("+09:00"))query = query.Filter(elastic.NewTermsQuery("item_holder_id", ihids))ihids 是一个[]int. 当我执行此代码时出现错误elastic: Error 400 (Bad Request): [terms] unknown token [END_ARRAY] after [item_holder_id] [type=parsing_exception]经过一些研究,我发现我需要这样写elastic.NewTermsQuery("item_holder_id", "1", "2")但作为 Golang 的新手,我想我缺少一些基本概念。我怎样才能传递这样的值数组?感谢您提供任何可以帮助我的信息!
查看完整描述

3 回答

?
拉莫斯之舞

TA贡献1820条经验 获得超10个赞

// Convert type []int to type []interface{}


status := make([]interface{}, len(ihids))

for index, value := range ihids {

    status[index] = value

}


// Ullaakut aswer


query := elastic.NewBoolQuery()

query = query.Must(elastic.NewRangeQuery("sales_start_date").Gte(date).TimeZone("+09:00"))

query = query.Filter(elastic.NewTermsQuery("item_holder_id", status...))

我有同样的问题,我用这种方式解决了。


查看完整回答
反对 回复 2023-04-17
?
慕无忌1623718

TA贡献1744条经验 获得超4个赞

  values := make([]interface{}, len(status))

    for i, v := range status {

        values[i] = v

    }

    query = query.Filter(elastic.NewTermsQuery("item_holder_id", values...))


查看完整回答
反对 回复 2023-04-17
?
温温酱

TA贡献1752条经验 获得超4个赞

...您可以通过在您的论点之后添加来简单地修复它ihids

query := elastic.NewBoolQuery()
query = query.Must(elastic.NewRangeQuery("sales_start_date").Gte(date).TimeZone("+09:00"))
query = query.Filter(elastic.NewTermsQuery("item_holder_id", ihids...))

有关其工作原理的解释,这是来自golang 规范:

如果 f 是具有最终参数类型 ...T 的可变参数,则在函数内该参数等同于 []T 类型的参数。在每次调用 f 时,传递给最终参数的参数是类型为 []T 的新切片,其连续元素是实际参数,它们都必须可分配给类型 T。


查看完整回答
反对 回复 2023-04-17
  • 3 回答
  • 0 关注
  • 222 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信