Elasticsearch Mapping parameters(主要参数一览)

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

“username”: “johnsmith”,

“name”: {

“first”: “John”,

“last”: “Smith”

}

}

PUT my_index/_doc/2 // @1

{

“username”: “marywhite”,

“email”: “mary@white.com”,

“name”: {

“first”: “Mary”,

“middle”: “Alice”,

“last”: “White”

}

}

GET my_index/_mapping // @2

代码@1在原有的映射下,增加了username,name.middle两个字段,通过代码@2获取映射API可以得知,es已经为原本不存在的字段自动添加了类型映射定义。

注意:dynamic只对当前层级具有约束力,例如:

PUT my_index

{

“mappings”: {

“_doc”: {

“dynamic”: false, // @1

“properties”: {

“user”: { // @2

“properties”: {

“name”: {

“type”: “text”

},

“social_networks”: { // @3

“dynamic”: true,

“properties”: {}

}

}

}

}

}

}

}

代码@1:_doc类型的顶层不能不支持动态隐式添加字段映射。

代码@2:但_doc的嵌套对象user对象,是支持动态隐式添加字段映射。

代码@3:同样对于嵌套对象social_networks,也支持动态隐式添加字段映射。

  • enabled

是否建立索引,默认情况下es会尝试为你索引所有的字段,但有时候某些类型的字段,无需建立索引,只是用来存储数据即可。只有映射类型(type)和object类型的字段可以设置enabled属性。示例如下:

PUT my_index

{

“mappings”: {

“_doc”: {

“properties”: {

“user_id”: {

“type”: “keyword”

},

“last_updated”: {

“type”: “date”

},

“session_data”: {

“enabled”: false

}

}

}

}

}

PUT my_index/_doc/session_1

{

“user_id”: “kimchy”,

“session_data”: {

“arbitrary_object”: {

“some_array”: [ “foo”, “bar”, { “baz”: 2 } ]

}

},

“last_updated”: “2015-12-06T18:20:22”

}

上述示例,es会存储session_data对象的数据,但无法通过查询API根据session_data中的属性进行查询。

同样,可以通过put mapping api更新enabled属性。

  • eager_global_ordinals

全局序列号,它以字典顺序为每个惟一的术语保持递增的编号。全局序号只支持字符串类型(关键字和文本字段)。在关键字字段中,它们在默认情况下是可用的,但文本字段只能fielddata=true时可用。doc_values(和fielddata)也有序号,是特定段(segment)和字段中所有词根(term)的唯一编号。全局序号只是在此之上构建的,它提供了段序号(segment ordinals)和全局序号(global ordinals)之间的映射,全局序号在整个分片中是唯一的。由于每个字段的全局序号与一个分片(shard)的所有段(segment)相关联,因此当一个新的segment(段)变为可见时,需要完全重新构建它们。术语聚合依懒全局序号,首先在分片级别(shard)执行聚合,然后汇聚所有分片的结果(reduce)并将全局序号转换为真正的词根(字符串),合并后返回聚合后的结果。默认情况下,全局序号是在搜索时加载的,这对提高索引API的速度会非常有利。但是,如果您更加重视搜索性能,,那么在您计划使用的聚合的字段上设置eager_global_ordinals,会对提高查询效率更有帮助。

eager_global_ordinals的意思是预先加载全局序号。

其示例如下:

PUT my_index/_mapping/_doc

{

“properties”: {

“tags”: {

“type”: “keyword”,

“eager_global_ordinals”: true

}

}

}

  • fielddata

为了解决排序与聚合,elasticsearch提供了doc_values属性来支持列式存储,但doc_values不支持text字段类型。因为text字段是需要先分析(分词),会影响doc_values列式存储的性能。es为了支持text字段高效排序与聚合,引入了一种新的数据结构(fielddata),使用内存进行存储。默认构建时机为第一次聚合查询、排序操作时构建,主要存储倒排索引中的词根与文档的映射关系,聚合,排序操作在内存中执行。因此fielddata需要消耗大量的JVM堆内存。一旦fielddata加载到内存后,它将永久存在。通常情况下,加载fielddata是一个昂贵的操作,故默认情况下,text字段的字段默认是不开启fielddata机制。在使用fielddata之前请慎重考虑为什么要开启fielddata。通常text字段用来进行全文搜索,对于聚合、排序字段,建议使用doc_values机制。

