クエリを実行しない多数のフィールドを含むドキュメントがあるため、それらのフィールドのインデックス作成をオフにしてリソースを節約したいと考えています。フィールドを無効_all
にする必要があると思いますが、インデックスを作成するフィールドを指定するにはどうすればよいですか?
6 に答える
デフォルトでは、すべてのフィールドは_all特殊フィールド内でも索引付けされます。これは、いわゆるキャッチオール機能をすぐに提供します。ただし、次のオプションを使用して、マッピングの各フィールドに対して、それを _all フィールドに追加するかどうかを指定できinclude_in_all
ます。
"person" : {
"properties" : {
"name" : {
"type" : "string", "store" : "yes", "include_in_all" : false
}
}
}
上記の例では、 name フィールドのデフォルトの動作を無効にしていますが、これは _all フィールドの一部ではありません。
それ以外の場合、特定のタイプに対して _all フィールドがまったく必要ない場合は、マッピングで次のように無効にすることができます。
"person" : {
"_all" : {"enabled" : false},
"properties" : {
"name" : {
"type" : "string", "store" : "yes"
}
}
}
無効にしても、フィールドは引き続き個別にインデックス化されますが、_all が提供する包括的な機能はありません。_all 特殊フィールドに頼るのではなく、特定のフィールドを照会する必要があります。それだけです。実際、フィールドを指定せずにクエリを実行すると、デフォルトのフィールドをオーバーライドしてクエリを実行しない限り、elasticsearch は内部で _all フィールドをクエリします。
以下は、エラスティック検索のインデックス設定を理解するための重要なドキュメント ページです http://www.elasticsearch.org/guide/en/elasticsearch/guide/current/mapping-intro.html
あなたの問題については、理想的には、フィールドのプロパティで「インデックス」フラグを no に設定する必要があります。
_all は 6.0 以降非推奨です。以下を使用
"mappings": {
"dynamic":"false",
"properties": {
"field_to_index":{"index": true, "type": "text"}
}
es docsによると
dynamic を false に設定しても、_source フィールドの内容はまったく変更されません。_source には、インデックスを作成した JSON ドキュメント全体が引き続き含まれます。ただし、不明なフィールドはマッピングに追加されず、検索できません。