Elasticsearch Go嵌套查询

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的参数太多了

我试图检索所有的文件,其中ind1nestedfieldval1.非常感谢构建此查询的任何帮助.

编辑:

我将其更改为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)

Ken*_*ant 4

看起来应该是:

q := elastic.NewTermQuery("nestedfield.ind1", value)
nq := elastic.NewNestedQuery("nestedfield", q)
Run Code Online (Sandbox Code Playgroud)
  • NestedQuery 是一种类型,而不是函数。
  • NewTermQuery 需要从 json 中获取值,而不是 const 字符串
  • 您需要解析源 json 以从 ind1 获取值

根据下面的评论也进行了编辑以修复 NewTermQuery。如果仍然不起作用,请提供您用来解析源代码并获取错误的完整代码,因为您在此处没有提供足够的详细信息来猜测问题。