为了节省内存的使用,es提供了另一项机制(fielddata_frequency_filter),允许只加载那些词根频率在指定范围(最大,小值)直接的词根与文档的映射关系,最大最小值可以指定为绝对值,例如数字,也可以基于百分比(百分比的计算是基于整个分段(segment),其频率分母不是分段(segment)中所有的文档,而是segment中该字段有值的文档)。可以通过min_segment_size参数来指定分段中必须包含的最小文档数量来排除小段,也就是说可以控制fielddata_frequency_filter的作用范围是包含大于min_segment_size的文档数量的段。fielddata_frequency_filter的使用示例如下:

  • format

在JSON文档中,日期表示为字符串。Elasticsearch使用一组预先配置的格式来识别和解析这些字符串,并将其解析为long类型的数值(毫秒)。

日期格式主要包括如下3种方式:

1)自定义格式

2)date mesh(已在DSL查询API中详解)

3)内置格式

1、自定义格式

首先可以使用java定义时间的格式,例如:

PUT my_index

{

“mappings”: {

“_doc”: {

“properties”: {

“date”: {

“type”: “date”,

“format”: “yyyy-MM-dd HH:mm:ss”

}

}

}

}

}

2、date mesh

某些API支持,已在DSL查询API中详细介绍过,这里不再重复。

3、内置格式

elasticsearch为我们内置了大量的格式,如下:

  1. epoch_millis

时间戳,单位,毫秒。

  1. epoch_second

时间戳,单位,秒。

  1. date_optional_time

日期必填,时间可选,其支持的格式如下:

Elasticsearch Mapping parameters(主要参数一览),Java程序员面试,elasticsearch,java,大数据

  1. basic_date

其格式表达式为 :yyyyMMdd

  1. basic_date_time

其格式表达式为:yyyyMMdd’T’HHmmss.SSSZ

  1. basic_date_time_no_millis

其格式表达式为:yyyyMMdd’T’HHmmssZ

  1. basic_ordinal_date

4位数的年 + 3位(day of year),其格式字符串为yyyyDDD

  1. basic_ordinal_date_time

其格式字符串为yyyyDDD’T’HHmmss.SSSZ

  1. basic_ordinal_date_time_no_millis

其格式字符串为yyyyDDD’T’HHmmssZ

  1. basic_time

其格式字符串为HHmmss.SSSZ

  1. basic_time_no_millis

其格式字符串为HHmmssZ

  1. basic_t_time

其格式字符串为’T’HHmmss.SSSZ

  1. basic_t_time_no_millis

其格式字符串为’T’HHmmssZ

  1. basic_week_date

其格式字符串为xxxx’W’wwe,4为年 ,然后用’W’, 2位week of year(所在年里周序号) 1位 day of week。

  1. basic_week_date_time

其格式字符串为xxxx’W’wwe’T’HH:mm:ss.SSSZ.

  1. basic_week_date_time_no_millis

其格式字符串为xxxx’W’wwe’T’HH:mm:ssZ.

  1. date

其格式字符串为yyyy-MM-dd

  1. date_hour

其格式字符串为yyyy-MM-dd’T’HH

  1. date_hour_minute

其格式字符串为yyyy-MM-dd’T’HH:mm

  1. date_hour_minute_second

其格式字符串为yyyy-MM-dd’T’HH:mm:ss

  1. date_hour_minute_second_fraction

其格式字符串为yyyy-MM-dd’T’HH:mm:ss.SSS

  1. date_hour_minute_second_millis

其格式字符串为yyyy-MM-dd’T’HH:mm:ss.SSS

  1. date_time

其格式字符串为yyyy-MM-dd’T’HH:mm:ss.SSS

  1. date_time_no_millis

