一、问题描述

本文操作的ES版本是Elasticsearch7.13

设置为keyword类型的字段,插入很长的大段内容后,报字符超出异常,无法插入。

post 361323个字符的文档,报错如下:

{"error": {"root_cause": [{"type": "illegal_argument_exception","reason": "Document contains at least one immense term in field=\"mbody\" (whose UTF8 encoding is longer than the max length 32766), all of which were skipped.  Please correct the analyzer to not produce such terms.  The prefix of the first immense term is: '[60, 104, 116, 109, 108, 62, 60, 104, 101, 97, 100, 62, 13, 10, 60, 109, 101, 116, 97, 32, 104, 116, 116, 112, 45, 101, 113, 117, 105, 118]...', original message: bytes can be at most 32766 in length; got 361323"}],"type": "illegal_argument_exception","reason": "Document contains at least one immense term in field=\"mbody\" (whose UTF8 encoding is longer than the max length 32766), all of which were skipped.  Please correct the analyzer to not produce such terms.  The prefix of the first immense term is: '[60, 104, 116, 109, 108, 62, 60, 104, 101, 97, 100, 62, 13, 10, 60, 109, 101, 116, 97, 32, 104, 116, 116, 112, 45, 101, 113, 117, 105, 118]...', original message: bytes can be at most 32766 in length; got 361323","caused_by": {"type": "max_bytes_length_exceeded_exception","reason": "bytes can be at most 32766 in length; got 361323"}},"status": 400
}

二、问题原因

keyword类型的最大支持的长度为—32766个UTF-8类型的字符。

三、解决办法

可以将字段改成text类型,text对字符长度没有限制。但是keyword和text也有区别的。

text类型:支持分词、全文检索,不支持聚合、排序操作。适合大字段存储,如:文章详情、content字段等;

keyword类型:支持精确匹配,支持聚合、排序操作。适合精准字段匹配,如:url、name、title等字段。

其实一个字符串字段可以映射为text字段用于全文本搜索,也可以映射为keyword字段用于排序或聚合,设置mapping如下:

PUT my_index索引{"mappings": {"properties": {"字段名mbody": { "type":"text","fields":{"keyword":{"ignore_above":256,"type":"keyword"}}}}}}

如果是将包含字符串的文档添加到 Elasticsearch,而之前没有定义字段的映射关系,那么 Elasticsearch 会自动创建一个包含Text和Keyword类型的动态映射(dynamic mappings)。 即使它适用于动态映射,也建议在文档添加之前定义索引的映射关系,以节省空间并提高写入速度。

如:未定义mapping,直接添加文档内容,发现"mbody”的数据类型是text,“mbody.keyword"的数据类型是keyword。如下图:

{"mbody": {"type": "text","fields": {"keyword": {"type": "keyword","ignore_above": 256}}}}

四、总结:

ES5.X版本以后,字符串类型有重大变更,移除了string类型,string字段被拆分成两种新的数据类型: text和keyword。

keyword和text的区别:

text:

会分词,然后进行索引,用于全文搜索。

支持模糊、精确查询

不支持聚合

字符长度没有限制

keyword:

不进行分词,直接索引,keyword用于关键词搜索

支持模糊、精确查询

支持聚合、排序操作

最大支持的长度为32766个UTF-8个字符,也就是说term精确匹配的最大支持的长度为32766个UTF-8个字符。

