深究|Elasticsearch单字段支持的最大字符数?
问题1:设置为keyword类型的字段,插入很长的大段内容后,报字符超出异常,无法插入。 问题2:检索超过ignore_above设定长度的字段后,无法返回结果。
思考:Elasticsearch单字段支持的最大字符数?
本文是基于设置ignore_above之后引申的问题展开讨论与思考。
01
ignore_above的作用?
ES中用于设置超过设定字符后,不被索引或者存储。
Strings longer than the
ignore_above
setting will not be indexed or stored.
02
ignore_above用法
PUT ali_test
{
"mappings": {
"ali_type": {
"properties": {
"url": {
"type":"keyword",
"ignore_above":256
},
"url_long": {
"type":"keyword"
},
"url_long_long": {
"type":"keyword",
"ignore_above":32766
}
}
}
}
}
03
当字符超过给定长度后,能否存入?
验证表名,对于以上mapping中设置的url,url_long,url_long_long3个字段。超过256字符的url,都可以存入。
3.1 keyword类型,普通长度验证
插入url长度为:1705个字符,如下所示:
post ali_test/ali_type/1
{
"url" : "1705个字符的url"
}
url参考地址:http://t.cn/zH6FHG7
检索:
GET ali_test/ali_type/_search
{
"query": {
"term": {
"url" : "1705个字符的url"
}
}
}
返回结果:
{
"took": 1,
"timed_out": false,
"_shards": {
"total": 5,
"successful": 5,
"failed": 0
},
"hits": {
"total": 0,
"max_score": null,
"hits": []
}
}
结论:
1705个字符,url、url_long、url_long_long都可以存入,可以通过head插件查看结果。
但是url term检索无法检索返回结果,原因: url字段设置了"ignore_above":256,导致超出256个字符后不被索引。
3.2 对于keyword类型,临界长度验证
post 32767个字符的文档,报错如下:
{
"error":{
"root_cause":[
{
"type":"illegal_argument_exception",
"reason":"Document contains at least one immense term in field="url_long" (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: '[104, 116, 116, 112, 58, 47, 47, 119, 119, 119, 46, 103, 111, 111, 103, 108, 101, 46, 99, 111, 109, 47, 115, 101, 97, 114, 99, 104, 63, 104]...', original message: bytes can be at most 32766 in length; got 32767"
}
],
"caused_by":{
"type":"max_bytes_length_exceeded_exception",
"reason":"max_bytes_length_exceeded_exception: bytes can be at most 32766 in length; got 32767"
}
},
"status":400
}
post 32766个字符后,能提交成功,返回结果如下:
{
"_index": "ali_test",
"_type": "ali_type",
"_id": "2000",
"_version": 1,
"result": "created",
"_shards": {
"total": 2,
"successful": 2,
"failed": 0
},
"created": true
}
结论:keyword类型的最大支持的长度为——32766个UTF-8类型的字符。
也就是说term精确匹配的最大支持的长度为32766个UTF-8个字符。
04
text类型和keyword类型的存储字符数区别?
text类型:支持分词、全文检索,不支持聚合、排序操作。适合大字段存储,如:文章详情、content字段等;
keyword类型:支持精确匹配,支持聚合、排序操作。适合精准字段匹配,如:url、name、title等字段。
一般情况,text和keyword共存,设置mapping如下:
{
"mappings": {
"ali_type": {
"properties": {
"title_v1": {
"analyzer":"ik_max_word",
"type":"text",
"term_vector" : "with_positions_offsets",
"fields":{
"keyword":{
"ignore_above":256,
"type":"keyword"
}
}
}
}
}
}
}
05
小结
1)ES5.X版本以后,keyword支持的最大长度为32766个UTF-8字符,text对字符长度没有限制。
2)设置ignore_above后,超过给定长度后的数据将不被索引,无法通过term精确匹配检索返回结果。
参考:
http://t.cn/ROXyGes
- 从业务角度分析奇怪的数据库高负载问题 (r4笔记第35天)
- 数据结构03 线性表之链表
- Java基础-12(01)总结Scanner,String
- 通过shell绑定系统进程调优 (r4笔记第34天)
- Mybatis【入门】
- 数据结构04 链表的面试题
- 数据结构05 栈
- Mybatis【配置文件】
- Java 非线程安全的HashMap如何在多线程中使用
- Java基础-12(02)总结Scanner,String
- MySQL和Oracle对比学习之数据字典元数据(r4笔记第33天)
- Java中ArrayList与LinkedList的区别
- Mybatis【关联映射】
- Java中String、StringBuffer、StringBuilder的区别
- JavaScript 教程
- JavaScript 编辑工具
- JavaScript 与HTML
- JavaScript 与Java
- JavaScript 数据结构
- JavaScript 基本数据类型
- JavaScript 特殊数据类型
- JavaScript 运算符
- JavaScript typeof 运算符
- JavaScript 表达式
- JavaScript 类型转换
- JavaScript 基本语法
- JavaScript 注释
- Javascript 基本处理流程
- Javascript 选择结构
- Javascript if 语句
- Javascript if 语句的嵌套
- Javascript switch 语句
- Javascript 循环结构
- Javascript 循环结构实例
- Javascript 跳转语句
- Javascript 控制语句总结
- Javascript 函数介绍
- Javascript 函数的定义
- Javascript 函数调用
- Javascript 几种特殊的函数
- JavaScript 内置函数简介
- Javascript eval() 函数
- Javascript isFinite() 函数
- Javascript isNaN() 函数
- parseInt() 与 parseFloat()
- escape() 与 unescape()
- Javascript 字符串介绍
- Javascript length属性
- javascript 字符串函数
- Javascript 日期对象简介
- Javascript 日期对象用途
- Date 对象属性和方法
- Javascript 数组是什么
- Javascript 创建数组
- Javascript 数组赋值与取值
- Javascript 数组属性和方法
- 记录一次SpringBoot Autowired为null的错误
- Collection接口-常用方法
- Qt开源作品34-qwt无需插件源码
- Qt开源作品35-秘钥生成器
- Qt开源作品36-程序守护进程
- Qt开源作品37-网络中转服务器
- Qt编写安防视频监控系统27-GPU显示
- Qt编写安防视频监控系统28-摄像机点位
- Qt编写安防视频监控系统29-掉线重连
- Qt编写安防视频监控系统30-GPS运动轨迹
- Qt编写安防视频监控系统31-onvif设备搜索
- Qt编写安防视频监控系统32-onvif信息获取
- Qt编写安防视频监控系统33-onvif云台控制
- Qt编写安防视频监控系统34-onvif事件订阅
- Qt编写安防视频监控系统35-onvif抓拍图片