其格式字符串为yyyy-MM-dd’T’HH:mm:ss

  1. hour

其格式字符串为HH

  1. hour_minute

其格式字符串为HH:mm

  1. hour_minute_second

其格式字符串为HH:mm:ss

  1. hour_minute_second_fraction

其格式字符串为HH:mm:ss.SSS

  1. hour_minute_second_millis

其格式字符串为HH:mm:ss.SSS

  1. ordinal_date

其格式字符串为yyyy-DDD,其中DDD为 day of year。

  1. ordinal_date_time

其格式字符串为yyyy-DDD‘T’HH:mm:ss.SSSZZ,其中DDD为 day of year。

  1. ordinal_date_time_no_millis

其格式字符串为yyyy-DDD‘T’HH:mm:ssZZ

  1. time

其格式字符串为HH:mm:ss.SSSZZ

  1. time_no_millis

其格式字符串为HH:mm:ssZZ

  1. t_time

其格式字符串为’T’HH:mm:ss.SSSZZ

  1. t_time_no_millis

其格式字符串为’T’HH:mm:ssZZ

  1. week_date

其格式字符串为xxxx-'W’ww-e,4位年份,ww表示week of year,e表示day of week。

  1. week_date_time

其格式字符串为xxxx-'W’ww-e’T’HH:mm:ss.SSSZZ

  1. week_date_time_no_millis

其格式字符串为xxxx-'W’ww-e’T’HH:mm:ssZZ

  1. weekyear

其格式字符串为xxxx

  1. weekyear_week

其格式字符串为xxxx-'W’ww,其中ww为week of year。

  1. weekyear_week_day

其格式字符串为xxxx-'W’ww-e,其中ww为week of year,e为day of week。

  1. year

其格式字符串为yyyy

  1. year_month

其格式字符串为yyyy-MM

  1. year_month_day

其格式字符串为yyyy-MM-dd

温馨提示,日期格式时,es建议在上述格式之前加上strict_前缀。

  • ignore_above

超过ignore_above设置的字符串不会被索引或存储。对于字符串数组,将分别对每个数组元素应ignore_above,超过ignore_above的字符串元素将不会被索引或存储。目前测试的结果为:对于字符串字符长度超过ignore_above会存储,但不索引(也就是无法根据该值去查询)。其测试效果如下:

public static void create_mapping_ignore_above() { // 创建映射

RestHighLevelClient client = EsClient.getClient();

try {

CreateIndexRequest request = new CreateIndexRequest(“mapping_test_ignore_above2”);

XContentBuilder mapping = XContentFactory.jsonBuilder()

.startObject()

.startObject(“properties”)

.startObject(“lies”)

.field(“type”, “keyword”) // 创建关键字段

.field(“ignore_above”, 10) // 设置长度不能超过10

.endObject()

.endObject()

.endObject();

// request.mapping(“user”, mapping_user);

request.mapping(“_doc”, mapping);

System.out.println(client.indices().create(request, RequestOptions.DEFAULT));

} catch (Throwable e) {

e.printStackTrace();

} finally {

EsClient.close(client);

}

}

public static void index_mapping_ignore_above() { // 索引数据

RestHighLevelClient client = EsClient.getClient();

try {

IndexRequest request = new IndexRequest(“mapping_test_ignore_above2”, “_doc”);

Map<String, Object> data = new HashMap<>();

data.put(“lies”, new String[] {“dingabcdwei”,“huangsw”,“wuyanfengamdule”});

request.source(data);

System.out.println(client.index(request, RequestOptions.DEFAULT));

} catch (Throwable e) {

e.printStackTrace();

} finally {

EsClient.close(client);

}

}

