2013-06-24 9 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 
} 

誰もがここでいただきました!間違った任意のアイデアを得ましたか。

おかげdocumentationから

+1

もっと複雑なES(2.3)のバージョンでは、これにCompletion Suggesterを使用することができます。 – myusuf

+0

私は同じ問題があります。 "query_string"を試してもES 5.1では動作しませんが、2.3で動作しました。 !!!! – Telebh

答えて

24

"[ワイルドカードクエリ]は、ワイルドカード表現(分析されていない)に一致するフィールドを持つドキュメントに一致します"。

検索用語をを解析していないので、あなたは、本質的に検索クエリを生成する前に、分析を自分で実行する必要があります。この場合は、検索用語を小文字にする必要があります。代わりに、query_stringを使用することができます:

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

はいはいはい!!!どうもありがとうございます。 – Jonesie

関連する問題