zoukankan      html  css  js  c++  java
  • ES排序值相同顺序随机的问题

    ES排序值相同顺序随机的问题

    问题描述

    ES按某一列排序,当值相同出现的先后顺序随机,所以导致前端页面显示看起来怪怪的,每次排序都不一样用户会认为错误。

    解决方式

    这个玩意是因为ES查询时每个分片单独查询最后再归并,归并时是随机的,所以结果是随机的。
    解决方式参考:https://stackoverflow.com/questions/54712994/how-are-the-documents-ordered-in-elasticsearch-if-the-sort-value-for-two-documen
    通过一个额外的列进行排序保证2列加起来不会出现相同的值用以解决这个问题。但是对于这个额外的列的选择,依旧有着一定的考量。

    _doc字段的问题

    _doc是es索引中自带的id,是个整形,所以用它排序是最方便也性能最高的,但是ES的机制决定着每个分片都会有自己的索引,也就是说不同分片内的不同文档可能有相同的_doc,所以用_doc排序还是可能会出现随机的问题。例如10个分片的index中,只按_id排序会出现10个_doc为0的文档。

    使用_id排序解决

    那么_id就是唯一选择了,它是一个唯一属性可以保证每个文档不一样。

    隐患

    由于我们使用模板查询,所以加上一条按'_id'查询之后会导致每次查询都带着这个排序条件,会导致性能下降。

    分离模板解决此隐患

    为了避免性能遭受损失,应当将需要按"_id"排序的查询单独部署为一个模板,这样可以避免其他用模板进行查询时的性能损失。

  • 相关阅读:
    订单超时30分钟自动取消
    获取网络时间
    aspose.words通过域导出word文件
    Excel导入时,解析日期类型单元格的办法。
    ALTER TABLE 报1062
    mysql快速生成测试数据
    GP 源码编译安装
    Kafka 集群群起/关闭脚本
    Zookeeper 常用命令
    OGG 同步无主键表且目标表多一个隐藏字段
  • 原文地址:https://www.cnblogs.com/gaoze/p/11721199.html
Copyright © 2011-2022 走看看