【发布时间】:2012-07-18 08:00:57
【问题描述】:
我们知道 conf 目录中有一个 synonym.txt 文件,每当我发现一些新的同义词时,我都想更新它...
那么有没有办法在不重新启动 Solr 服务器 的情况下动态更新该文件,我的搜索结果会考虑新的同义词吗??
如果有人有任何想法,请帮助我.. 提前谢谢...
【问题讨论】:
我们知道 conf 目录中有一个 synonym.txt 文件,每当我发现一些新的同义词时,我都想更新它...
那么有没有办法在不重新启动 Solr 服务器 的情况下动态更新该文件,我的搜索结果会考虑新的同义词吗??
如果有人有任何想法,请帮助我.. 提前谢谢...
【问题讨论】:
我认为您可以构建自己的 SynonymFilterFactory 来扩展原始版本并使用您的自定义 FSTSynonymFilterFactory 作为委托人。 你的 SynonymFilterFactory 应该扩展原来的 SlowSynonymFilterFactory 并调用:
map = loadSolrSynonyms(loader, true, analyzer);
每当您想重新加载同义词文件时。
要在文件更改时重新加载文件,您可以使用每 X 次唤醒的看门狗线程并检查 sysnonim 文件是否已更改,或者您可以使用 file watcher 在文件更改时获取通知。
【讨论】:
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 内核准备就绪时,它会接管并卸载旧的内核。
【讨论】: