ElasticSearch 7.13.4如何通过文档序号获取指定文档?
通过分片内文档序号获取ElasticSearch文档的方法
错误中的doc[19800]是分片内的文档序号(仅在对应分片内唯一,不是全局文档ID),ElasticSearch 7.13.4没有直接通过该序号查询文档的API,但可以通过以下两种方式间接获取目标文档:
方式一:按分片内序号排序+分页定位
分片内的文档序号对应文档在分片内的存储顺序,可通过指定分片、按_shard_doc排序,结合分页定位目标文档:
- 先确定目标文档所在的分片(可通过索引分片分布信息或遍历分片尝试)
- 执行如下搜索请求:
GET myindex/_search { "query": {"match_all": {}}, "sort": [{"_shard_doc": "asc"}], "from": 19799, "size": 1, "preference": "_shards:分片编号" # 替换为实际分片号,比如_shards:0 }
这个请求会在指定分片内按存储顺序排序,跳过前19799条文档,返回第19800条。
方式二:临时调整参数获取报错文档
如果仅需临时查看该文档,可先动态修改索引设置增大index.highlight.max_analyzed_offset,执行原搜索请求拿到文档后再恢复设置:
- 更新索引设置:
PUT myindex/_settings { "index.highlight.max_analyzed_offset": 2000000 }
- 重新执行原搜索请求,此时不会报错,可直接获取目标文档的完整信息及全局文档ID
- (可选)完成查看后,将参数恢复原值:
PUT myindex/_settings { "index.highlight.max_analyzed_offset": 1000000 }
注意:分片内文档序号不具备全局唯一性,不同分片可能存在相同序号的文档,必须指定对应分片才能准确定位。
内容的提问来源于stack exchange,提问作者Kieran
相关产品推荐
相关产品推荐

