前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >【Elasticsearch】5. Mapping && Setting

【Elasticsearch】5. Mapping && Setting

原创
作者头像
历久尝新
修改2020-12-21 17:32:49
8650
修改2020-12-21 17:32:49
举报
文章被收录于专栏:学而时习之学而时习之

Mapping

  • mapping类似数据库中的schema的定义,作用如下
    • 定 义索引中的字段的名称
    • 定义字段的数据类型,例如字符串,数字,布尔
    • 字段,倒排索引的相关配置,(Anlyzed or Not Analyed,Analyzer)
  • 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

  • 在写入文档的时候,如果索引不存在,会自动创建索引
  • dynamic mapping 的机制,使得我们无需手动定义mappings,es可以自动的根据文档信息,推算出字段的类型
  • 推断有时候会出现错误,如地理位置信息
  • 当类型如果设置不对时,会导致一些功能无法正常的运行,eg range查询
  • 查看Mapping
  • 类型的自动识别
    • 字符串:
      • 匹配日期格式设置为date,
  • 布尔值 :boolean
  • 能否更改mapping的字段类型
    • 两种情况
      • 新增字段
        • dynamic 设置为 true,一旦有新增字段的文档写入,mapping也同时被更新
        • dynamic 设置为false,mapping不会被更新,新增字段无法被索引,但是信息会出现在_source中
        • dynamic 设置成strict,文档写入失败
      • 对已有字段,一旦已经有数据写入,就不再支持字段定义的修改
        • lucene实现的倒排索引,一旦生成后,就无法修改
      • 如果必须要修改字段的类型,必须要reindex,重建索引
  • 控制dynamic mappings
    • true:文档可索引,字段可索引,mapping可更新
    • false:文档可索引,字段不可索引,mapping不可更新
    • stric:文档不可索引

显示定义 Mapping

  • 自定义mapping的建议
    • 可以参考api手册,纯手写
    • 为了减少工作量,减少出错概率,可以依照以下步骤
      • 创建一个临时的index,写入一些样本数据
      • 通过访问mapping api 获得零食index的动态mapping定义
      • 修改后用该配置创建新的索引
      • 删除临时索引
  • 控制字段收否被索引
    • index - 控制当前字段是否被索引,默认为true,如果设置成false,该字段不可被搜索
  • index Options
    • 四种不同级别的index options配置,可以控制倒排索引记录的内容
      • docs - 记录doc id
      • freqs - 记录doc id 和term frequencles
      • position - 记录doc id / term frequenceles / term position
      • offsets - doc id / term frequencies / term position / character offects
    • text 默认巨鹿级别为postions, 其他为doc
    • 记录的内容越多,占用的空间越大
  • null_vlaue
    • 需要对null值实现搜索
      • mapping文件中,字段进行null_value设置默认值为NULL等
    • 只有keyword类型支持设定null_value
  • copy_to
    • 满足特定的搜索需求
    • copy_to将字段的树枝拷贝到目标字段,实现类似_all的作用
    • copy_to的目标字段不出现在_source中

数组类型

  • es中不提供专门的数组类型,但是任何字段,都可以包含多个多个相同个类型的数值

多字段类型

  • 多字段特性
  • 使用不同的analyzer
    • 不同语言
    • pinyin字段的搜索
    • 还支持为搜索和索引指定不同的analyzer
  • exact value vs full text
    • exact value:包括数字/日期/具体一个字符(eg "apple store")
      • es中的keyword
      • 在索引时,不需要做特殊的分词处理
      • es为每一个字段创建一个倒排索引
    • 全文本,非结构化的数据文本
      • es中的text

自定义分词器

  • 当es自带的分词器无法满足需要的时候,可以自定义分词器,通过组合不同的组件实现
    • character filter
    • tokenizer
    • token filter
  • character filter
    • 在tokennizer之前对文本进行处理,例如增加删除及替换字符。可以配置多个character filter。会影响tokenizer的position和offset信息
    • 一些自带的character filter
      • html strip:去除html标签
      • mapping:字符串替换
      • pattern replace:正则匹配替换
  • tokenizer
    • 将原始的文本按照一定的规则,切分为词
    • es内置的tokenizers
      • whitspace / standard / uax_url_email / pattern / keyword / path hierachy
    • 可以用java 开发插件,实现自己的tokenizer
  • token filter
    • 将tokenizer输出的单词(term),进行增加,修改,删除
    • 自带的token filters
      • lowercase / stop / synonym
  • 自定义eg:

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
相关产品与服务
Elasticsearch Service
腾讯云 Elasticsearch Service(ES)是云端全托管海量数据检索分析服务,拥有高性能自研内核,集成X-Pack。ES 支持通过自治索引、存算分离、集群巡检等特性轻松管理集群,也支持免运维、自动弹性、按需使用的 Serverless 模式。使用 ES 您可以高效构建信息检索、日志分析、运维监控等服务,它独特的向量检索还可助您构建基于语义、图像的AI深度应用。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档