public static void search_ignore_above() { // 查询数据

RestHighLevelClient client = EsClient.getClient();

try {

SearchRequest searchRequest = new SearchRequest();

searchRequest.indices(“mapping_test_ignore_above2”);

SearchSourceBuilder sourceBuilder = new SearchSourceBuilder();

sourceBuilder.query(

// QueryBuilders.matchAllQuery() // @1

// QueryBuilders.termQuery(“lies”, “dingabcdwei”) // @2

// QueryBuilders.termQuery(“lies”, “huangsw”) // @3

);

searchRequest.source(sourceBuilder);

SearchResponse result = client.search(searchRequest, RequestOptions.DEFAULT);

System.out.println(result);

} catch (Throwable e) {

e.printStackTrace();

} finally {

EsClient.close(client);

}

}

代码@1:首先查询所有数据,其_souce字段的值为:“_source”:{“lies”:[“dingabcdwei”,“huangsw”,“wuyanfengamdule”]},表名不管字符串的值是否大于ignore_above指定的值,都会存储。

代码@2:用超过ignore_above长度的值尝试去搜索,发现无法匹配到记录,表明并未加入到倒排索引中。

需要zi料+ 绿色徽【vip1024b】

代码@3:用未超过ignore_above长度的值尝试去搜索,发现能匹配到记录。

注意:在es中,ignore_above的长度是字符的长度,而es其底层实现lucene是使用字节进行计算的,故,如果要反馈到lucnce,请注意关系。

  • ignore_malformed

试图将错误的数据类型索引到字段中,默认情况下会抛出异常,并拒绝整个文档。ignore_malformed参数,如果设置为真,允许错误被忽略。格式不正确的字段不建立索引,但是文档中的其他字 段正常处理。可以创建索引时,设置index.mapping.ignore_malformed 配置项来定义索引级别的默认值,其优先级为 字段级、索引级。

  • index

定义字段是否索引,true:代表索引,false表示不索引(则无法通过该字段进行查询),默认值为true。

  • index_options

控制文档添加到反向索引的额外内容,其可选择值如下:

  1. docs:文档编号添加到倒排索引。

  2. freqs:文档编号与访问频率。

  3. positions:文档编号、访问频率、词位置(顺序性),proximity 和phrase queries 需要用到该模式。

最后

给大家送一个小福利

Elasticsearch Mapping parameters(主要参数一览),Java程序员面试,elasticsearch,java,大数据

附高清脑图,高清知识点讲解教程,以及一些面试真题及答案解析。送给需要的提升技术、准备面试跳槽、自身职业规划迷茫的朋友们。

Elasticsearch Mapping parameters(主要参数一览),Java程序员面试,elasticsearch,java,大数据

e_above长度的值尝试去搜索,发现能匹配到记录。

注意:在es中,ignore_above的长度是字符的长度,而es其底层实现lucene是使用字节进行计算的,故,如果要反馈到lucnce,请注意关系。

  • ignore_malformed

试图将错误的数据类型索引到字段中,默认情况下会抛出异常,并拒绝整个文档。ignore_malformed参数,如果设置为真,允许错误被忽略。格式不正确的字段不建立索引,但是文档中的其他字 段正常处理。可以创建索引时,设置index.mapping.ignore_malformed 配置项来定义索引级别的默认值,其优先级为 字段级、索引级。

  • index

定义字段是否索引,true:代表索引,false表示不索引(则无法通过该字段进行查询),默认值为true。

  • index_options

控制文档添加到反向索引的额外内容,其可选择值如下:

  1. docs:文档编号添加到倒排索引。

  2. freqs:文档编号与访问频率。

  3. positions:文档编号、访问频率、词位置(顺序性),proximity 和phrase queries 需要用到该模式。

最后

给大家送一个小福利

[外链图片转存中…(img-GJuuWVev-1710347204927)]

附高清脑图,高清知识点讲解教程,以及一些面试真题及答案解析。送给需要的提升技术、准备面试跳槽、自身职业规划迷茫的朋友们。

[外链图片转存中…(img-gUcUPjwQ-1710347204927)]文章来源地址https://www.toymoban.com/news/detail-841625.html

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

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

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

