【问题标题】:Is there a way to dynamically update a synonym file without restarting Solr server?有没有办法在不重新启动 Solr 服务器的情况下动态更新同义词文件?
【发布时间】:2012-07-18 08:00:57
【问题描述】:

我们知道 conf 目录中有一个 synonym.txt 文件,每当我发现一些新的同义​​词时,我都想更新它...

那么有没有办法在不重新启动 Solr 服务器 的情况下动态更新该文件,我的搜索结果会考虑新的同义词吗??

如果有人有任何想法,请帮助我.. 提前谢谢...

【问题讨论】:

    标签: search solr solrj synonym


    【解决方案1】:

    我认为您可以构建自己的 SynonymFilterFactory 来扩展原始版本并使用您的自定义 FSTSynonymFilterFactory 作为委托人。 你的 SynonymFilterFactory 应该扩展原来的 SlowSynonymFilterFactory 并调用:

    map = loadSolrSynonyms(loader, true, analyzer);
    

    每当您想重新加载同义词文件时。

    要在文件更改时重新加载文件,您可以使用每 X 次唤醒的看门狗线程并检查 sysnonim 文件是否已更改,或者您可以使用 file watcher 在文件更改时获取通知。

    【讨论】:

    • Shem:谢谢你的回复......你能给我举个例子如何编写自定义工厂以及如何在scheme.xml中使用它吗?给我一些链接来参考...如果你有。我是 Solr 的新手,我没有好主意。
    • 你能帮我吗:以编程方式重新加载 solr-core 服务器/重新启动服务器。我正在使用 solrj。
    • 这意味着在您使用过滤器创建 jar 后,您应该替换 web 应用程序库中的 solr jar 并重新启动 solr 服务
    【解决方案2】:

    Solr 提供 Managed Synonym Graph Filter 来使用 REST API 管理同义词(在此示例中通过 /solr/collection_name/schema/analysis/synonyms/english 端点):

    <analyzer type="index">
        <tokenizer class="solr.StandardTokenizerFactory"/>
        <filter class="solr.ManagedSynonymGraphFilterFactory" managed="english"/>
        <filter class="solr.FlattenGraphFilterFactory"/> <!-- required on index analyzers after graph filters -->
    </analyzer>
    <analyzer type="query">
        <tokenizer class="solr.StandardTokenizerFactory"/>
        <filter class="solr.ManagedSynonymGraphFilterFactory" managed="english"/>
    </analyzer>
    

    需要重新加载核心才能应用同义词更改。 Solr 也为此提供了一个 REST API CoreAdmin API Reload admin/cores?action=RELOAD&amp;core=core-name

    RELOAD 操作从现有的已注册 Solr 核心的配置中加载新核心。在新核心初始化时,现有核心将继续处理请求。当新的 Solr 内核准备就绪时,它会接管并卸载旧的内核。

    【讨论】:

      猜你喜欢
      • 2011-12-26
      • 1970-01-01
      • 2013-10-01
      • 1970-01-01
      • 1970-01-01
      • 2011-02-26
      • 1970-01-01
      • 2010-12-22
      • 1970-01-01
      相关资源
      最近更新 更多