
深究|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用法
03
当字符超过给定长度后,能否存入?
验证表名,对于以上mapping中设置的url,url_long,url_long_long3个字段。超过256字符的url,都可以存入。
3.1 keyword类型,普通长度验证
插入url长度为:1705个字符,如下所示:
url参考地址:http://t.cn/zH6FHG7
检索:
返回结果:
结论:
1705个字符,url、url_long、url_long_long都可以存入,可以通过head插件查看结果。
但是url term检索无法检索返回结果,原因: url字段设置了"ignore_above":256,导致超出256个字符后不被索引。
3.2 对于keyword类型,临界长度验证
post 32767个字符的文档,报错如下:
post 32766个字符后,能提交成功,返回结果如下:
结论:keyword类型的最大支持的长度为——32766个UTF-8类型的字符。
也就是说term精确匹配的最大支持的长度为32766个UTF-8个字符。
04
text类型和keyword类型的存储字符数区别?
text类型:支持分词、全文检索,不支持聚合、排序操作。适合大字段存储,如:文章详情、content字段等;
keyword类型:支持精确匹配,支持聚合、排序操作。适合精准字段匹配,如:url、name、title等字段。
一般情况,text和keyword共存,设置mapping如下:
05
小结
1)ES5.X版本以后,keyword支持的最大长度为32766个UTF-8字符,text对字符长度没有限制。
2)设置ignore_above后,超过给定长度后的数据将不被索引,无法通过term精确匹配检索返回结果。
本文转载自公众号铭毅天下Elasticsearch
