当前位置: 首页 > elasticsearch, 搜索 > 正文

elasticsearch multi field type

关键字:
1 星2 星3 星4 星5 星 (3 次投票, 评分: 3.00, 总分: 5)
Loading ... Loading ...
baidu_share

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技术精华网

elasticsearch multi field type:等您坐沙发呢!

发表评论