2017-09-26 205 views
8

我使用olivere的弹性去图书馆运行弹性查询 - https://godoc.org/github.com/olivere/elastic#NestedQueryElasticsearch转到嵌套查询

的数据我想上看起来这样的查询:

   "_source": { 
        "field1": "randVal1", 
        "field2": "randVal2", 
        "nestedfield": { 
         "ind1": "val1" 
        } 
       } 

我想使用NestedQuery呼叫从弹性去图书馆,像这样运行在nestedfield查询:

aquery := elastic.NewTermQuery("ind1", "val1") 
query := elastic.NestedQuery("nestedfield", aquery) 

但我得到一个错误,指出:

太多的参数转换为NestedQuery

我试图检索所有的文件,其中的nestedfieldind1val1。希望在构建这个查询时有任何帮助。

编辑:

我把它改成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")) 
+0

分享您的地图。我怀疑“嵌套字段”实际上不是嵌套文档。 – Peter

+0

我已经在下面调整了答案,但是您应该尝试给出用于搜索的完整代码的更多详细信息。 –

+0

共享映射和最终工作的结果 – covfefe

回答

2

看起来应该是:

q := elastic.NewTermQuery("nestedfield.ind1", value) 
nq := elastic.NewNestedQuery("nestedfield", q) 
  • NestedQuery是一个类型,而不是一个函数。
  • NewTermQuery需要从JSON,而不是一个常量字符串
  • 你需要分析你的源JSON从IND1

编辑获得的价值修复NewTermQuery也按照意见采取 值下面。如果仍然不起作用,请提供您用于解析源代码的完整代码并获取错误,因为您在这里没有提供足够的细节来猜测问题。

+0

我试过这个,错误消失了,但它没有返回任何结果。我编辑的问题添加更多的细节 – covfefe

+1

'“ind1”'应该是''nestedfield.ind1“' – Val

+0

我相信Val意味着'aquery:= elastic.NewTermQuery(”nestedfield.ind1“,val1)' – Pandawan