索引

链接

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" }}
}}

  1. - index:控制当前字段是否被索引。默认true,如果设置为false,则字段不可被索引,节省磁盘开销
  2. - index_options:控制倒排索引记录内容,Text类型默认记录到positions,其他默认为docs,记录内容越多,占用存储空间越大
  3. - docs:记录doc id
  4. - freqs:记录doc idterm frequencies
  5. - positions:记录doc id term frequenciesterm position
  6. - offsets:记录doc id term frequenciesterm positioncharacter offsets
  7. - null_value:需要对Null值实现搜索,只有Keyword类型支持设定null_value
  8. - copy_to:将字段的数值拷贝到目标字段,实现类似_all的作用,目标字段不出现在_source中,可用于查询
  • 多字段类型

    • fields

      1. "goodsName":{
      2. "type": "text",
      3. "analyzer": "ik_max_word",
      4. "search_analyzer":"ik_smart",
      5. "fields": {
      6. "suggest":{
      7. "type":"completion",
      8. "analyzer": "ik_max_word"
      9. },
      10. "keyword":{
      11. "type" : "keyword"
      12. }
      13. }
      14. },
    • text类型的字段,默认会加一个keyword的子字段;使用不同的analyze:不同语言、pinyin字段搜索、还支持为搜索和索引指定不通的analyze

      Reindex

  • 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” } } ```