如何从Solr删除的索引文件中恢复?

17
当我删除Solr在磁盘上的索引文件时(位于/solr/data/indexsolr/data/spellchecker中),当我尝试向Solr发出请求时,Solr会抛出一个异常:

java.lang.RuntimeException: java.io.FileNotFoundException: no segments* file found in org.apache.lucene.store.NIOFSDirectory@/…/solr/data/index:

我发现唯一的恢复方法是从其他地方将索引文件“种子”到data目录中。这似乎并不重要。一旦我这样做了,就可以运行查询重新加载模式并重新生成索引。这是否应该是它的正常工作方式?看起来应该有一种方法告诉solr从头开始重新生成这些文件。也许我只是错误地认为这些文件不是应用程序本身的一部分(名称“数据”隐含了这一点)?
4个回答

51

如果 index 目录存在但为空,Solr 会在启动时抛出异常。然而,如果您删除该目录,Solr 将在启动时重新创建它和空的片段文件。


3
这是我的问题,对其他人的提示是,我不得不 1)停止 solr,2)删除目录,3)启动 solr。当 solr 在运行时删除目录并尝试强制进行索引仍然会失败。感谢帮助 =] - Ryan Crews
这绝对是解决方案!干得好 :] - tfont

0
如果您正在使用Rails上的Sunspot Solr,Sunspot可以将所有数据从数据库重新索引到Solr中。但是,独立的Solr不知道从哪里获取数据进行重新索引。您需要备份数据。

0

问题可能出在分段文件上,如果您删除索引,则文件会被物理删除,但仍然存在于Solr的RAM或缓存中。避免直接从Solr索引文件中直接删除文件。使用删除查询来删除索引,这样会改变索引的段落,您就不必重新启动Solr了。

此致

Rajat


0

异常 FileNotFoundException 表示尝试打开指定路径名的文件失败。因此,您的索引无效或已损坏。

NIOFSDirectory 类用于读取和写入索引文件。如果目录不存在,则在指定位置创建该目录。

因此,您应该执行以下操作:

  1. 删除 index 目录或从备份中恢复数据。
  2. 重新启动服务器(或至少重新加载配置)。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接