2013-10-23 152 views
2

我在彈性搜索查詢中遇到了一個奇怪的問題。我對彈性搜索知之甚少。我的查詢是:Elasticsearch不返回結果

{ 
     "query": 
     { 
     "bool": 
     { 
      "must": 
      [ 
       { 
       "text": 
       { 
        "countryCode2":"DE" 
       } 
       } 
      ], 
      "must_not":[], 
      "should":[] 
     } 
    },"from":0,"size":1,"sort":[],"facets":{} 
    } 

問題,這是 「DE」。它給我的結果,但「BE」或「IN」它返回空結果。

+0

你確定你有對應「BE」和「IN」的數據嗎? – FUD

+0

是的。因爲當我得到所有國家的名單時,我得到了BE和IN記錄 –

+0

我認爲這可能是德國人對德國人和比利時人的陰謀。 – FUD

回答

4

您正在使用默認映射進行索引,默認映射默認會刪除英語停用詞。國家代碼爲「IN」,「BE」,還有更多是停用詞,它們甚至沒有被索引,因此在面向該領域時無法獲得匹配的文檔,也無法取回這些國家代碼。

的解決方案是提交了自己的映射,爲國家代碼字段後重新索引:

{ 
    "your_type_name" : { 
     "country" : { 
      "type" : "string", "index" : "not_analyzed" 
     } 
    } 
} 

如果你已經嘗試過這樣做,但什麼都沒有改變,映射沒有得到正確提交。我會建議仔細檢查一下它的json結構是否正確,並且使用get mapping API可以真正找回它。

由於這是一個常見問題,未來的默認設置可能會發生變化,使其侵入性更小,並避免應用任何與語言相關的文本分析。

+1

謝謝..!我不知道停用詞。謝謝你的解釋。 –

相關問題