multi_field类型允许映射为几个有相同值的core_types。这样就很方便,例如,当想要映射一个字符串类型,它分析的时候既可以不分析字符串,又可以分析字符串。实现了一对多的关系。例如,字符串”abc def”,不分析的时候为”abc def”,分析的时候就为”abc”,”def”.
{
“tweet” : {
“properties” : {
“name” : {
“type” : “multi_field”,
“fields” : {
“name” : {“type” : “string”, “index” : “analyzed”},
“untouched” : {“type” : “string”, “index” : “not_analyzed”}
}
}
}
}
}
上面的例子显示name 字段如何实现multi_field。它是一个简单的字符串类型,它被映射了2次。一次被analyzed 为name,一次被not_analyzed 为untouched.
accessing fields 访问字段
当multi_field映射,具有相同的名称属性的字段被视为它没有被映射为multi field。那是一个默认字段,它可以定期访问,例如使用名称或使用类型的导航tweet.name。
path属性可以控制非默认字段如何可以被访问。如果路径属性设置为full,这是默认设置,所有非默认的前缀字段是属性的名称,可以通过它们的完整路径使用导航符号访问:name.untouched,或使用导航类型的符号tweet.name.untouched。如果path的属性设置为just_name,实际上该字段的前缀没有被使用。just_name设置,其中包括多字段的索引内容允许用相同的名字。下面的例子中,first_name 和 last_name 字段的内容可以被any_name或 tweet.any_name访问。
{
“tweet” : {
“properties”: {
“first_name”: {
“type”: “multi_field”,
“path”: “just_name”,
“fields”: {
“first_name”: {“type”: “string”, “index”: “analyzed”},
“any_name”: {“type”: “string”,“index”: “analyzed”}
}
},
“last_name”: {
“type”: “multi_field”,
“path”: “just_name”,
“fields”: {
“last_name”: {“type”: “string”, “index”: “analyzed”},
“any_name”: {“type”: “string”,“index”: “analyzed”}
}
}
}
}
}
include in all
The include_in_all setting on the “default” field allows to control if the value of the field should be included in the _all field. Note, the value of the field is copied to _all, not the tokens. So, it only makes sense to copy the field value once. Because of this, the include_in_all setting on all non-default fields is automatically set to false and can’t be changed.
如果字段的值包含_all字段,include_in_all设置在默认字段时,允许控制。注意,字段的值被拷贝到_all,没有分词。所以,它才是有意义的拷贝字段值。因此,include_in_all 设置在所有non-default 字段是自动设置为false,而且不能改变。
merging
When updating mapping definition using the put_mapping API, a core type mapping can be “upgraded” to a multi_field mapping. This means that if the old mapping has a plain core type mapping, the updated mapping for the same property can be a multi_field type, with the default field being the one being replaced.
当使用put_mapping API更新映射时,一个core 类型映射可以被”更新”在一个multi_field 映射上。这意味着,如果老的映射有一个普通的核心类型(core type)映射,更新为multi_field类型时,core type作为multi_field默认字段 。
参考文章:http://www.elasticsearch.org/guide/en/elasticsearch/reference/current/mapping-multi-field-type.html
本文固定链接: http://www.chepoo.com/elasticsearch-multi-field-type.html | IT技术精华网