为什么会出现Searchkick::ImportError - "type"=>"unavailable_shards_exception", "reason"=> "Primary Shard is not active"?

Why does Searchkick::ImportError - "type"=>"unavailable_shards_exception", "reason"=> "Primary Shard is not active" occur?

我在 Rails 5.2.2 中使用 searchkick gem 并尝试通过 rails 控制台索引用户模型。 User.reindex 返回此错误:

Searchkick::ImportError ({"type"=>"unavailable_shards_exception", "reason"=>"[users_production_20191118071025562][3] primary shard is not active Timeout: [1m], request: [BulkShardRequest [[users_production_20191118071025562][3]] containing [52] requests]"} on item with id '1')

这是我的 config/initializers/searchkick.rb 初始化文件:

url = begin
        ENV['ELASTICSEARCH_URL']
      rescue StandardError
        "localhost"
      end

Searchkick.client = Elasticsearch::Client.new(
 hosts:             ["http://#{url}"],
 retry_on_failure:  true,
 transport_options: {
   request: {
     timeout: 450
   }
 }
)

curl -XGET 的输出"localhost:9200"

  "name" : "RZdkAgz",
  "cluster_name" : "elasticsearch",
  "cluster_uuid" : "PG5iZcMnQB677DBW2jStuA",
  "version" : {
    "number" : "6.7.0",
    "build_flavor" : "default",
    "build_type" : "deb",
    "build_hash" : "8453f77",
    "build_date" : "2019-03-21T15:32:29.844721Z",
    "build_snapshot" : false,
    "lucene_version" : "7.7.0",
    "minimum_wire_compatibility_version" : "5.6.0",
    "minimum_index_compatibility_version" : "5.0.0"
  },
  "tagline" : "You Know, for Search"
}

curl -XGET 的输出"localhost:9200/_cluster/health?pretty"

  "cluster_name" : "elasticsearch",
  "status" : "yellow",
  "timed_out" : false,
  "number_of_nodes" : 1,
  "number_of_data_nodes" : 1,
  "active_primary_shards" : 0,
  "active_shards" : 0,
  "relocating_shards" : 0,
  "initializing_shards" : 0,
  "unassigned_shards" : 20,
  "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" : 0.0
}

一个原因可能是,该节点刚刚加入集群,但尚未分配任何分片。有关更多信息,请参阅此 post:Unassigned Shards