Elasticsearch7.X中的字段类型keyword插入很长的大段内容后,报字符超出异常相关推荐

  1. mysql数据库中常用的类型_MySQL数据库中常用字段类型

    MySQL数据库中常用字段类型 整数型:TINYINT,SMALLINT,INT,BIGINT 小数型:FLOAT,DOUBLE,DECIMAL(M,D) 字符型:CHAR,VARCHAR 日期型:D ...

  2. php 查询datetime,急急PHP,数据库中createtime字段类型为datetime,怎样根据这个查询一段时间内的数据...

    数据库中createtime字段类型为datetime,是年月日时分秒,怎样把他转换成时间戳?数据很多,一条好转换,可是那么多怎么办? 回复讨论(解决方案) select unix_timestamp ...

  3. mysql中的字段类型

    Mysql中的字段类型 MySQL支持大量的列类型,它可以被分为3类:数字类型.日期和时间类型以及字符串(字符)类型.本节首先给出可用类型的一个概述,并且总结每个列类型的存储需求,然后提供每个类中的类 ...

  4. mysql join 索引 无效_ORACLE MYSQL中join 字段类型不同索引失效的情况-阿里云开发者社区...

    ORACLE MYSQL中join 字段类型不同索引失效的情况 重庆八怪 2016-12-29 780浏览量 简介: 关于JOIN使用不同类型的字段类型,数据库可能进行隐士转换,MYSQL ORACL ...

  5. mysql中数据库字段类型详解

    mysql中数据库字段类型详解 1,blob字段 mysql中blob是一个二进制大型对象,是一个可以储存大量数据的容器,它能容纳不同大小的数据. mysql中blob的四种类型除了存储数据的大小有区 ...

  6. Elasticsearch中flattened字段类型

    为了优化索引性能,需要统计索引的字段数量. Elasticsearch默认索引字段不能超过1000,由index.mapping.total_fields.limit参数进行设置.字段和对象映射,以及 ...

  7. mysql中数据库字段类型长度_Mysql数据库字段数据类型、长度详解

    一.数值类型 列类型 需要的存储量 TINYINT 1 字节 SMALLINT 2 个字节 MEDIUMINT 3 个字节 INT 4 个字节 INTEGER 4 个字节 BIGINT 8 个字节 F ...

  8. plsql怎么用字段查表明_如何将oracle表中的字段类型、字段注释说明、字段名一起查询出来...

    展开全部 SELECT b.column_name column_name -字段名 ,b.data_type data_type -字段类型 ,b.data_length -字段长度 ,a.comm ...

  9. oracle+资料类型不一致吗,oracle数据库中,字段类型不一致,导致查询慢

    最近一个WEBSERVICE突然变慢了,后查询发现,后台查询也非常慢(记录条数800多万),索引也有,如下语句 SELECT P.ID,P.RECORD_ID,P.KEY_NAME,P.KEY_CON ...

最新文章

  1. RxJS/Cycle.js 与 React/Vue 相比更适用于什么样的应用场景?
  2. linux中sudo如何读取标准输入作为密码,避免每次都输入密码?
  3. 2012黑龙江省赛J题-最小均值圈
  4. 给 WordPress 博客添加随机文章的3个方法
  5. CV Code | 计算机视觉开源周报 20190603期
  6. struts2学习笔记(二) 初识Struts2
  7. Linux命令第一篇
  8. jq 获取父元素html,jq获取父级元素_使用jquery获取父元素或父节点的方法
  9. 学生请假管理系统--UML画图
  10. 【全网最强C语言学习】C语言入门(工具)——库函数字典MSDN
  11. python将网页保存为图片_「保存网页为图片」如何将整个网页保存为图片? - seo实验室...
  12. UE4 HTC VIVE手柄按键对应Montion Controller 蓝图的命令
  13. 手把手教你如何连接到宝塔面板创建的FTP空间
  14. bash: No such file or directory
  15. Posix多线程编程学习笔记(二)—线程属性(3)
  16. 较全面的常见的OJ评判结果以及它们表示的意思
  17. centos7限制cpu使用_CentOS7中CPU频率调整问题
  18. 用Python实现四叉树(quad tree)
  19. LNK110:无法打开文件“opencv_world410d.lib”
  20. Web表单的十九个最佳设计实践

热门文章

  1. 论文生成器python_一本道生成器Python版,笑喷了
  2. java cast是什么意思啊_Java Class.cast()与cast操作符
  3. 如何获取exception的target异常_C# 基础知识系列- 15 异常处理篇
  4. 获取linux内核基址,Linux内核漏洞利用技术:覆写modprobe_path
  5. You think you use SharePoint but you really don't 你认为你使用了SharePoint,但是实际上不是
  6. FutureTask的简单使用
  7. 游戏思考17:寻路引擎recast和detour学习三:客户端角度学习(unity专题导航系统,阶段三完结)
  8. HDU2066:一个人的旅行(Dijkstra算法模板+多源多目的最短时间问题)
  9. 李一男加盟百度的幕后故事
  10. 程序员找 替身 面试作弊入职,结果。。