elasticsearch - ElasticSearch 集群最终开始在搜索中返回错误的 hits.total
问题描述
我们有一个运行版本 5.6.16 的集群。它有约 5.7k 主分片、约 2k 索引和 28 个节点(3 个主节点、3 个协调节点和 22 个数据节点):
{
"cluster_name": "foo",
"status": "green",
"timed_out": false,
"number_of_nodes": 28,
"number_of_data_nodes": 22,
"active_primary_shards": 5778,
"active_shards": 11556,
"relocating_shards": 0,
"initializing_shards": 0,
"unassigned_shards": 0,
"delayed_unassigned_shards": 0,
"number_of_pending_tasks": 0,
"number_of_in_flight_fetch": 0,
"task_max_waiting_in_queue_millis": 0,
"active_shards_percent_as_number": 100
}
最终,无论我们在某些索引中进行什么搜索,都会返回异常高的文档数,即使没有找到结果也是如此。
例如:
curl -s 'http://localhost:9200/*/_search?q=nope:thiswillneverexist&terminate_after=1' | jq -r '.'
{
"took": 871,
"timed_out": false,
"terminated_early": false,
"num_reduce_phases": 12,
"_shards": {
"total": 5778,
"successful": 5778,
"skipped": 0,
"failed": 0
},
"hits": {
"total": 9787770,
"max_score": 2,
"hits": []
}
}
我在日志中找不到任何内容或与其他任何内容有任何关联,也找不到任何其他问题/论坛/等(也许我不知道要确切搜索什么)。
到目前为止,我们发现的唯一解决方法是重新启动集群。
有没有人见过这样的东西?关于我应该调查什么的任何想法?
解决方案
这真的很奇怪,为了调试问题,我会执行以下操作:
- 为什么内部 hits 数组为空,默认情况下,elasticsearch 会在内部 hits 数组中返回 10 个匹配的文档,这些文档将包含并且
index-name
非常document-id
有助于查看是否包含搜索词。index
doc
- 查看 elasticsearch 查询日志以了解两种情况下发生的情况(问题发生时与集群重启日志后)
- 它是间歇性的还是总是发生,在集群重新启动后多久再次出现。
推荐阅读
- javascript - 如何将其用作变量而不是字符串?
- react-native - 如何在 React Native 的地图功能中使用复选框?
- java - 在类本身中初始化泛型类型字段
- javascript - 从对象数组返回单个属性
- python - Python:我如何强制将一行熊猫数据框转换为数据框?
- elasticsearch - OpenDistro 集群中的插件日志级别
- php - phpmailer 和 fpdf 输出文件
- rubygems - 如何让 bundler 重新加载正在开发的不断变化的本地 gem?
- javascript - 无法从 JavaScript 数组中获取数据
- javascript - 在 Angular 的表单中动态创建 FormArray 字段