8

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

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

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

4

2 回答 2

8

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

map = loadSolrSynonyms(loader, true, analyzer);

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

为了在文件更改时重新加载文件,您可以使用每 X 次唤醒的看门狗线程并检查 sysnonim 文件是否已更改,或者您可以使用某些文件监视程序在文件更改时获取通知。

于 2012-07-19T07:35:33.920 回答
3

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

于 2017-11-21T16:38:01.867 回答