2017-09-26 161 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