ElasticSearch 23 种映射参数详解【3】

2年前 (2022) 程序员胖胖胖虎阿
179 0 0

松哥原创的 Spring Boot 视频教程已经杀青,感兴趣的小伙伴戳这里-->Spring Boot+Vue+微人事视频教程


23 种映射参数松哥已经连着讲了两篇了,今天是 23 种映射参数的最后一篇。后面我们将进入到搜索的环节。

本文是ElasticSearch 系列第 16 篇,和大家聊一聊索引的基本操作,前 15 篇传送门:

  1. 打算出一个 ElasticSearch 教程,谁赞成,谁反对?
  2. ElasticSearch 从安装开始
  3. ElasticSearch 第三弹,核心概念介绍
  4. ElasticSearch 中的中文分词器该怎么玩?
  5. ElasticSearch 索引基本操作
  6. ElasticSearch 文档的添加、获取以及更新
  7. ElasticSearch 文档的删除和批量操作
  8. ElasticSearch 文档路由,你的数据到底存在哪一个分片上?
  9. ElasticSearch 并发的处理方式:锁和版本控制
  10. ElasticSearch 中的倒排索引到底是什么?
  11. ElasticSearch 动态映射与静态映射
  12. ElasticSearch 四种字段类型详解
  13. ElasticSearch 中的地理类型和特殊类型
  14. ElasticSearch 23 种映射参数详解
  15. ElasticSearch 如何配置某个字段的权重?

今天的视频有三个(视频录制不易,希望小伙伴们多多三连支持):

如果大家觉得视频风格还能接受,也可以看看松哥的付费视频:Spring Boot+Vue+微人事视频教程

以下是视频笔记:

注意,笔记只是视频内容的一个简要记录,因此笔记内容比较简单,完整的内容可以查看视频。

11.8 dynamic

11.9 enabled

es 默认会索引所有的字段,但是有的字段可能只需要存储,不需要索引。此时可以通过 enabled 字段来控制:

PUT blog
{
  "mappings": {
    "properties": {
      "title":{
        "enabled"false
      }
    }
  }
}

PUT blog/_doc/1
{
  "title":"javaboy"
}

GET blog/_search
{
  "query": {
    "term": {
      "title""javaboy"
    }
  }
}

设置了 enabled 为 false 之后,就可以再通过该字段进行搜索了。

11.10 format

日期格式。format 可以规范日期格式,而且一次可以定义多个 format。

PUT users
{
  "mappings": {
    "properties": {
      "birthday":{
        "type""date",
        "format""yyyy-MM-dd||yyyy-MM-dd HH:mm:ss"
      }
    }
  }
}

PUT users/_doc/1
{
  "birthday":"2020-11-11"
}

PUT users/_doc/2
{
  "birthday":"2020-11-11 11:11:11"
}
  • 多个日期格式之间,使用 || 符号连接,注意没有空格。
  • 如果用户没有指定日期的 format,默认的日期格式是
    strict_date_optional_time||epoch_mills

另外,所有的日期格式,可以在 https://www.elastic.co/guide/en/elasticsearch/reference/current/mapping-date-format.html 网址查看。

11.11 ignore_above

igbore_above 用于指定分词和索引的字符串最大长度,超过最大长度的话,该字段将不会被索引,这个字段只适用于 keyword 类型。

PUT blog
{
  "mappings": {
    "properties": {
      "title":{
        "type""keyword",
        "ignore_above": 10
      }
    }
  }
}

PUT blog/_doc/1
{
  "title":"javaboy"
}

PUT blog/_doc/2
{
  "title":"javaboyjavaboyjavaboy"
}

GET blog/_search
{
  "query": {
    "term": {
      "title""javaboyjavaboyjavaboy"
    }
  }
}

10.12 ignore_malformed

ignore_malformed 可以忽略不规则的数据,该参数默认为 false。

PUT users
{
  "mappings": {
    "properties": {
      "birthday":{
        "type""date",
        "format""yyyy-MM-dd||yyyy-MM-dd HH:mm:ss"
      },
      "age":{
        "type""integer",
        "ignore_malformed"true
      }
    }
  }
}

PUT users/_doc/1
{
  "birthday":"2020-11-11",
  "age":99
}

PUT users/_doc/2
{
  "birthday":"2020-11-11 11:11:11",
  "age":"abc"
}


PUT users/_doc/2
{
  "birthday":"2020-11-11 11:11:11aaa",
  "age":"abc"
}

