如何检查 ElasticSearch 索引是否存在并准备就绪?

Tho*_*mas 4 elasticsearch nest

如何检查索引是否存在并且是否可以在 ElasticSearch 中使用?

我们目前通过运行选择一些文档的查询来检查“indexA”是否存在。如果查询没有返回任何命中,我们假设“indexA”不存在,并创建索引(全新安装)。问题是当服务器重新启动时,我们的应用程序启动速度比 ElasticSearch 快,并且我们得到两个重复的“indexA”,因为当 ElasticSearch 启动时,在“indexA”中搜索文件失败..(我猜索引还没有准备好)

有一种方法:https : //www.elastic.co/guide/en/elasticsearch/reference/current/indices-exists.html - 即使ES正在启动,这是否保证为“indexA”返回“true”索引还没有准备好?

或者我应该使用“status”方法,指定索引名,并检查所有分片的状态是否为“STARTED”?

或者我应该使用这个:https : //www.elastic.co/guide/en/elasticsearch/reference/current/indices-recovery.html ElasticSearch 可以进入“恢复模式”吗?这种情况什么时候发生,我们应该如何处理?

还是我应该查看“CatHealth”?.Epoc?

Rus*_*Cam 7

当你说ready 时,你的意思是准备开始搜索吗?

阅读您的问题,听起来您想知道集群的状态,您可以使用Cluster Health API

curl -XGET 'http://localhost:9200/_cluster/health?pretty=true
Run Code Online (Sandbox Code Playgroud)

您可以传递一个查询字符串参数wait_for_status=green,该参数将等待集群处于给定状态(或直到超时到期,默认情况下为 30 秒)。

根据您在问题中的评论,集群处于黄色状态,因为有 5 个未分配的分片;当使用默认配置运行时,Elasticsearch 创建 5 个主分片和 1 个副本(即每个主分片的副本分片)。由于集群中只有一个节点,副本分片将保持未分配状态,因为 Elasticsearch 不会将它们定位在包含所有主分片的同一节点上,因为这不会提供任何冗余。向集群添加另一个节点将导致 Elasticsearch 将 2 个主分片以及 3 个副本和 2 个副本重定位到新节点上,并将 2 个副本重定位到原始节点上。通过这种分布,一个节点可能会宕机,但不会丢失任何数据。添加另一个节点会将状态更改为绿色,但您将能够使用处于黄色状态的集群。

如果您打算在生产中使用此集群,我强烈建议您至少拥有 2 个节点(最好在不同的机器上),以便您至少拥有一个副本。