深究|Elasticsearch单字段支持的最大字符数?
来源:互联网 发布:二手备案域名 编辑:程序博客网 时间:2024/05/17 04:49
在业务系统中,遇到过两个问题:
问题1:设置为keyword类型的字段,插入很长的大段内容后,报字符超出异常,无法插入。
问题2:检索超过ignore_above设定长度的字段后,无法返回结果。
思考:Elasticsearch单字段支持的最大字符数?
设置ignore_above之后引申的问题:
1、ignore_above的作用?
ES中用于设置超过设定字符后,不被索引或者存储。
Strings longer than the ignore_above setting will not be indexed or stored.
2、ignore_above用法:
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
3、当字符超过给定长度后,能否存入?
验证表名,对于以上mapping中设置的url,url_long,url_long_long3个字段。超过256字符的url,都可以存入。
3.1 keyword类型,普通长度验证
插入url长度为:1705个字符,如下所示:
- 1
- 2
- 3
- 4
url参考地址:
http://t.cn/zH6FHG7
检索:
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
返回结果:
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
结论:1705个字符,url、url_long、url_long_long都可以存入,可以通过head插件查看结果。
但是url term检索无法检索返回结果,原因: url字段设置了”ignore_above”:256,导致超出256个字符后不被索引。
3.2 对于keyword类型,临界长度验证
post 32767个字符的文档,报错如下:
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
post 32766个字符后,能提交成功,返回结果如下:
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
结论:keyword类型的最大支持的长度为——32766个UTF-8类型的字符。
也就是说term精确匹配的最大支持的长度为32766个UTF-8个字符。
4、引申问题:text类型和keyword类型的存储字符数区别?
text类型:支持分词、全文检索,不支持聚合、排序操作。
适合大字段存储,如:文章详情、content字段等;
keyword类型:支持精确匹配,支持聚合、排序操作。
适合精准字段匹配,如:url、name、title等字段。
一般情况,text和keyword共存,设置mapping如下:
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
5、小结
ES5.X版本以后,keyword支持的最大长度为32766个UTF-8字符,text对字符长度没有限制。
设置ignore_above后,超过给定长度后的数据将不被索引,无法通过term精确匹配检索返回结果。
参考:
https://www.elastic.co/guide/en/elasticsearch/reference/5.5/ignore-above.html
- 深究|Elasticsearch单字段支持的最大字符数?
- 深究|Elasticsearch单字段支持的最大字符数?
- 更改MYSQL 单字段存储最大空间
- jqGrid的单字段查询
- mysql单字段任意字符匹配模糊查询
- 针对多字段对单字段查询的解决方案
- 一个SQL存储过程,支持多表连接,单字段排序 仅支持SQL2005以上
- ASP.NET中单字段精确查询的实现
- 两个字符串中最大公共字符数(支持汉字)
- UITextField最大字符数和最大字节数的限制
- 显示系统支持的最大连接数
- JVM可支持的最大线程数
- JVM可支持的最大线程数
- jvm支持的最大线程数
- iOS 支持最大的并发数
- ASP。net单字段查询
- SQL2008 操作XML 单字段
- Oracle 单字段拆分成多行
- eclipse项目迁移到android studio(图文最新版)
- 设置Eclipse编译后class文件的路径
- 数据挖掘需要学习的内容
- PHP让数组中有相同值的组成新的数组
- Dubbo之——改造Dubbo,使其能够兼容Spring 4注解配置
- 深究|Elasticsearch单字段支持的最大字符数?
- thinkphp5+easywechat:微信公众号内支付
- Java中流程控制
- 月考
- MapReduce1.X与2.X的对比
- android常用地图坐标转换
- NFC源码分析之初始化流程
- 动态规划---最大子段和,最大子矩阵和,最大m子段和
- elasticsearch别的机器无法访问9200端口