cov*_*efe 10 go elasticsearch elasticsearch-plugin elasticsearch-query
我正在使用olivere的弹性Go库来运行弹性查询 - https://godoc.org/github.com/olivere/elastic#NestedQuery
我正在尝试查询的数据如下所示:
"_source": {
"field1": "randVal1",
"field2": "randVal2",
"nestedfield": {
"ind1": "val1"
}
}
Run Code Online (Sandbox Code Playgroud)
我正在尝试nestedfield使用NestedQueryElastic Go库中的调用运行查询,如下所示:
aquery := elastic.NewTermQuery("ind1", "val1")
query := elastic.NestedQuery("nestedfield", aquery)
Run Code Online (Sandbox Code Playgroud)
但我得到一个错误说明:
转换为NestedQuery的参数太多了
我试图检索所有的文件,其中ind1的nestedfield是val1.非常感谢构建此查询的任何帮助.
编辑:
我将其更改为NewNestedQuery,现在它没有给出错误.但是,它不会返回任何结果,即使该文档存在于索引中并且我能够查询非嵌套字段.
我试过这个:
aquery := elastic.NewTermQuery("ind1", "val1")
query := elastic.NewNestedQuery("nestedfield", aquery)
Run Code Online (Sandbox Code Playgroud)
还有这个:
query := elastic.NewNestedQuery("nestedfield", elastic.NewMatchQuery("nestedfield.ind1", "val1"))
Run Code Online (Sandbox Code Playgroud)
但他们都给出了0结果.知道我做错了什么吗?
编辑#2
映射是:
"field1": { "type": "string" },
"field2": { "type": "string" },
"nestedfield": {
"type": "nested"
}
Run Code Online (Sandbox Code Playgroud)
最终起作用的是:
query := elastic.NewMatchQuery("nestedfield.ind1", "val1")
Run Code Online (Sandbox Code Playgroud)
我能够在'nestedfield'中添加其他字段并执行以下查询:
query := elastic.NewBoolQuery().Filter(elastic.NewMatchQuery("nestedfield.ind1", "val1"), elastic.NewMatchQuery("nestedfield.ind2", "val2"))
Run Code Online (Sandbox Code Playgroud)
看起来应该是:
q := elastic.NewTermQuery("nestedfield.ind1", value)
nq := elastic.NewNestedQuery("nestedfield", q)
Run Code Online (Sandbox Code Playgroud)
根据下面的评论也进行了编辑以修复 NewTermQuery。如果仍然不起作用,请提供您用来解析源代码并获取错误的完整代码,因为您在此处没有提供足够的详细信息来猜测问题。