当我在系统中将solr从3.6.2升级到7.3时,我无法使索引锁定工作。
这是我的系统:
每个应用程序使用单个模式仅获取一个EmbeddedSolrServer实例。以下是生成EmbeddedSolrServer实例的代码(我省略了singleton部分):
coreContainer = new CoreContainer(solrHomeDir);
coreContainer.load();
collectionName = getCollectionName();
solrServer = new EmbeddedSolrServer(coreContainer, collectionName);`
当solr为3.6.2时,lockType为native
,系统运行正常。
但是,当solr为7.3时,native
的lockType不起作用。在后一次初始化EmbeddedSolrServer的应用程序(读取进程)总是会在尝试获取solr核心(solr核心不可用)时获得一个excpeiton - java.nio.channels.OverlappingFileLockException。而另一个应用程序(写入过程)运作良好。
根据页面https://wiki.apache.org/lucene-java/AvailableLockFactories,我还尝试了这些类型:none
,single
和simple
。它们都不是很好。
当我选择none
和single
时,两个应用程序在单线程操作时都能正常工作。当它处理多线程写入过程时,它会抛出一个索引文件NotFoundException。
当我选择simple
时,初始化后者的读取过程总是会出现异常 -
SolrCore' collection1'由于init失败而无法使用:索引目录>' / var / solr-home / data / index /'核心'集合1'已被锁定。最可能的原因是另一个Solr服务器(或此服务器中的另一个solr核心)也>配置为使用此目录;其他可能的原因可能特定于> lockType:simple
Tomcat 7 Java 1.8
如果你能在这里提供任何意见,我真的很感激。