10.13 include_in_all

这个是针对 _all 字段的,但是在 es7 中,该字段已经被废弃了。

10.14 index

index 属性指定一个字段是否被索引,该属性为 true 表示字段被索引,false 表示字段不被索引。

PUT users
{
  "mappings": {
    "properties": {
      "age":{
        "type""integer",
        "index"false
      }
    }
  }
}

PUT users/_doc/1
{
  "age":99
}

GET users/_search
{
  "query": {
    "term": {
      "age": 99
    }
  }
}
  • 如果 index 为 false,则不能通过对应的字段搜索。

10.15 index_options

index_options 控制索引时哪些信息被存储到倒排索引中(用在 text 字段中),有四种取值:

ElasticSearch 23 种映射参数详解【3】

10.16 norms

norms 对字段评分有用,text 默认开启 norms,如果不是特别需要,不要开启 norms。

10.17 null_value

在 es 中,值为 null 的字段不索引也不可以被搜索,null_value 可以让值为 null 的字段显式的可索引、可搜索:

PUT users
{
  "mappings": {
    "properties": {
      "name":{
        "type""keyword",
        "null_value""javaboy_null"
      }
    }
  }
}

PUT users/_doc/1
{
  "name":null,
  "age":99
}

GET users/_search
{
  "query": {
    "term": {
      "name""javaboy_null"
    }
  }
}

10.18 position_increment_gap

被解析的 text 字段会将 term 的位置考虑进去,目的是为了支持近似查询和短语查询,当我们去索引一个含有多个值的 text 字段时,会在各个值之间添加一个假想的空间,将值隔开,这样就可以有效避免一些无意义的短语匹配,间隙大小通过 position_increment_gap 来控制,默认是 100。

PUT users

PUT users/_doc/1
{
  "name":["zhang san","li si"]
}

GET users/_search
{
  "query": {
    "match_phrase": {
      "name": {
        "query""sanli"
      }
    }
  }
}
  • sanli 搜索不到,因为两个短语之间有一个假想的空隙,为 100。
GET users/_search
{
  "query": {
    "match_phrase": {
      "name": {
        "query""san li",
        "slop": 101
      }
    }
  }
}

可以通过 slop 指定空隙大小。

也可以在定义索引的时候,指定空隙:

PUT users
{
  "mappings": {
    "properties": {
      "name":{
        "type""text",
        "position_increment_gap": 0
      }
    }
  }
}

PUT users/_doc/1
{
  "name":["zhang san","li si"]
}

GET users/_search
{
  "query": {
    "match_phrase": {
      "name": {
        "query""san li"
      }
    }
  }
}

10.19 properties

10.20 similarity

similarity 指定文档的评分模型,默认有三种:

ElasticSearch 23 种映射参数详解【3】

10.21 store

默认情况下,字段会被索引,也可以搜索,但是不会存储,虽然不会被存储的,但是 _source 中有一个字段的备份。如果想将字段存储下来,可以通过配置 store 来实现。

10.22 term_vectors

term_vectors 是通过分词器产生的信息,包括:

  • 一组 terms
  • 每个 term 的位置
  • term 的首字符/尾字符与原始字符串原点的偏移量

term_vectors 取值:

ElasticSearch 23 种映射参数详解【3】

11.23 fields

fields 参数可以让同一字段有多种不同的索引方式。例如:

PUT blog
{
  "mappings": {
    "properties": {
      "title":{
        "type""text",
        "fields": {
          "raw":{
            "type":"keyword"
          }
        }
      }
    }
  }
}

PUT blog/_doc/1
{
  "title":"javaboy"
}

GET blog/_search
{
  "query": {
    "term": {
      "title.raw""javaboy"
    }
  }
}
  • https://www.elastic.co/guide/en/elasticsearch/reference/current/mapping-params.html






往期推荐
0
1

50+ 需求文档免费下载!

0
2

Spring Security 教程合集

0
3

接了两个私活,都是血汗钱

ElasticSearch 23 种映射参数详解【3】

本文分享自微信公众号 - 江南一点雨(a_javaboy)。
如有侵权,请联系 support@oschina.cn 删除。
本文参与“OSC源创计划”,欢迎正在阅读的你也加入,一起分享。

版权声明:程序员胖胖胖虎阿 发表于 2022年11月10日 上午9:08。
转载请注明:ElasticSearch 23 种映射参数详解【3】 | 胖虎的工具箱-编程导航

相关文章

暂无评论

暂无评论...