elasticsearch. 向导

Mapping

Mapping定义其实就是定义搜索引擎如何处理这些索引文档的规则的过程,这些定义包括字段是否可被搜索,采用何种分词切分方式等等. 在 ElasticSearch 里, 一个索引允许同时存在不同类型(mapping types,以后简称类型)的索引文档. 并且 ElasticSearch 能够对每个类型分别进行定义.

类型的mapping设置可以显式的定义在索引或者类型级别. 默认情况下,你甚至不需要显式的定义mapping类型, 因为当一个新的类型(或一个新的字段)创建并在索引里注册的时候,ES会自动的赋予合适的初始值(并且在性能上不会有什么影响). 只有当你需要重新定义这些mapping设置的时候(即覆盖ES默认设置),你才需要自定义mapping类型.

Mapping 类型

Mapping 类型是一种试图将同一索引中的各种文档进行分离并逻辑分组的方法. 你可以将它想象为数据库里面的表. 尽管类型之间是独立的, 但是它们并不是物理上的完全隔离,其实它们还是在同一个Lucene索引里面.

不同类型下如果存在相同的字段名称,强烈建议它们(同名字段)使用相同的数据类型和mapping参数(如分析器(分词方式)设置等). 可以显式的通过前缀来指明是你想要的是那个类型下的字段,如 ( my_type.my_field ), 但这种方式在有些地方就不一定好使,如对字段进行层面(或方面、分组)查询的时候 (like faceting on the field).

尽管在实践中,这个限制并没有什么问题. 从字段的名称也能体现出其类型(e.g. “first_name” 肯定是string类型). 注意, 这并不适用于跨索引的情况.

Mapping API

如果要创建一个 mapping, 你可以查看 Put Mapping API, 当你 创建索引 的时候,你还可以添加多重类型(multiple mappings).

 
Fork me on GitHub