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