ES mapping 详解

这篇具有很好参考价值的文章主要介绍了ES mapping 详解。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

nested 类型???

_all

_routing;

ES-mapping

Elasticsearch根据业务创建映射mapping结构分析:keyword和text(一)_elasticsearch keyword mapping_周全全的博客-CSDN博客

0.Mapping样例

{
    "mappings":{
        "_doc":{
            "_all":{
                "enabled":false  #默认情况,ElasticSarch自动使用_all所有的文档的域都会被加到_all中进行索引。可以使用"_all" : {"enabled":false} 开关禁用它。如果某个域不希望被加到_all中,可以使用"include_in_all":false关闭
            },
            "properties":{
                "uuid":{
                    "type":"text",
                    "copy_to":"_search_all", #对应_search_all字段,可以对其进行全文检索
                    "fields":{
                        "keyword":{
                            "type":"keyword",  
                            "ignore_above":150  #ignore_above 默认值是256,当字段文本的长度大于指定值时,不做倒排索引。
                        }
                    }
                },
                "name":{
                    "type":"text",
                    "copy_to":"_search_all",
                    "analyzer":"ik_max_word",  # ik_max_word 插件会最细粒度分词
                    "search_analyzer":"ik_smart",  # ik_smart 粗粒度分词
                    "fields":{
                        "keyword":{
                            "type":"keyword",
                            "ignore_above":150
                        }
                    }
                },
                "dt_from_explode_time":{
                    "type":"date",
                    "copy_to":"_search_all",
                    "format":"strict_date_optional_time||epoch_millis"
                },
                "_search_all":{
                    "type":"text"
                }
            },
            "date_detection":false,  #关闭日期自动检测,如果开启,会对于设置为日期格式的字段进行判断
            "dynamic_templates":[   #用于自定义在动态添加field的时候自动给field设置的数据类型
                {
                    "strings":{
                        "match_mapping_type":"string",
                        "mapping":{
                            "type":"text",
                            "copy_to":"_search_all",
                            "fields":{
                                "keyword":{
                                    "type":"keyword",
                                    "ignore_above":150
                                }
                            }
                        }
                    }
                }
            ]
        }
    },
    "settings":{
        "index":{
            "number_of_shards":6, #分片数量
            "number_of_replicas":1  #副本数量
        }
    }
}

1.什么是Mapping

Elasticsearch mapping_Aska小强的博客-CSDN博客

Mapping 类似 mysql 中的 schema 的定义,就是定义索引属性字段的

定义索引中字段的名称
定义索引中字段的数据类型 , 如 text , long , keyword....
定义索引中字段的的倒排索引相关配置 ( Analyzer...)
一个Mapping 属于一个索引的Type

每个文档都属于一个Type
一个Type有一个Mapping 定义
es7.0开始, 在Mapping中不需要指定 Type信息, 因为7.0之后只有_doc Type

1.1es 自动创建mapping

当我们去创建一个 索引的时候 未指定 mapping , es会默认帮这个索引创建一个 mapping

创建一个 索引并且索引一条数据

2.手动创建mapping时考虑:

1. 是否参与搜索:即是否用于索引,index = false

2.即是否需要分词|| 是否需要聚合、排序:即具体的类型 是否为keyword

3.如果分词,分词器是什么 :例如analyzer = "ik_max_word" 

4.数值类型是否需要 设置index 以及 是否需要改成keyword

3.Mapping数据类型:

ES mapping 详解

3.1重要数据类型说明: 

keyword:

存储:存储数据的时候,不会分词建立索引,而是直接一整个丢到倒排索引中

使用场景:用于聚合、排序和术语级查询(如 term),所以避免参与全文检索。

作用:keyword不支持分词查询 ,但text支持;


text字段类型:

存储:存储数据的时候,会分词建立索引

使用场景:用于全文内容,例如电子邮件正文或产品说明,并且es会通过分析器对字符串进行分词,可以在全文检索中搜索单独的单词。文本字段最适合非结构化但可读的内容并且不用于排序,也很少用于聚合。

作用:text类型无法聚合查询

4.Mapping属性设置

mapping 属性设置analyzer 分词器

默认分词器 standard , 它会把中文一个个拆开,肯定是不适合的,如果是索引中文的信息, 需要设置字段的分词器,

mapping 属性设置 index

通过给 属性设置 index 来控制该 字段是否 参与 索引, 默认 true , 如果index 设置为false 那么 不能记录索引 并且不可以搜索

mapping 设置 属性 null_value 默认值


null_value:当字段遇到null值时候的处理策略(字段为null时候是不能被搜索的,也就是说,text类型的字段不能使用该属性,可以使用在keyword 字段上),设置该值后可以用你设置的值替换null值,这点可类比mysql中的"default"设置默认值, 但是也有点不一样, 后续就可以

使用你设置的这个 null_value 去搜索, 但是检索出来的数据_source 中 还是展示 null

mapping 属性设置 boost 权重

在es搜索的时候 会有一个相关性算分的过程 , 如果不设置 每个字段的默认boost 权重为1.0 , 如果希望加大 按照广告投放金额的分 那么可以设置boost 以提高搜索 自然就排在前面了

