我按照这篇文章上的说明进行操作:http://javaskeleton.blogspot.de/2011/07/adding-solr-to-existing-web-application.html

当我尝试执行此代码时:

File home = new File(System.getProperty("solr.solr.home"));
CoreContainer container = new CoreContainer(home.getPath());
container.load();
EmbeddedSolrServer server = new EmbeddedSolrServer(container, "collection1");


我遇到以下错误:


  org.apache.lucene.store.LockObtainFailedException:锁定获取定时
  出:
  NativeFSLock @ C:\ solr-4.6.0 \ example \ solr \ collection1 \ data \ index \ write.lock


经调查,在加载CoreContainer时会发出错误。它尝试将文件锁定在显然已锁定的索引中。

进一步的调查显示,SolrRequestFilter(由Jetty初始化的那个)也实例化了一个CoreContainer,我猜测他是犯罪者。当我从web.xml中删除SolrRequestFilter定义时,我能够成功实例化CoreContainer和EmbeddedServer。

我正在寻找有关如何解决该问题的见解,因为它似乎应该可以工作。

最佳答案

您必须找到锁定此索引的人。

另外,有几种方法可能会有所帮助:


自从启动嵌入式Solr以来,您需要确定Solr现在不在运行(我敢保证,这是引起此问题的99%)
您可以手动删除此锁定文件

10-08 18:50