はじめに:
最近、一部のデータがでelasticSearchを使用してチェックアウトしていないことがわかったので、少し研究と、その単語の原因を見つけ、今とかすとまとめます。
:ElasticSearch 5.0の後に、文字列型は、文字列フィールドは二つの新しいデータ型に分割され、文字列型を除く、重要な変更されている テキストのためのフルテキスト検索、およびキーワードのための検索キーワード。
マッピングされているElasticSearchのデフォルトの文字列をテキストとキーワードの種類は、次の処理が自動的に動的マッピング(ダイナミックマッピング)を作成します:
"relateId":{ "タイプ":" テキスト " 、 "フィールド":{ "キーワード":{ "タイプ":" キーワード " 、 "ignore_above":256 } } }
これは、フィールドの一部の原因は、自動的に対応するの「.keyword」フィールドを生成されますです。
保存されたクエリの例:
relateIdストレージ:20191101R672499460503 1つの値。
relateId.keywordストレージ:672 499 460 503 R&LT 20191101 3つの値。
3つの単語に分割されているようrelateIdこの正確なクエリでは、あなたは、データを見つけることができません。
正確なクエリを使用すると、データを見つけることができrelateId.keyword:
どちらの比較:
テキスト:デフォルトの言葉、そしてインデックス付け、ファジー、正確な問い合わせをサポートし、集約をサポートしていません。
キーワード:言葉を直接インデックスなし、ファジー、正確なクエリとサポート重合をサポート
高度な処理:
注意:非常にスマートであるテキストのデフォルトの単語を、が、いくつかのテキストフィールドのための無駄なスペースを使用して、役に立たないいくつかのフィールドインチ そして、あなたは関係なく、言葉、それの、マッピングがanalyziedされていない設定することができます。
" relateId " :{ " タイプ":" テキスト" 、 " インデックス":" not_analyzed " }
あなたが単語を指定したい場合は次のように使用します。
" relateId " :{ " タイプ":" テキスト" 、 " 分析":" ik_max_word " 、 " search_analyzer ":" ik_smart " 、 " フィールド" :{ " キーワード" :{ " タイプ":" キーワード" 、 " ignore_above ":256 } } }