有没有办法在不重新启动 Solr 服务器的情况下动态更新同义词文件?

Posted

技术标签:

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

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

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

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

【问题讨论】:

【参考方案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 内核准备就绪时,它会接管并卸载旧的内核。

【讨论】:

以上是关于有没有办法在不重新启动 Solr 服务器的情况下动态更新同义词文件?的主要内容,如果未能解决你的问题,请参考以下文章

有没有办法在不重新启动终端的情况下通过 bash_profile “资源”? [复制]

有没有办法在不重新启动应用程序的情况下使 NSBundle 本地化缓存失效? [iOS]

有没有办法在不创建新套接字的情况下处理 CRL 更新

有没有办法在不重新启动调试器的情况下评估nodejs中的promise?

是否可以在不从原始源重新索引的情况下更改 Solr 架构中指定的分析器?

如何在不重新启动服务器的情况下停止 Jenkins 上不可阻挡的僵尸作业?