ES排序踩坑2
前言
在es检索时为了实现searchAfter,需要根据指定字段排序以实现正确的滚动
实际使用中,进行检索时使用的_id作排序,因为_id天然的唯一性可以实现准确滚动。结果发现filedData过高报警。
查阅官网,建议不要直接使用_id进行排序,而是将_id写入一个单独且启用doc_values的字段作排序。
官网原文:
The _id
field is restricted from use in aggregations, sorting, and scripting. In case sorting or aggregating on the _id
field is required, it is advised to duplicate the content of the _id
field into another field that has doc_values
enabled.
原文链接:
https://www.elastic.co/guide/en/elasticsearch/reference/current/mapping-id-field.html
原理:
filedData,在搜索时动态创建使用的jvm heap。缺点:当索引的文档数上千万后很容易导致内存占用很高,甚至直接OOM。优点:速度快。适用:text
doc_values,会在写入索引时就会创建在硬盘。优点:不会大量占用内存。缺点:速度相对较慢。适用:inteter/long/fload/double/date/text
使用_id排序默认用filedData。
优化方案:
将排序字段改为其他doc_values的字段。filedData降回正常
posted on 2022-04-13 16:55 Iversonstear 阅读(1099) 评论(0) 编辑 收藏 举报