elasticsearch 如何检查ElasticSearch索引是否存在并准备就绪?,elasticsearch,nest,elasticsearch,Nest" /> elasticsearch 如何检查ElasticSearch索引是否存在并准备就绪?,elasticsearch,nest,elasticsearch,Nest" />

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

elasticsearch 如何检查ElasticSearch索引是否存在并准备就绪?,elasticsearch,nest,elasticsearch,Nest,如何检查索引是否存在,是否可以在ElasticSearch中使用 目前,我们通过运行一个选择一些文档的查询来检查“indexA”是否存在。如果查询没有返回任何命中,我们假设“indexA”不存在,并创建索引(新安装)。问题是,当服务器重新启动时,我们的应用程序启动速度比ElasticSearch快,我们得到两个重复的“indexA”,因为在ElasticSearch启动时,搜索“indexA”中的doucments失败。。(我想索引还没有准备好) 有一种方法:-即使ES正在启动且索引尚未准备就绪

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

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

有一种方法:-即使ES正在启动且索引尚未准备就绪,这是否保证为“indexA”返回“true”

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

或者我应该使用这个:ElasticSearch可以进入“恢复模式”吗?这是什么时候发生的,我们应该如何处理

还是我应该看看“阴极健康”。Epoc?

当你说准备好了,你的意思是准备开始搜索吗

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

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

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


如果您打算在生产中使用此群集,我强烈建议您至少有2个节点(最好是在单独的机器上),这样您至少有一个副本。

当您说准备就绪时,您的意思是准备开始搜索吗?阅读您的问题,听起来您想知道集群的状态,您可以使用
curl-XGET'http://localhost:9200/_cluster/health?pretty=true
-您可以传递一个查询字符串param
wait\u for\u status=green
,该字符串将等待集群处于给定状态(或者直到超时时间到期,默认情况下为30秒)是的,我的意思是准备开始搜索/索引。我希望我的应用程序“等待”直到ElasticSearch准备就绪。我做了一些实验,如果我们在准备就绪之前查询ES以查找文档,它只会返回找到的零个文档。您的建议听起来正确,似乎有效(尽管我们的集群只达到黄色状态)因此,我想我在启动应用程序时找到了一个解决方案,我只是等待状态为黄色或绿色,这意味着没有碎片正在初始化。请将您的评论添加为答案,我会将其标记为已回答。但如果群集开始重新分配碎片,会不会出现问题?ES在分配碎片时是否正常工作?ES是否仍在为其初始化碎片索引或为索引重新定位它们,或者当处于黄色状态时,您有未分配的碎片?我建议安装Marvel-或ElasticHQ-作为监视群集的UI。碎片在初始化(或重新定位,IIRC)时不能使用。您运行的节点和碎片有多少?
curl -XGET 'http://localhost:9200/_cluster/health?pretty=true