apache solr中的共享库(sharedLib)是什么?

时间:2014-01-08 20:01:46

标签: apache search web solr lucene

我想知道solr中共享库的用途是什么?特别是在处理多个内核时......有没有办法可以将多个内核中的所有常见xml放入一个配置文件中,然后覆盖特定内核中的必要标签?

感谢。

2 个答案:

答案 0 :(得分:2)

http://wiki.apache.org/solr/Solr.xml%20(supported%20through%204.x) sharedLib - 包含添加到每个核心的类路径的.jar文件的目录的路径。路径是相对于solr.home(solr.xml所在的位置)

答案 1 :(得分:0)

你知道,我在“使用solr时如何在核心之间共享lib”的经验可以很好地解释“solr中共享库的目的”。以下是我去年在codeproject上分享的内容(https://www.codeproject.com/Tips/1140498/How-to-Share-Lib-Between-Cores-When-Using-solr),希望可以提供帮助:

简介

使用solr时,您可能希望在内核之间共享lib,因为solr内核可能会使用不同的类加载器加载不同的lib(使用solrconfig.xml配置)。问题是他们不会彼此共享类变量,那么你必须浪费更多的空间并花更多的时间让分布式程序相互配合,例如分词插件加载词典。

解决此问题的步骤

  1. 通过搜索谷歌找到答案需要很长时间,因为我的关键字可能并不意味着重点。 “solr classloader不同核心”是我的关键词,关于“classloader”的问题。如果我改为“在核心之间共享”,我可能会在早些时候找到答案。

  2. 我怀疑在配置solr时我可能犯了一些错误,但没有。所以我在绝望中检查了solr源代码,发现solr加载了具有不同类加载器的内核的库。

  3. 发生意外我在https://issues.apache.org/jira/browse/SOLR-409中发现了一些条款,它们并没有解决我的问题,而是从问题主题“允许在核心之间共享可配置的类加载器共享”中找到我的关键字。我应该首先从issues.apache.org查找我的答案。

  4. 通过新关键字搜索谷歌后,我从搜索结果中找到了一些解决方案:

  5. 4.1)在创建核心之前在solr中找到一个位置 (如果你想要单身,你必须将它们加载到核心之外,使用 parent classloader - 在jetty的情况下,这意味着编写自己的码头 初始化或配置以强制共享类加载器。或找个地方 在创建核心之前,在solr内部。谷歌为montysolr看 第一种方法的例子)

    4.2)solr config XML现在可以指定一个libDir元素(与指定dataDir的方式相同)。 该元素还可以通过'shared'属性指定库是否共享。 默认情况下,shared属性为true;如果指定了libDir,则其类加载器可以共享。

    语法:

    <libDir shared='true*|false'>/path/to/shareable/dir</libDir>
    

    (来自grokbase.com/t/lucene/solr-dev/07bc9zs7bt/jira-created-solr-409-allow-configurable-class-loader-sharing-between-cores)

    我意识到solr可以提供扩展以满足我的需要的能力,它应该和我相信。

    1. 我转向apache solr官方文档以获得解决方案。当我用“共享”搜索“apache-solr-ref-guide-5.5.pdf”时,答案出现了“对于多核配置,你可以在<solr/>部分指定sharedLib ='lib'。 solr.xml并将必要的jar文件放在那里。“
    2. “shared =&gt; sharedLib =&gt; Multi-Core”,实际上我之前用pdf搜索过多核,但不是“多核”,这可能会导致正确答案。 “多核与多核”,它们是不同的!

      困难的课程可能是我在这里用英语写作经验的原因之一。

      解决方案

      1. 在solr.xml的<solr/>部分指定sharedLib ='lib'(默认SOLR_HOME / lib或您指定的相对路径)

      2. 修改你的shell脚本和cp必要的jar文件(可能放在“global”或其他地方的文件夹下)。