索引
Mapping
脑图
概念
- Mapping类似数据库中的schema的定义,所用如下
- 定义索引中的字段的名称
- 定义字段的数据类型,例如字符串、数字、布尔。。。
- 字段,倒排索引的相关配置,(Analyzed or Not Analyzed,Analyze)
- Mapping会把JSON文档映射成Lucene所需要的扁平格式
- 一个Mapping属于一个索引的Type
- 每个文档都属于一个Type
- 一个Type有一个Mapping定义
- 7.0开始,不需要在Mapping定义中指定type信息
- 字段数据类型
- 简单类型
- Text / Keyword
- Date
- Integer / Floating
- Boolean
- IPv4 & IPv6
- 复杂类型—对象和嵌套对象
- 对象类型 / 嵌套类型
- 特殊类型
- geo_point & geo_shape / percolator
- 简单类型
- Dynamic Mapping
- 在写入文档时候,如果索引不存在,会自动创建索引
- 可以自动推算字段类型
- 能否更改Mapping的字段类型
- 新增加字段
- Dynamic设为true时,一旦有新增加字段的文档写入,Mapping也同时被更新
- Dynamic设为false,Mapping不会被更新,新增字段的数据无法被索引,但信息会出现在_source中
- Dynamic设置成Strict,文档写入失败
- 对已有字段,一旦已经有数据写入,就不在支持修改字段定义
- Lucene实现的倒排索引,一旦生成后,就不允许修改
- 如果希望改变字段类型,必须Reindex API,重建索引
PUT test_employee/_mapping{ "dynamic":false}
- 新增加字段
- mapping参数
PUT test_stu{
"mappings": {
"properties": {
"name":{ "type": "text", "null_value":"NULL","copy_to":"nickName" },
"desc": { "type": "text", "index": false },
"mobile":{ "type": "text", "index_options":"offsets","copy_to":"nickName" }}
}}
- index:控制当前字段是否被索引。默认true,如果设置为false,则字段不可被索引,节省磁盘开销
- index_options:控制倒排索引记录内容,Text类型默认记录到positions,其他默认为docs,记录内容越多,占用存储空间越大
- docs:记录doc id
- freqs:记录doc id、term frequencies
- positions:记录doc id 、term frequencies、term position
- offsets:记录doc id 、term frequencies、term position、character offsets
- null_value:需要对Null值实现搜索,只有Keyword类型支持设定null_value
- copy_to:将字段的数值拷贝到目标字段,实现类似_all的作用,目标字段不出现在_source中,可用于查询
多字段类型
reindex的核心功能就是做跨索引、跨集群的数据迁移。reindex的底层是scroll实现,借助scroll并行优化方式,提升效率
- reindex做的是从老的mapping数据copy到新的mapping中,而不会帮助我们创建新的索引(index) ```
POST _reindex { “max_docs”:500, “source”: { “index”: “new_index”, “query”: { “match”: { “gender”: “男” } } }, “dest”: { “index”: “new_index2” } } ```