2017-04-19 9 views
2

マッピング "キーワード"でいくつかのフィールドを保存しています。しかし、それらは大文字小文字の区別があります。この問題を解決するには弾性検索キーワードと小文字と集約

、このようなマッピング

{ 
    "properties": { 
    "field": { 
     "type": "string", 
     "analyzer": "keyword_lowercase" 
    } 
    } 
} 

{ 
    "index": { 
    "analysis": { 
     "analyzer": { 
     "keyword_lowercase": { 
      "tokenizer": "keyword", 
      "filter": [ 
      "lowercase" 
      ] 
     } 
     } 
    } 
    } 
} 

として、アナライザを使用することが可能である。しかし、その後用語の集計では動作しません。

原因:java.lang.IllegalArgumentException:フィールドデータは、デフォルトでは無効になっています。逆インデックスを反転してメモリにフィールドデータをロードするには、[a]にfielddata = trueを設定します。ただし、これは大きなメモリを使用する可能性があることに注意してください。

マッピングタイプ=キーワードで動作しますが、タイプ=キーワードではアナライザーが表示されません。

小文字のキーワードとしてインデックスを作成する方法はありますが、fielddata = trueを設定せずに集計を使用できるようにするにはどうすればよいですか?

答えて

3

ES 5.2以降を使用している場合は、keywordフィールドにnormalizersを利用できるようになりました。単純にこのようなあなたのインデックスの設定とマッピングを宣言すると、あなたは

PUT index 
{ 
    "settings": { 
    "analysis": { 
     "normalizer": { 
     "keyword_lowercase": { 
      "type": "custom", 
      "filter": ["lowercase"] 
     } 
     } 
    } 
    }, 
    "mappings": { 
    "type": { 
     "properties": { 
     "field": { 
      "type": "keyword", 
      "normalizer": "keyword_lowercase" 
     } 
     } 
    } 
    } 
} 
+0

感謝を行ってもいいです、それは実験 – J2B

+2

「実験」は、そうでない場合は、「私たちを責めないでと言って別の方法でだから、彼らはそれを維持願っていますバグのない "とは言いますが、心配する必要はありません。 – Val

+0

ありがとう!しかし、どのように機能の作業を強調表示できますか? – Daviddd