【elasticsearch】ES 单分片使用 From/Size 分页遇到重复数据

561 篇文章 547 订阅 ¥79.90 ¥99.00
本文介绍了在Elasticsearch(ES)中,当单分片使用From/Size进行分页查询时可能出现重复数据的原因。主要涉及三个方面:缺少排序导致的数据不确定性,所有文档得分相同(如仅使用filter)以及存在索引更新操作。针对多分片场景,建议使用preference参数确保分页结果的一致性。
摘要由CSDN通过智能技术生成

在这里插入图片描述

1.概述

ES 单分片使用 From/Size 分页遇到重复数据

常规情况下 ES 单分片使用 From/Size 是不会遇到数据重复的,数据重复的可能原因有:

  1. 没有添加排序;
  2. 添加了按得分排序,但是查询语句全部为 filter 过滤条件(此时得分都一致);
  3. 添加了排序,但是有索引中文档的新增、修改、删除等操作。
  4. 对于多分片,推荐添加 preference 参数来实现分页结果的一致性。
  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
如果利用 `from` 和 `size` 进行分页查询,可能会出现数据不一致的情况。这是因为在 Elasticsearch 中,数据是分布式存储的,而分页查询是基于分片进行的。当一个查询跨越多个分片时,由于不同分片数据的不同,可能会导致数据不一致的情况。 解决这个问题的方法是,使用 Search After API 来进行分页查询。Search After API 可以在查询结果中保留一个游标,可以在下一次查询中使用该游标来继续查询,从而确保数据一致性。 具体的做法是,在第一次查询时,使用 `sort` 参数对结果进行排序,并记录最后一条结果的排序值(可以是 `_id` 或其他字段)。在下一次查询时,使用 `search_after` 参数来指定排序值,以继续查询下一页数据。这样就可以确保每一页的数据是连续的,不会出现重复或遗漏的情况。 以下是使用 Search After API 进行分页查询的示例代码: ``` SearchRequest searchRequest = new SearchRequest("index_name"); SearchSourceBuilder searchSourceBuilder = new SearchSourceBuilder(); searchSourceBuilder.query(QueryBuilders.matchAllQuery()); searchSourceBuilder.sort("_id", SortOrder.ASC); searchSourceBuilder.size(pageSize); if (page > 1) { // 使用 search_after 参数来指定排序值,以继续查询下一页 searchSourceBuilder.searchAfter(lastSortValues); } searchRequest.source(searchSourceBuilder); SearchResponse searchResponse = restHighLevelClient.search(searchRequest, RequestOptions.DEFAULT); SearchHits hits = searchResponse.getHits(); if (hits.getTotalHits().value > 0) { SearchHit[] searchHits = hits.getHits(); for (SearchHit hit : searchHits) { // 处理查询结果 } // 记录最后一条结果的排序值,以供下一页查询使用 lastSortValues = searchHits[searchHits.length - 1].getSortValues(); } ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

九师兄

你的鼓励是我做大写作的动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值