ES学习--自定义Mapping的设置和常见参数介绍
通常索引的 Mapping 结构可以在创建索引时由 ElasticSearch 帮我们自动构建,字段类型由 ElasticSearch 自动推断,但这样做有一些问题,比如字段类型推断不准确,默认所有字段都会构建倒排索引等,自定义Mapping就可以解决上述这些问题,本篇经验就分享一下如何构建自定义Mapping以及相关的常用参数。
工具/原料
- ElasticSearch, Kibana
方法/步骤
- 为索引自定义Mapping语法结构为:PUT 索引名称
{
"mapping" : {
properites : {
"字段1名称" : {
"type" : "指定类型",
其他参数
}
其他字段定义...
}
}
}
最佳实践:我们可以完全参考手册编写 Mapping ,但不建议这样做,容易出错,调试也麻烦,可以通过创建一个测试索引并插入测试文档,然后查看ElasticSearch为这个索引自动创建的Mapping,基于这个Mapping进行修改来构建我们自己的 Mapping。- 自定义Mapping常用参数--index
自定义的Mapping和自动生成的Mapping一样,默认会为所有字段构建倒排索引,即所有字段均可以作为搜索条件进行搜索,但有时我们希望有些字段不能够被搜索,比如手机号,通过将索引中字段定义部分的 index 参数设置为 false (默认为true),即可达到这种效果。
将部分字段设置为不可搜索,一是可以阻止一些恶意的搜索,二是可以节省一些存储空间(倒排索引占据的空间)。 - 自定义Mapping常用参数--null_value
对于文档中值为 null 的字段(注意不设置该字段的值不代表其为null),无法直接指定null来搜索,可以通过在 mapping 中为该字段指定 null_value 属性的值(null的替代值),在搜索该字段为null的文档时,使用替代值即可。
注意,文本类型或者数值类型的字段无法使用 null_value 属性,keyword类型(不分词)和date类型字段可以使用该属性。 - 自定义Mapping常用参数--copy_to
通过在字段中使用这个属性,可以将多个字段的值拷贝到另一个字段中(该字段最终也会被进行分词处理)。 - 索引字段的数组表示
在 ElasticSearch 中,对于字段数据类型,是不存在数组这个概念的,也就是说对一个给定一个类型的字段(比如text,integer等),其可以保存单个该类型的值,也可以保存该类型的一个值数组!