在solrconfig.xml中为多个EmbeddedSolrServers

时间:2018-04-18 23:27:50

标签: java solr

当我在系统中将solr从3.6.2升级到7.3时,我无法使索引锁定工作。
这是我的系统:

  1. 两个Tomcat Web Java应用程序通过EmbeddedSolrServer实例(在相同的JVM下)访问同一个solr主目录。一个应用程序是只读的,另一个应用程序将索引写入solr主目录。两者都在多线程环境中工作。
  2. 每个应用程序使用单个模式仅获取一个EmbeddedSolrServer实例。以下是生成EmbeddedSolrServer实例的代码(我省略了singleton部分):

    coreContainer = new CoreContainer(solrHomeDir);
    coreContainer.load();
    collectionName = getCollectionName();
    solrServer = new EmbeddedSolrServer(coreContainer, collectionName);`
    
  3. 当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,我还尝试了这些类型:nonesinglesimple。它们都不是很好。

    当我选择nonesingle时,两个应用程序在单线程操作时都能正常工作。当它处理多线程写入过程时,它会抛出一个索引文件NotFoundException。

    当我选择simple时,初始化后者的读取过程总是会出现异常 -

      

    SolrCore' collection1'由于init失败而无法使用:索引目录>' / var / solr-home / data / index /'核心'集合1'已被锁定。最可能的原因是另一个Solr服务器(或此服务器中的另一个solr核心)也>配置为使用此目录;其他可能的原因可能特定于> lockType:simple

    Tomcat 7 Java 1.8

    如果你能在这里提供任何意见,我真的很感激。

0 个答案:

没有答案