2013-06-24 32 views
14

我無法弄清楚,爲什麼我的搜索是區分大小寫的。我讀過的所有內容都說默認情況下ES是不敏感的。我有一個指定的標準分析儀,用於索引和搜索的映射,但它似乎像一些事情仍然區分大小寫的 - 即通配符:忽略大小寫不工作

"query": { 
"bool": { 
    "must": [ 
    { 
     "wildcard": { 
     "name": { 
      "value": "Rae*" 
     } 
     } 
    } 
    ] 
} 

這種失敗,但「RAE *」的作品被通緝。我需要使用通配符進行'starts-with'類型搜索(我假設)。

我使用從.net應用程序NEST和我指定的分析儀,當我這樣創建索引:

var settings = new IndexSettings(); 
    settings.NumberOfReplicas = _configuration.Replicas; 
    settings.NumberOfShards = _configuration.Shards; 
    settings.Add("index.refresh_interval", "10s"); 
    settings.Analysis.Analyzers.Add(new KeyValuePair<string, AnalyzerBase>("keyword", new KeywordAnalyzer())); 
    settings.Analysis.Analyzers.Add(new KeyValuePair<string, AnalyzerBase>("simple", new SimpleAnalyzer())); 

在這種情況下,它使用簡單的分析,但標準一個具有相同的效果。

的映射是這樣的:

name: { 
    type: string 
    analyzer: simple 
    store: yes 
} 

任何人有任何想法什麼是錯在這裏嗎?

由於

+1

隨着更多ES版本(2.3)的版本的推出,您可以使用完成建議器。 – myusuf

+0

我有同樣的問題。即使嘗試使用「query_string」,它在ES 5.1中也不起作用,但它在2.3中起作用。 !!!! – Telebh

回答

24

documentation

「[通配符查詢]匹配具有匹配通配符表達式(沒有分析)域的文檔」。

因爲搜索詞不分析,你基本上是需要生成搜索查詢之前自己運行分析。在這種情況下,這意味着您的搜索字詞必須是小寫字母。或者,您可以使用query_string

{ 
    "query": { 
    "bool": { 
     "must": [ 
     { 
      "query_string": { 
      "query": "name:Rae*" 
      } 
     } 
     ] 
    } 
    } 
} 
+0

是是是的!非常感謝。 – Jonesie