五、es6.x版本mapping设置介绍

Mapping主要类似数据库中表字段定义,主要有如下作用:

定义Index下字段名(Field Name)
定义字段的类型,比如数值型,字符串型、布尔型等
定义倒排索引的相关配置,比如是否索引、记录postion等

需要注意的是,在索引中定义太多字段可能会导致索引膨胀,出现内存不足和难以恢复的情况,下面有几个设置:

index.mapping.total_fields.limit:一个索引中能定义的字段的最大数量,默认是 1000
index.mapping.depth.limit:字段的最大深度,以内部对象的数量来计算,默认是20
index.mapping.nested_fields.limit:索引中嵌套字段的最大数量,默认是50

核心数据类型

字符串 - text

用于全文索引,该类型的字段将通过分词器进行分词,最终用于构建索引

字符串 - keyword

不分词,只能搜索该字段的完整的值,只用于 filtering

数值型

long:有符号64-bit integer:-2^63 ~ 2^63 - 1
integer:有符号32-bit integer,-2^31 ~ 2^31 - 1
short:有符号16-bit integer,-32768 ~ 32767
byte: 有符号8-bit integer,-128 ~ 127
double:64-bit IEEE 754 浮点数
float:32-bit IEEE 754 浮点数
half_float:16-bit IEEE 754 浮点数
scaled_float

布尔 - boolean

值:false, "false", true, "true"

日期 - date

由于Json没有date类型,所以es通过识别字符串是否符合format定义的格式来判断是否为date类型
format默认为:strict_date_optional_time||epoch_millis format
实测,仅支持"yyyy-MM-dd"、"yyyyMMdd"、"yyyyMMddHHmmss"、"yyyy-MM-ddTHH:mm:ss"、"yyyy-MM-ddTHH:mm:ss.SSS"、"yyyy-MM-ddTHH:mm:ss.SSSZ"格式,不支持常用的"yyyy-MM-dd HH:mm:ss"等格式。注意,"T"和"Z"是固定的字符,在获取"yyyy-MM-ddTHH:mm:ss"、"yyyy-MM-ddTHH:mm:ss.SSS"、"yyyy-MM-ddTHH:mm:ss.SSSZ"格式字符串值时,不能直接以前面格式格式化date,而是需要多次格式化date并且拼接得到。

二进制 - binary

该类型的字段把值当做经过 base64 编码的字符串,默认不存储,且不可搜索

范围类型

范围类型表示值是一个范围,而不是一个具体的值
譬如 age 的类型是 integer_range,那么值可以是  {"gte" : 10, "lte" : 20};搜索 "term" : {"age": 15} 可以搜索该值;搜索 "range": {"age": {"gte":11, "lte": 15}} 也可以搜索到   range参数 relation 设置匹配模式
INTERSECTS :默认的匹配模式,只要搜索值与字段值有交集即可匹配到
WITHIN:字段值需要完全包含在搜索值之内,也就是字段值是搜索值的子集才能匹配
CONTAINS:与WITHIN相反,只搜索字段值包含搜索值的文档
integer_range
float_range
long_range
double_range
date_range:64-bit 无符号整数,时间戳(单位:毫秒)
ip_range:IPV4 或 IPV6 格式的字符串

复杂数据类型
数组类型 Array

字符串数组 [ "one", "two" ]
整数数组 [ 1, 2 ]
数组的数组  [ 1, [ 2, 3 ]],相当于 [ 1, 2, 3 ]
Object对象数组 [ { "name": "Mary", "age": 12 }, { "name": "John", "age": 10 }]
同一个数组只能存同类型的数据,不能混存,譬如 [ 10, "some string" ] 是错误的
数组中的 null 值将被 null_value 属性设置的值代替或者被忽略
空数组 [] 被当做 missing field 处理

对象类型 Object

对象类型可能有内部对象
被索引的形式为:manager.name.first

嵌套类型 Neste

nested 类型是一种对象类型的特殊版本,它允许索引对象数组,独立地索引每个对象

地理位置数据类型

geo_point
地理位置,其值可以有如下四中表现形式:
object对象:"location": {"lat": 41.12, "lon": -71.34}
字符串:"location": "41.12,-71.34"
geohash:"location": "drm3btev3e86"
数组:"location": [ -71.34, 41.12 ]
查询的时候通过 Geo Bounding Box Query  进行查询
geo_shape

