2017-04-10 14 views
0

イムに、と私は、このフィールドを持っている:ElasticSearchを使用して大文字小文字を区別しないクエリ

"name": { 
     "type": "string", 
     "index": "not_analyzed" 
}, 

私は例えば、名前を持つすべての従業員が「チャールズ」、取得するには、このクエリを実行します。

GET company_employee/employee/_search 
{ 
    "query": { 
     "bool": { 
     "must": [ 
      { 
       "match_phrase": { 
        "name": "Charles" 
       } 
      } 
     ] 
     } 
    } 
} 

この問題は、私が鈍感な検索をする必要があるということです。私はすべての "チャールズ"を検索する必要があります。たとえ私がChaRleSやcharles、またはCharlesなどのクエリに提供する値であっても、私は何をする必要がありますか?

答えて

0

基本的にはむしろ、すなわちこのように、分析するためにあなたのnameフィールドを持っている必要があるだろう:

"name": { 
    "type": "text", 
    "analyzer": "standard" 
} 

なマッピングでは、すべての値が小文字に変換されます。したがって、検索では大文字と小文字を区別しないでしょう。

+0

私は大文字小文字の区別がありません!しかし、そうではありません!私がチャールズに問い合わせると結果が得られます。私がチャールズに質問すると、私はしません! –

+0

上記のインデックスマッピングを適用してインデックスを再作成できますか? –

+0

申し訳ありませんが、私はあなたの答えを速読しました;) 私は再マップできません。他の解決策はありませんか?それを行うためにクエリに追加できるものは何もありませんか? –

0

インデックス再作成する場合は、オプションではありません、これはregexpアプローチは、大文字と小文字を区別を検索することはできませんが、あなたが「手動」そうでしたクエリ

を変更残します。文字は常に最初の文字である場合、あなたはこれをすることによって得ることができます

GET company_employee/employee/_search 
{ 
    "query": { 
     "regexp": { "name": "[Cc]harles" } 
    } 
} 

それ以外の場合は「true」を大文字と小文字を区別しないために:

GET company_employee/employee/_search 
{ 
    "query": { 
     "regexp": { "name": "[Cc][Hh][Aa][Rr][Ll][Ee][Ss]" } 
    } 
} 

これは効率的では決してありません、インデックスを変更しないという制約に合致します。

関連する問題