ElasticSearch-倒排索引 & 文档映射

打印 上一主题 下一主题

主题 580|帖子 580|积分 1740


  • 倒排索引
  • 文档映射

    • 已有字段的Mapping修改
    • 常用Mapping参数配置
    • Index Template
    • Dynamic Template


倒排索引



  • 当数据写入 ES 时,数据将会通过 分词 被切分为不同的 term,ES 将 term 与其对应的文档列表建立一种映射关系,这种布局就是 倒排索引



  • 为了进一步提升索引的效率,ES 在 term 的底子上利用 term 的前缀大概后缀构建了 term index, 用于对 term 自己举行索引



  • 当我们去搜索某个关键词时,ES 起首根据它的前缀大概后缀敏捷缩小关键词的在 term dictionary 中的范围,大大减少了磁盘IO的次数

    • 单词辞书(Term Dictionary) :记录全部文档的单词,记录单词到倒排列表的关联关系
    • 倒排列表(Posting List):记录了单词对应的文档结合,由倒排索引项构成
    • 倒排索引项(Posting):

      • 文档ID
      • 词频TF:该单词在文档中出现的次数,用于相关性评分
      • 位置 (Position):单词在文档中分词的位置。用于短语搜索(match phrase query)
      • 偏移 (Offset):记录单词的开始结束位置,实现高亮显示


  • Elasticsearch 的JSON文档中的每个字段,都有自己的倒排索引
  • 可以指定对某些字段不做索引

    • 优点︰节流存储空间
    • 缺点: 字段无法被搜索


文档映射



  • Mapping类似数据库中的schema的定义,作用如下

    • 定义索引中的字段的名称
    • 定义字段的数据类型,例如字符串,数字,布尔等
    • 字段,倒排索引的相关配置 (Analyzer)

  • ES中Mapping映射可以分为动态映射和静态映射

    • 动态映射:不必要定义Mapping映射(即关系型数据库的表、字段等),在文档写入Elasticsearch时,会根据文档字段自动辨认类型,这种机制称之为动态映射

      • 动态映射(Dynamic Mapping)的机制,使得我们无需手动定义Mappings,Elasticsearch会自动根据文档信息,推算出字段的类型
      • 但是有时候会推算的不对,例如地理位置信息
      • 当类型假如设置不对时,会导致一些功能无法正常运行,例如Range查询


    • 静态映射:事先定义好映射,包含文档的各字段类型、分词器等,这种方式称之为静态映射

已有字段的Mapping修改



  • 后期更改Mapping的字段类型

    • 新增加字段

      • dynamic设为true时,一旦有新增字段的文档写入,Mapping也同时被更新
      • dynamic设为false,Mapping 不会被更新,新增字段的数据无法被索引,但是信息会出如今_source中
      • dynamic设置成strict (严格控制战略),文档写入失败,抛出非常


    • 对已有字段,一旦已经有数据写入,就不再支持修改字段定义

      • Lucene 实现的倒排索引,一旦生成后,就不答应修改
      • 假如希望改变字段类型,可以利用 reindex API,重建索引

    • 原因

      • 假如修改了字段的数据类型,会导致已被索引的数据无法被搜索
      • 但是假如是增加新的字段,就不会有如许的影响


  • 对已有字段的mapping修改:实现索引的平滑过渡,而且是零停机

    • 假如要推倒现有的映射, 你得重新建立一个静态索引
    • 然后把之前索引里的数据导入到新的索引里 POST _reindex
    • 删除原创建的索引
    • 为新索引起个别名, 为原索引名 PUT /user2/_alias/user

  1. PUT /user2
  2. {"mappings":{
  3.    "properties":{"name":{"type":"text"}}}}
  4. POST _reindex
  5. {"source":{"index":"user"},
  6. "dest":{"index":"user2"}}
  7. DELETE /user
  8. PUT /user2/_alias/user
复制代码
常用Mapping参数配置



  • index: 控制当前字段是否被索引,默以为true

    • 假如设置为false,该字段不可被搜索

  1. PUT /user
  2. {"mappings": {
  3.   "properties": {
  4.    "name":{"type":"text","index":false}}}}
复制代码


  • 有四种不同根本的index options配置,控制倒排索引记录的内容

    • docs : 记录doc id
    • freqs:记录doc id 和term frequencies(词频)
    • positions: 记录doc id / term frequencies / term position
    • offsets: doc id / term frequencies / term posistion / character offsets

  • text 类型默认记录 postions,其他默以为 docs

    • 记录内容越多,占用存储空间越大

  1. PUT /user
  2. {"mappings":{
  3.   "properties": {
  4.    "name":{"type":"text","index_options":"offsets"}}}}
复制代码


  • null_value: 必要对Null值举行搜索,只有keyword类型支持设计Null_Value才行
  1. PUT /user
  2. {"mappings":{
  3.   "properties": {
  4.    "name":{"type":"keyword","null_value":"NULL"}}}}
复制代码


  • copy_to设置:将字段的数值拷贝到目标字段,满足一些特定的搜索需求

    • copy_to的目标字段不出如今_source中

  1. PUT /user
  2. {"mappings":{
  3.   "properties":{
  4.    "name":{"type":"text","copy_to":"full_address"}}}}
复制代码
Index Template



  • Index Templates可以帮助你设定Mappings和Settings,并按照一定的规则,自动匹配到新创建的索引之上

    • 模版仅在一个索引被新创建时,才会产生作用。修改模版不会影响已创建的索引
    • 你可以设定多个索引模版,这些设置会被“merge”在一起
    • 你可以指定“order”的数值,控制“merging”的过程

  • 当一个索引被新创建时

    • 应用Elasticsearch 默认的settings 和mappings
    • 应用order数值低的lndex Template 中的设定
    • 应用order高的 Index Template 中的设定,之前的设定会被覆盖
    • 应用创建索引时,用户所指定的Settings和 Mappings,并覆盖之前模版中的设定

  1. PUT /_template/template_default
  2. {"index_patterns": ["*"],
  3. "order": 0,
  4. "version": 1,
  5. "settings": {
  6.    "number_of_shards":1,
  7.    "number_of_replicas":1}}
复制代码
Dynamic Template



  • Dynamic Tempate定义在某个索引的Mapping中
  1. PUT my_index
  2. {"mappings":{
  3.   "dynamic_templates":[{
  4.    "strings_as_boolean":{
  5.    "match_mapping_type":"string",
  6.    "match":"is*",
  7.    "mapping":{"type":"boolean"}}}]}}
复制代码
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?立即注册

x
回复

使用道具 举报

0 个回复

倒序浏览

快速回复

您需要登录后才可以回帖 登录 or 立即注册

本版积分规则

数据人与超自然意识

金牌会员
这个人很懒什么都没写!

标签云

快速回复 返回顶部 返回列表