elastic stack 那些事【3】

Mapping

mapping 类似数据库中的表结构定义,作用如下:

  1. 定义index下字段名
  2. 定义字段类型,例如数值型,字符串型等
  3. 定义倒排索引的配置,例如是否为索引,记录position等

自定义mapping

mapping字段类型一旦设计后,禁止直接修改,因为其生成的倒排索引生成后不允许修改,但是可以建立新的索引,做reindex。但是允许做新增字段,通过dynamic属性设置字段字段规则

  1. true 默认 允许新增字段
  2. false 不允许自动新增字段,但是文档可正常写入,但无法对字段进行查询等操作
  3. strict 文档不可写入,否则报错

copy_to

将该字段的值复制到目标字段,实现类似_all的作用
不会出现在_source中,只用来搜索

index

设置index为true时,记录这个字段为索引,false不记录

index_options 用于控制倒排索引的记录内容,四种配置

  1. docs 只记录docid
  2. freqs 记录 docid 和 term frequencies
  3. positions 记录 doc id 、term frequencies 、 term position
  4. offsets 记录 doc id、term frequencies、term position、character offsets
  5. text 类型默认配置为positions 其他默认docs
  6. 记录内容越多 占用空间越大

数据类型

核心数据类型

  1. 字符串
  2. 数值型
  3. 日期型
  4. 布尔
  5. 二进制
  6. 范围

复杂数据类型

  1. 数组
  2. 对象
  3. 嵌套类型
  4. 地理位置

专用类型

  1. ip
  2. 自动补全 completion
  3. 记录分词数 token_count
  4. 记录字符串hash
  5. percolator
  6. join

多字段特性

允许对同一个字段采用不同的配置,例如分词,常见例子如对人名实现拼音搜索,只需要再任命中新增子一个子字段pinyin即可

dynamic-mapping

没有指定字段类型时,字段会根据json的类型自动识别。

dynamic date

es可自动识别日期

  1. 默认为["strict_date_optional_time","yyyy/MM/dd HH:mm:ss Z||yyyy/MM/dd Z"]
  2. strict_date_option_time 是 ISO datatime 格式,完整格式类似如下
    YYYY-MM-DDThh:mm:ssTZD(eg 1997-07-16T19:20:30+01:00)
  3. dynamic_date_formats可以自定义日期类型
  4. date_detaction 可以关闭日期自动识别的机制

字符串是数字时,默认不会自动识别为整形,numeric_detection可以开启字符串中数字的自动识别

dynamic template

允许es自动识别的数据类型,字段名等动态设定字段类型,可以实现如下效果

  1. 所有字符串类型都设定为keyword类型 默认不分词
  2. 以message开头的字段都设定为text类型 分词
  3. 所有以long开头的字段都设定为long类型
  4. 所有自动匹配为double类型的都设定为float类型 节省空间

自定义mapping的操作步骤如下

  1. 写入一条文档到es临时索引中,获取es自动生成的mapping
  2. 修改步骤1得到的mapping,自定义配置
  3. 使用步骤2的mapping创建实际所需索引

索引模板

用于再新增索引时自动应用预先设定的配置,简化索引创建的操作步骤

  1. 可以设定索引的配置和mapping
  2. 可以有多个模板,根据order设置 order值大的覆盖小的

你可能感兴趣的:(java)