Solr 6.5.1 - 以编程方式管理同义词

时间:2017-06-21 14:50:30

标签: solr

我想在我的搜索中使用同义词。 所以我在 schema.xml 中定义了一个'synonyms' fieldType

<fieldType name="foo" class="solr.TextField" positionIncrementGap="100">
  <analyzer type="query">
    <tokenizer class="solr.StandardTokenizerFactory" />
    <filter class="solr.ManagedSynonymFilterFactory" managed="german" />
    <!--<filter class="solr.SynonymGraphFilterFactory" ignoreCase="true" expand="true" managed="german" />-->
    <filter class="solr.LowerCaseFilterFactory"/>
  </analyzer>
</fieldType>

fieldType 由字段

使用
<field name="test" type="foo" required="true" />

现在我通过API向Solr(6.5.1)添加同义词,像这样我可以通过Web后端保持同义词更新,例如

curl -X PUT -H 'Content-type:application/json' --data-binary '["mad","angry","insane"]}' "http://localhost:8983/solr/core/schema/analysis/synonyms/german"

这很酷,并按预期添加作品。 我可以通过以下方式看到它们:

http://localhost:8983/solr/core/schema/analysis/synonyms/german

我的问题是,这需要在它们工作之前重新编制索引,即使我使用查询时而不是索引时。

是否可以“动态”管理同义词而无需重新编制索引?

我的印象是,是的,只要我使用查询时间,但这对我不起作用,所以我猜我做错了什么?

我是否必须在API上使用synonyms.txt来实现这个目标?

但是文本文件不像API那样容易维护同义词吗?

感谢阅读和最好的问候

1 个答案:

答案 0 :(得分:1)

如文档https://cwiki.apache.org/confluence/display/solr/Managed+Resources#ManagedResources-ApplyingChanges中所述:

  

不应用通过此REST API对托管资源所做的更改   有源Solr组件,直到Solr集合(或Solr核心)   重新加载单服务器模式。

因此,您无需重新索引数据以在查询时查看新的同义词。您只需使用https://cwiki.apache.org/confluence/display/solr/CoreAdmin+API#CoreAdminAPI-RELOADhttps://cwiki.apache.org/confluence/display/solr/Collections+API#CollectionsAPI-RELOAD:ReloadaCollection

重新加载核心

请注意,您应该在solr设置中重新加载所有核心。如果您有两个核心并且仅重新加载一个核心,则只会在一个重新加载的核心上看到更改。