2016-11-16 205 views
0

我有這樣簡單Elasticsearch嵌套搜索查詢

{ 
    "_source": { 
    "id": 792477813014224900, 
    "metadata": { 
     "iso_language_code": "en", 
     "result_type": "recent" 
    }, 
    "retweeted": false, 
    "retweet_count": 330, 
    "user": { 
     "id": 149250899, 
     "listed_count": 0, 
     "protected": false, 
     "followers_count": 347, 
     "entities": { 
     "description": { 
      "urls": [] 
     } 
     }, 
     "screen_name": "Zwido_" 
} 

在ES(Tweepy JSON)文件和我想搜索和USER_NAME領域基於查詢一個完整的文檔。 我tryied這個代碼

{ 
      "nested": { 
       "path": "_source", 
       "score_mode": "avg", 
       "query": { 
        "bool": { 
         "must": [ 
          { 
           "text": {"_source.user.user_name": user} 
          } 
         ] 
        } 
       } 
      } 
} 

但它不工作,我收到錯誤

TransportError(400, 'search_phase_execution_exception', 'failed to parse search source. unknown search element [nested] 

我做錯了嗎? 感謝您的幫助。

回答

0

您不需要指定_source字段+您在頂層缺少query,則可以這樣做。

{ 
    "query": { 
     "nested": { 
      "path": "user", 
      "score_mode": "avg", 
      "query": { 
       "bool": { 
        "must": [ 
         { 
          "match": {"user.screen_name": user} 
         } 
        ] 
       } 
      } 
     } 
    } 
} 

UPDATE

如果您usernested型沒有,那麼你可以簡單地做這樣的:

{ 
    "query": { 
    "bool": { 
     "must": [ 
     { 
      "match": { 
      "user.screen_name": user 
      } 
     } 
     ] 
    } 
    } 
} 
+0

我接受了你的回答,它正在工作。我添加了「大小」:1,只過濾一個查詢。謝謝 – bezoadam

+0

很高興幫助! – Val

0

爲elasticsearch文檔中提到here你應該改變您的數據映射告訴elasticsearch它是嵌套對象。一旦完成,那麼你可以查詢對象。

+0

我相信@Val答案像魅力一樣工作,但我收到'user'不是嵌套類型的錯誤。所以我GOOGLE和嘗試更新_mappings,但我注意到,我不能改變映射,而不會丟失索引的數據。我現在搞砸了,有什麼建議嗎? – bezoadam

+0

據我已閱讀,您將重新索引數據以更改映射,但停機時間是一個問題,您可以在這裏參考有關別名索引以防止停機的問題。 –

+0

@bezoadam我已經更新了我的答案。 – Val