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

我想使用 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 的新手,我想我缺少一些基本概念。我怎样才能传递这样的值数组?


感谢您提供任何可以帮助我的信息!


子衿沉夜
浏览 223回答 3
3回答

拉莫斯之舞

// Convert type []int to type []interface{}status := make([]interface{}, len(ihids))for index, value := range ihids {    status[index] = value}// Ullaakut aswerquery := elastic.NewBoolQuery()query = query.Must(elastic.NewRangeQuery("sales_start_date").Gte(date).TimeZone("+09:00"))query = query.Filter(elastic.NewTermsQuery("item_holder_id", status...))我有同样的问题,我用这种方式解决了。

慕无忌1623718

  values := make([]interface{}, len(status))    for i, v := range status {        values[i] = v    }    query = query.Filter(elastic.NewTermsQuery("item_holder_id", values...))

温温酱

...您可以通过在您的论点之后添加来简单地修复它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。
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Go