【发布时间】:2018-03-08 02:34:06
【问题描述】:
我正在使用 Olivere 的弹性 Go 库来运行弹性查询 - https://godoc.org/github.com/olivere/elastic#NestedQuery
我尝试查询的数据如下所示:
"_source": {
"field1": "randVal1",
"field2": "randVal2",
"nestedfield": {
"ind1": "val1"
}
}
我正在尝试使用 Elastic Go 库中的 NestedQuery 调用对 nestedfield 运行查询,如下所示:
aquery := elastic.NewTermQuery("ind1", "val1")
query := elastic.NestedQuery("nestedfield", aquery)
但我收到一条错误消息:
转换为 NestedQuery 的参数过多
我正在尝试检索nestedfield 的ind1 为val1 的所有文档。非常感谢您在构建此查询时提供的任何帮助。
编辑:
我将其更改为 NewNestedQuery,现在它没有给出该错误。但是,它没有返回任何结果,即使该文档存在于索引中并且我能够查询非嵌套字段。
我试过了:
aquery := elastic.NewTermQuery("ind1", "val1")
query := elastic.NewNestedQuery("nestedfield", aquery)
还有这个:
query := elastic.NewNestedQuery("nestedfield", elastic.NewMatchQuery("nestedfield.ind1", "val1"))
但他们都给出了 0 个结果。知道我做错了什么吗?
编辑#2
映射为:
"field1": { "type": "string" },
"field2": { "type": "string" },
"nestedfield": {
"type": "nested"
}
最终奏效的是:
query := elastic.NewMatchQuery("nestedfield.ind1", "val1")
我能够向“nestedfield”添加其他字段并进行如下查询:
query := elastic.NewBoolQuery().Filter(elastic.NewMatchQuery("nestedfield.ind1", "val1"), elastic.NewMatchQuery("nestedfield.ind2", "val2"))
【问题讨论】:
-
分享您的映射。我怀疑“nestedfield”实际上不是嵌套文档。
-
我在下面调整了答案,但您应该尝试提供更多用于搜索的完整代码的详细信息。
-
共享映射以及最终的工作原理
标签: elasticsearch go elasticsearch-plugin elasticsearch-query