有没有办法动态更新同义词文件而无需重新启动Solr服务器?

时间:2012-07-19 07:15:20

标签: search solr solrj synonym

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

那么有没有办法动态更新该文件而无需重新启动 Solr服务器,我的搜索结果是否会考虑新的同义词?

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

2 个答案:

答案 0 :(得分:7)

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

map = loadSolrSynonyms(loader, true, analyzer);

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

为了在文件发生变化时重新加载文件,您可以使用每隔X次唤醒的监视程序线程,并检查sysnonim文件是否已更改,或者您可以使用某些file watcher在文件更改时获取通知。 / p>

答案 1 :(得分:1)

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

<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核心准备就绪时,它将接管并卸载旧核心。

相关问题