我想使用 Golang 实现以下 Elasticsearch 查询。
{
"query": {
"bool": {
"must": {
"range": { "sales_start_date": { "gte": "2018-07-01T00:00:00.000Z" } }
},
"filter": {
"terms": { "item_holder_id": [2, 7, 9] }
}
}
}
}
'
Run Code Online (Sandbox Code Playgroud)
我当前的代码如下(我使用的是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))
Run Code Online (Sandbox Code Playgroud)
ihids 是一个[]int. 当我执行此代码时,出现错误
elastic: Error 400 (Bad Request): [terms] unknown token [END_ARRAY] after [item_holder_id] [type=parsing_exception]
Run Code Online (Sandbox Code Playgroud)
经过一番研究,我发现我需要这样写
elastic.NewTermsQuery("item_holder_id", "1", "2")
Run Code Online (Sandbox Code Playgroud)
但是作为 Golang 的新手,我想我遗漏了一些基本概念。如何传递这样的值数组?
感谢您提供任何可以帮助我的信息!
为了完成@Ullaakut 的回答:
// 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...))
Run Code Online (Sandbox Code Playgroud)
我有同样的问题,我以这种方式解决了。
您可以通过在参数...后面添加来简单地修复它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...))
Run Code Online (Sandbox Code Playgroud)
有关其工作原理的解释,来自golang 规范:
如果 f 是最终参数类型为 ...T 的可变参数,则在函数内该参数相当于 []T 类型的参数。每次调用 f 时,传递给最终参数的参数是 []T 类型的新切片,其连续元素是实际参数,所有这些参数都必须可分配给类型 T。
| 归档时间: |
|
| 查看次数: |
2782 次 |
| 最近记录: |