0

我已经启动了 elasticsearch.bat 并使用 Nest 完成了第一次索引

ElasticClient.Index 查询。

然后我使用了我的第一个查询

var results = ElasticClient.Search<Product>(body =>
     body.Query(query =>
     query.QueryString(qs => qs.Query(key))));

这就是我所做的一切。后来我使用 elasticsearch.bat 重新启动了 elasticsearch 控制台,现在它不断给我错误消息 NoShardAvailableException。我删除并重新下载了一个新的 elasticsearch.bat,但我一直收到同样的错误。我该如何解决?

我使用的是 1.7.1 版本,顺便说一句,我还安装了 Marvel 插件。

4

1 回答 1

1

您的问题与版本无关,因此更新不会解决问题。问题是无法将分片分配给节点。如您的电话所示,请参阅"status": "red""unassigned_shards": 8

{
    "cluster_name": "elasticsearch",
    "status": "red",
    "timed_out": false,
    "number_of_nodes": 2,
    "number_of_data_nodes": 2,
    "active_primary_shards": 8,
    "active_shards": 16,
    "relocating_shards": 0,
    "initializing_shards": 0,
    "unassigned_shards": 8,
    "delayed_unassigned_shards": 0,
    "number_of_pending_tasks": 0,
    "number_of_in_flight_fetch": 0
}

首先,您可以尝试重新分配unassigned_shards, 使用(有关此内容的更多信息,请参见 es):

curl -XPOST 'localhost:9200/_cluster/reroute' -d '{"commands": [
    {"allocate": {
        "index": "{your_index_name}", 
        "shard": 3, 
        "node": "{your_assigning_node_ide}", 
        "allow_primary": true }
    }]
}'

哪些分片未分配?要看到这一点,请使用:

curl -XGET http://localhost:9200/_cat/shards | grep UNASSIGNED | awk '{print $0}'

当您知道哪些分片造成了问题时,您可以从尝试recover使用索引开始,使用 ( indices recovery :

curl -XGET http://localhost:9200/index1,index2/_recovery

grep UNASSIGNED如果很多中的几个未分配,我发现该语句特别有用。有时删除和重新填充索引更容易(当然取决于重新填充索引的难易程度),在这种情况下(删除索引):

curl -XDELETE 'http://localhost:9200/concept_cv,concept_pl,concept_pt/'

然后重新插入您的数据。

这个问题很可能是由于集群的错误关闭,也可能是 OOM 异常。欲了解更多信息status : red

https://t37.net/how-to-fix-your-elasticsearch-cluster-stuck-in-initializing-shards-mode.html
http://elasticsearch-users.115913.n3.nabble.com/how-to -resolve-elasticsearch-status-red-td4020369.html

于 2015-08-20T07:59:58.490 回答