服务器重启时 Solr 文档丢失
Solr documents lost on server restart
背景:
- 我在 Google Compute Engine
上安装了 Bitnami Solr 映像
- 我有一个带有自定义架构的自定义核心
- 我用大约 100 个文档更新了核心
大约 3 周 运行 一切都很好。然后我决定重新启动服务器作为日常维护的一部分。
当我重新启动时,核心中的所有文件都消失了。核心是空的。核心配置在那里,架构配置在那里,但文档不见了。
我也查看了solr/mycore/data/index
下的文件存储区,没有多少。
我是一个 Solr 新手,我对它的使用相当简单,但我担心我可能做错了什么。
有人可以告诉我可能是什么错误吗?
更新:
我观察到重新加载核心会导致核心中的所有文档丢失。所以我想我在持久化文档方面可能做错了
更新二:
进一步阅读,我发现我在 solrconfig.xml 中的 autoCommit 参数可能设置不正确。所以我试着摆弄它。我将 maxTime
设置为 1000 毫秒并将 openSearcher
更改为 TRUE。
完成上述操作后,我尝试通过管理控制台添加一堆文档,但出现以下错误。我现在很困惑!!
auto commit error...:java.io.FileNotFoundException: /opt/bitnami/apache-solr/solr/mycore/data/index/_0.fnm (Permission denied)
at java.io.FileOutputStream.open(Native Method)
at java.io.FileOutputStream.<init>(Unknown Source)
at java.io.FileOutputStream.<init>(Unknown Source)
at org.apache.lucene.store.FSDirectory$FSIndexOutput.<init>(FSDirectory.java:389)
at org.apache.lucene.store.FSDirectory.createOutput(FSDirectory.java:282)
at org.apache.lucene.store.NRTCachingDirectory.unCache(NRTCachingDirectory.java:247)
at org.apache.lucene.store.NRTCachingDirectory.sync(NRTCachingDirectory.java:182)
at org.apache.lucene.index.IndexWriter.startCommit(IndexWriter.java:4528)
at org.apache.lucene.index.IndexWriter.prepareCommitInternal(IndexWriter.java:3001)
at org.apache.lucene.index.IndexWriter.commitInternal(IndexWriter.java:3104)
at org.apache.lucene.index.IndexWriter.commit(IndexWriter.java:3071)
at org.apache.solr.update.DirectUpdateHandler2.commit(DirectUpdateHandler2.java:582)
at org.apache.solr.update.CommitTracker.run(CommitTracker.java:216)
at java.util.concurrent.Executors$RunnableAdapter.call(Unknown Source)
at java.util.concurrent.FutureTask.run(Unknown Source)
at java.util.concurrent.ScheduledThreadPoolExecutor$ScheduledFutureTask.access1(Unknown Source)
at java.util.concurrent.ScheduledThreadPoolExecutor$ScheduledFutureTask.run(Unknown Source)
at java.util.concurrent.ThreadPoolExecutor.runWorker(Unknown Source)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(Unknown Source)
at java.lang.Thread.run(Unknown Source)
嗯,您似乎没有磁盘的写入权限。您应该检查 OS 用户 运行 是否允许您的 Solr 实例写入磁盘。请注意,我对 GCE 一无所知,只需检查一下 Google.
提供的管理控制台中是否有用于管理文件系统权限的选项
另一种选择是将索引移动到文件系统上您具有写入权限的其他位置。
确保您在 Catalina 中没有两个虚拟主机使用同一个 solr home。我发现它会在服务停止时擦除索引。
刚刚有一个类似的问题,我正在使用 Cloud,确保 zookeeper/conf/zoo.cfg 将 dataDir 设置为 temp/ 之外的内容(许多示例中都使用了这一点)。许多 linux 发行版在重新启动时删除临时文件。
背景:
- 我在 Google Compute Engine 上安装了 Bitnami Solr 映像
- 我有一个带有自定义架构的自定义核心
- 我用大约 100 个文档更新了核心
大约 3 周 运行 一切都很好。然后我决定重新启动服务器作为日常维护的一部分。
当我重新启动时,核心中的所有文件都消失了。核心是空的。核心配置在那里,架构配置在那里,但文档不见了。
我也查看了solr/mycore/data/index
下的文件存储区,没有多少。
我是一个 Solr 新手,我对它的使用相当简单,但我担心我可能做错了什么。
有人可以告诉我可能是什么错误吗?
更新:
我观察到重新加载核心会导致核心中的所有文档丢失。所以我想我在持久化文档方面可能做错了
更新二:
进一步阅读,我发现我在 solrconfig.xml 中的 autoCommit 参数可能设置不正确。所以我试着摆弄它。我将 maxTime
设置为 1000 毫秒并将 openSearcher
更改为 TRUE。
完成上述操作后,我尝试通过管理控制台添加一堆文档,但出现以下错误。我现在很困惑!!
auto commit error...:java.io.FileNotFoundException: /opt/bitnami/apache-solr/solr/mycore/data/index/_0.fnm (Permission denied)
at java.io.FileOutputStream.open(Native Method)
at java.io.FileOutputStream.<init>(Unknown Source)
at java.io.FileOutputStream.<init>(Unknown Source)
at org.apache.lucene.store.FSDirectory$FSIndexOutput.<init>(FSDirectory.java:389)
at org.apache.lucene.store.FSDirectory.createOutput(FSDirectory.java:282)
at org.apache.lucene.store.NRTCachingDirectory.unCache(NRTCachingDirectory.java:247)
at org.apache.lucene.store.NRTCachingDirectory.sync(NRTCachingDirectory.java:182)
at org.apache.lucene.index.IndexWriter.startCommit(IndexWriter.java:4528)
at org.apache.lucene.index.IndexWriter.prepareCommitInternal(IndexWriter.java:3001)
at org.apache.lucene.index.IndexWriter.commitInternal(IndexWriter.java:3104)
at org.apache.lucene.index.IndexWriter.commit(IndexWriter.java:3071)
at org.apache.solr.update.DirectUpdateHandler2.commit(DirectUpdateHandler2.java:582)
at org.apache.solr.update.CommitTracker.run(CommitTracker.java:216)
at java.util.concurrent.Executors$RunnableAdapter.call(Unknown Source)
at java.util.concurrent.FutureTask.run(Unknown Source)
at java.util.concurrent.ScheduledThreadPoolExecutor$ScheduledFutureTask.access1(Unknown Source)
at java.util.concurrent.ScheduledThreadPoolExecutor$ScheduledFutureTask.run(Unknown Source)
at java.util.concurrent.ThreadPoolExecutor.runWorker(Unknown Source)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(Unknown Source)
at java.lang.Thread.run(Unknown Source)
嗯,您似乎没有磁盘的写入权限。您应该检查 OS 用户 运行 是否允许您的 Solr 实例写入磁盘。请注意,我对 GCE 一无所知,只需检查一下 Google.
提供的管理控制台中是否有用于管理文件系统权限的选项另一种选择是将索引移动到文件系统上您具有写入权限的其他位置。
确保您在 Catalina 中没有两个虚拟主机使用同一个 solr home。我发现它会在服务停止时擦除索引。
刚刚有一个类似的问题,我正在使用 Cloud,确保 zookeeper/conf/zoo.cfg 将 dataDir 设置为 temp/ 之外的内容(许多示例中都使用了这一点)。许多 linux 发行版在重新启动时删除临时文件。