我按照这篇文章上的说明进行操作: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%)
您可以手动删除此锁定文件