我想在我的搜索中使用同义词。 所以我在 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那样容易维护同义词吗?
感谢阅读和最好的问候
答案 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-RELOAD或https://cwiki.apache.org/confluence/display/solr/Collections+API#CollectionsAPI-RELOAD:ReloadaCollection
重新加载核心请注意,您应该在solr设置中重新加载所有核心。如果您有两个核心并且仅重新加载一个核心,则只会在一个重新加载的核心上看到更改。