首页 > 解决方案 > 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": []
  }
}

我在日志中找不到任何内容或与其他任何内容有任何关联,也找不到任何其他问题/论坛/等(也许我不知道要确切搜索什么)。

到目前为止,我们发现的唯一解决方法是重新启动集群。

有没有人见过这样的东西?关于我应该调查什么的任何想法?

标签: elasticsearch

解决方案


这真的很奇怪,为了调试问题,我会执行以下操作:

  1. 为什么内部 hits 数组为空,默认情况下,elasticsearch 会在内部 hits 数组中返回 10 个匹配的文档,这些文档将包含并且index-name非常document-id有助于查看是否包含搜索词。indexdoc
  2. 查看 elasticsearch 查询日志以了解两种情况下发生的情况(问题发生时与集群重启日志后)
  3. 它是间歇性的还是总是发生,在集群重新启动后多久再次出现。

推荐阅读