相关文章

  • MybatisPlus的分页插件自动优化LeftJoin语句导致参数不匹配 java.sql.SQLException: Parameter index out of range (3 > number of parameters, which is 2).

    首先会去检查自己传了哪些参数?是否都用上了?反复检查,发现并没有多余的参数: controller里处理条件并传参:  SQL语句  小伙伴说可能是我这sql语句太混乱,甚至还 mybatis和mybatisplus同时使用了!!!  遇事不决,查网友经验:(9条消息) MyBatis-Plus使用分页插件报错,或数

    2024年02月11日
    浏览(74)
  • nested exception is org.apache.ibatis.type.TypeException: Could not set parameters for mapping错误的决方法

    今天写好 hive表导入的回调 的接口,如下代码所示: 启动 postman 访问该接口,确报出如下错误: 即 nested exception is org.apache.ibatis.type.TypeException: Could not set parameters for mapping: ParameterMapping{property=\\\'missionId\\\', mode=IN, javaType=class java.lang.Long, jdbcType=null, numericScale=null, resultMapId=\\\'null\\\',

    2024年02月09日
    浏览(31)
  • Spring Boot 配置参数一览

    文章首发地址

    2024年02月16日
    浏览(32)
  • ElasticSearch之Mapping

    本文看下es的mapping的设置。es支持两种mapping,一种式dynamic mapping,另外一种是显式的mapping设置。分别来看下。 在正式开始之前我们需要先看下es提供的字段数据类型: 我们在使用关系型数据库的时候必须先建表,并指定有哪些字段,什么数据类型,否则将不能保存数据,但是

    2024年02月19日
    浏览(30)
  • elasticsearch mapping常用配置

    最近想整理下mapping的参数,感觉设计mapping时,那些参数还是挺重要的。 字段类型这次暂时不整理了,可以看官网文档。 下面的语句可以在没有创建Index的情况下执行,它执行完后,会自动创建Index。 当然也可以先创建Index,同时设置Index的Settings,然后再执行下面语句创建

    2024年02月13日
    浏览(26)
  • Elasticsearch:mapping

    es官方文档 :https://www.elastic.co/guide/en/elasticsearch/reference/7.6/mapping.html mapping是对索引库中文档的约束,常见的mapping属性包括如下内容 type :字段数据类型,常见的简单类型有: 字符串: text (可分词的文本), keyword (精确值,例如:品牌,国家,ip地址) 数值 :long,integer,s

    2024年02月12日
    浏览(28)
  • Elasticsearch实践:Setting、Mapping

    版本:Elasticsearch 6.2.4。 Mapping类似于数据库中的表结构定义,主要作用如下: 定义Index下字段名(Field Name) 定义字段的类型,比如数值型,字符串型、布尔型等 定义倒排索引的相关配置,比如是否索引、记录postion等 Mapping完整的内容可以分为四部分内容: 字段类型(Field d

    2024年02月04日
    浏览(29)
  • ElasticSearch索引mapping添加字段

    ES版本5.3.0,在已存在的索引mapping中添加字段。 如下: my_index索引名称,my_type为索引类型名称,new_field_name为新增的字段名称。 如下: 返回为true代表添加操作成功。

    2024年02月13日
    浏览(32)
  • 【ElasticSearch-基础篇】Mapping结构

    Mapping 类似 mysql 中的 schema 的定义 用于定义索引属性字段的名称、字段的数据类型 (如 text , long , keyword…)、字段的倒排索引相关配置 一个Mapping 属于一个索引的Type、每个文档都属于一个Type es7.0开始, 在Mapping中不需要指定 Type信息, 因为7.0之后只有_doc Type 当我们去创建一个

    2024年01月21日
    浏览(32)
  • (4)elasticsearch的Mapping(映射)

    映射是定义文档及其包含的字段的存储和索引方式的过程。 两种映射方式 dynamic mapping(动态映射或自动映射) expllcit mapping(静态映射或手工映射或显示映射) Mapping数据类型 Mapping参数 https://www.elastic.co/guide/en/elasticsearch/reference/7.10/removal-of-types.html Mapping 也称之为映射,定义

    2024年02月03日
    浏览(26)

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

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

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

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

二维码1

领取红包

二维码2

领红包