geo详细请见:https://blog.csdn.net/u012332735/article/details/54971638

专用数据类型

记录IP地址 ip
实现自动补全 completion、suggest
记录分词数 token_count
记录字符串hash值 murmur3
Percolator

多字段特性 multi-fields

允许对同一个字段采用不同的配置,比如分词,常见例子如对人名实现拼音搜索,只需要在人名中新增一个子字段为 pinyin 即可  通过参数 fields 设置

Mapping参数说明

es6.0与之前版本区别:

  • 新增字段: eager_global_ordinals

  • 删除的字段: include_in_all

     "type" : "text", 是数据类型一般文本使用text(可分词进行模糊查询);keyword无法被分词(不需要执行分词器),用于精确查找
     "analyzer" : "ik_max_word", #指定分词器,一般使用最大分词:ik_max_word   
     "normalizer" : "normalizer_name", #字段标准化规则;如把所有字符转为小写;具体如下举例
      "boost" : 1.5, #字段权重;用于查询时评分,关键字段的权重就会高一些,默认都是1;另外查询时可临时指定权重
      "coerce" : true, #清理脏数据:1,字符串会被强制转换为整数 2,浮点数被强制转换为整数;默认为true
      "copy_to" : "field_name", #自定_all字段;指定某几个字段拼接成自定义;具体如下举例
      "doc_values" : true, #加快排序、聚合操作,但需要额外存储空间;默认true,对于确定不需要排序和聚合的字段可false
      "dynamic" : true, #新字段动态添加 true:无限制 false:数据可写入但该字段不保留 'strict':无法写入抛异常
      "enabled" : true, #是否会被索引,但都会存储;可以针对一整个_doc
      "fielddata" : false, #针对text字段加快排序和聚合(doc_values对text无效);此项官网建议不开启,非常消耗内存
      "eager_global_ordinals": true, #是否开启全局预加载,加快查询;此参数只支持text和keyword,keyword默认可用,而text需要设置fielddata属性   
      "format" : "yyyy-MM-dd HH:mm:ss||yyyy-MM-dd||epoch_millis" ,#格式化 此参数代表可接受的时间格式 3种都接受
      "ignore_above" : 100, #指定字段索引和存储的长度最大值,超过最大值的会被忽略
      "ignore_malformed" : false ,#插入文档时是否忽略类型 默认是false 类型不一致无法插入
      "index_options" : "docs" ,
      # 4个可选参数
      # docs(索引文档号),
      # freqs(文档号 + 词频),
      # positions(文档号 + 词频 + 位置,通常用来距离查询),
      # offsets(文档号 + 词频 + 位置 + 偏移量,通常被使用在高亮字段)
      # 分词字段默认是position,其他的默认是docs
      "index" : true, #该字段是否会被索引和可查询 默认true
      "fields": {"raw": {"type": "keyword"}} ,#可以对一个字段提供多种索引模式,使用text类型做全文检索,也可使用keyword类型做聚合和排序
      "norms" : true, #用于标准化文档,以便查询时计算文档的相关性。建议不开启
      "null_value" : "NULL", #可以让值为null的字段显式的可索引、可搜索
      "position_increment_gap" : 0 ,#词组查询时可以跨词查询 既可变为分词查询 默认100
      "properties" : {}, #嵌套属性,例如该字段是音乐,音乐还有歌词,类型,歌手等属性
      "search_analyzer" : "ik_max_word" ,#查询分词器;一般情况和analyzer对应  
      "similarity" : "BM25",#用于指定文档评分模型,参数有三个:
      # BM25 :ES和Lucene默认的评分模型
      # classic :TF/IDF评分
      # boolean:布尔模型评分
      "store" : true, #默认情况false,其实并不是真没有存储,_source字段里会保存一份原始文档。
      # 在某些情况下,store参数有意义,比如一个文档里面有title、date和超大的content字段,如果只想获取title和date
      "term_vector" : "no" #默认不存储向量信息,
      # 支持参数yes(term存储),
      # with_positions(term + 位置),
      # with_offsets(term + 偏移量),
      # with_positions_offsets(term + 位置 + 偏移量)
      # 对快速高亮fast vector highlighter能提升性能,但开启又会加大索引体积,不适合大数据量用
    

你可能感兴趣的:(elasticsearch学习)