2013-04-05 101 views
1

我在探索elasticsearch并将其与我们当前的搜索解决方案进行比较。我使用的用例是,每次构建索引时,都必须删除当前索引并创建具有相同名称的新索引。这样所有的旧文档都会与旧索引一起被删除,新索引将会有新的数据。索引过程需要几分钟才能完成。elasticsearch索引交易

我的问题是发生了什么在此期间进入的搜索请求。弹性搜索是否使用事务并仅在事务中提交所有更改(将新索引和新索引删除)?

如果我删除索引,索引的中间过程中出现错误,会发生什么? 如果没有交易,有没有解决这种情况的解决方法?

回答

6

Elasticsearch不支持事务。当你删除一个索引时,你删除一个索引。在你创建一个新的索引之前,用户将会得到IndexMissingException异常。一旦创建新索引,他们将只能看到索引和刷新的记录(默认情况下每秒刷新一次)。从用户隐藏此

一种方式是通过使用aliases。您可以创建一个指向索引的别名。当您需要重新索引数据时,可以创建新索引,在那里索引新数据,将别名切换到新索引并删除旧索引。

+0

别名的声音我的情况再合适不过了。感谢您的回答。 – Justin 2013-04-08 16:08:34

+0

是否有java api来获取与给定别名关联的实际索引名称?我需要知道与别名关联的实际索引的名称,以便稍后放弃。 – Justin 2013-04-08 19:00:23

+0

看看它是如何在[RestGetIndices]实施(https://github.com/elasticsearch/elasticsearch/blob/master/src/main/java/org/elasticsearch/rest/action/admin/indices/alias/RestGetIndicesAliasesAction .java#L66) – imotov 2013-04-08 20:03:50