有没有办法在不重新启动 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&core=core-name
RELOAD 操作从现有的已注册 Solr 核心的配置中加载新核心。在新核心初始化时,现有核心将继续处理请求。当新的 Solr 内核准备就绪时,它会接管并卸载旧的内核。
【讨论】:
以上是关于有没有办法在不重新启动 Solr 服务器的情况下动态更新同义词文件?的主要内容,如果未能解决你的问题,请参考以下文章
有没有办法在不重新启动终端的情况下通过 bash_profile “资源”? [复制]
有没有办法在不重新启动应用程序的情况下使 NSBundle 本地化缓存失效? [iOS]
有没有办法在不重新启动调试器的情况下评估nodejs中的promise?