mapping 设置 dynamic

关闭动态mapping:

PUT order_es_index/_settings
{
  "index.mapper.dynamic":false
}


dynamic 是否允许动态新增字段

true : 允许动态新增字段 同时mapping 被更新 文档可被索引
false: 不允许动态新增字段 , mapping 不会被更新, 字段不能被索引, 但是数据可以入库并且信息会出现在 _source 中
strict : 不允许写入, 直接报错
对于已经存在的字段 一旦又数据写入,就不能进行修改字段定义了,因为 底层Lucene不允许修改, 如果希望修改字段类型,必须 reindex 重建索引文章来源地址https://www.toymoban.com/news/detail-460560.html

到了这里,关于ES mapping 详解的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • es elasticsearch 八 mapping 映射 、复杂数据类型

    目录 Mapping 映射 复杂数据类型 Mapping 映射 精确匹配 必须和对应字段值安全一致才可查出 全文检索 缩写搜索全程、格式转换 大小写 同义词 全文检索核心原理 分词,初步的倒排索引的建立 重建倒排索引 时态转换、重复数的转换、同义词的转换、大小写的转换 分词器 analy

    2024年02月07日
    浏览(57)
  • 【Elasticsearch学习笔记二】es的Mapping字段映射、Mapping字段常用类型、Mapping映射的创建、查看和更新、es数据迁移、ik分词器

    目录 1、Mapping字段映射概述 2、Mapping字段常用类型 3、映射中对时间类型详解 1)采取自动映射器来映射 2)手工映射提前指定日期类型 4、ES的keyword的属性ignore_above 5、Mapping映射的查看和创建 1)查看mapping信息:GET 索引名/_mapping 2)创建映射:PUT /索引名 3) 查看所有索引映

    2024年01月20日
    浏览(61)
  • ES mapping 详解

    nested 类型??? _all _routing; ES-mapping Elasticsearch mapping_Aska小强的博客-CSDN博客 Mapping 类似 mysql 中的 schema 的定义,就是定义索引属性字段的 定义索引中字段的名称 定义索引中字段的数据类型 , 如 text , long , keyword.... 定义索引中字段的的倒排索引相关配置 ( Analyzer...) 一个Mappin

    2024年02月06日
    浏览(24)
  • ES修改字段类型详解

    一、需求概述 ES修改字段类型是指在已有的索引中,通过特定的操作方式将某个字段的类型修改为其它类型。当ES在建立索引的时候,已经确定好了每个字段的类型,而如果在建立后发现类型不符需求,就需要修改字段类型。 二、修改字段类型的原因 有以下几种情况会导致修

    2024年02月05日
    浏览(54)
  • es的nested查询

    一、一层嵌套 mapping: 导入数据到索引: 使用DevTools执行多层嵌套查询 Java查询语句: 二、多层嵌套 mapping: 导入数据到索引 使用DevTools执行多层嵌套查询 Java查询语句:

    2024年02月03日
    浏览(55)
  • Elasticsearch 复杂类型 Nested

    复杂类型 建模到底是个什么东东? 建模解决什么问题? 复杂类型的的检索问题 主要解决复杂类型无法搜索的问题 nested属于object类型的一种,是Elasticsearch中用于复杂类型对象数组的索引操作。Elasticsearch没有内部对象的概念,因此,ES在存储复杂类型的时候会把对象的 复杂层次

    2024年02月13日
    浏览(46)
  • 深入了解ElasticSearch的Nested数据类型

    这个时候就需要用到nested,nested类型是object数据类型的特殊版本,它允许对象数组以一种可以相互独立查询的方式进行索引。 在Nested内部,每个对象索引其实是一个单独的隐藏文档,这意味着每个嵌套对象都可以独立于其他对象进行查询。 使用Nested需要先创建索引,依旧通

    2024年04月10日
    浏览(78)
  • Elasticsearch中object类型与nested类型以及数组之间的区别

    0、一般情况下用object 类型来查es中为json对象的字段数据,用nested来查es中为JsonArray数组类型的字段数据。 1、默认情况下ES会把JSON对象直接映射为object类型,只有手动设置才会映射为nested类型 2、object类型可以直接使用普通的逗号(.)查询,比如 3、nested类型的查询需要使用

    2024年01月22日
    浏览(84)
  • 6.ELK之Elasticsearch嵌套(Nested)类型

    在Elasticsearch实际应用中经常会遇到嵌套文档的情况,而且会有“对象数组彼此独立地进行索引和查询的诉求”。在ES中这种嵌套文档称为父子文档,父子文档“彼此独立地进行查询”至少有以下两种方式: 1)父子文档。在ES的5.x版本中通过parent-child父子type实现,即一个索引

    2024年02月03日
    浏览(59)
  • es索引分片重新分配cluster.routing.allocation

    Index-level shard allocation filtering | Elasticsearch Guide [master] | Elastic index.routing.allocation.include.{attribute} Assign the index to a node whose  {attribute}  has at least one of the comma-separated values. index.routing.allocation.require.{attribute} Assign the index to a node whose  {attribute}  has  all  of the comma-separated values. i

    2024年02月09日
    浏览(46)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包