登录
首页 >  Golang >  Go问答

使用 Go语言中的 olivere/elastic库来执行Elasticsearch查询,以便筛选出value1等于value2的文档

来源:stackoverflow

时间:2024-03-11 23:45:18 497浏览 收藏

珍惜时间,勤奋学习!今天给大家带来《使用 Go语言中的 olivere/elastic库来执行Elasticsearch查询,以便筛选出value1等于value2的文档》,正文内容主要涉及到等等,如果你正在学习Golang,或者是对Golang有疑问,欢迎大家关注我!后面我会持续更新相关内容的,希望都能帮到正在学习的大家!

问题内容

我需要构建查询来获取 doc.value1 == doc.value2 的文档

{
    "query": {
        "bool" : {
            "filter" : [{
                "script" : {
                    "script" : {
                        "source": "doc['val1'].value == doc['val2'].value",
                        "lang": "painless"
                     }
                }
            }]
        }
    }
}

这是我需要用 olivere/elastic 构建的,如果我将其作为 post 请求发送,它就可以工作。

在 golang 中我有类似的东西

"github.com/olivere/elastic"
...

query := elastic.NewBoolQuery()
// then add something to this query or leave it empty it works fine
// but if I add 
query = query.Filter(elastic.NewBoolQuery().Must(elastic.NewScript("doc.['val1'].value == doc.['val2'].value")))
// I'm getting: Error 400 (Bad Request): [source] query malformed,
// no start_object after query name [type=parsing_exception]

// Then i run it like:
client, err := elastic.NewClient()
if err != nil {
    fmt.Println(err)
    return
}
resp, err := client.Search("myIndex").Type("myDoc").Query(query).TrackTotalHits(true).Size(limit).Do(context.Background())
    if err != nil {
        fmt.Println(err)
        return
    }

解决方案


query = query.Filter(elastic.NewScriptQuery(elastic.NewScript("doc['val1'].value == doc['val2'].value")))

今天关于《使用 Go语言中的 olivere/elastic库来执行Elasticsearch查询,以便筛选出value1等于value2的文档》的内容就介绍到这里了,是不是学起来一目了然!想要了解更多关于的内容请关注golang学习网公众号!

声明:本文转载于:stackoverflow 如有侵犯,请联系study_golang@163.com删除
相关阅读
更多>
最新阅读
更多>
课程推荐
更多>