2017-06-21 57 views
0

我想为我的搜索使用同义词。 所以我定义了一个'同义词'fieldType in schema.xmlSolr 6.5.1 - 以编程方式管理同义词

<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> 

字段类型所使用的字段:

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

现在我通过API添加同义词到Solr(6.5.1),这样我可以保持经更新的同义词网络后端,例如

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 synony.txt来实现这个目标?

但是,文本文件不会像API那样容易维护同义词我猜?

感谢阅读和问候

回答

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:ReloadaCollectionhttps://cwiki.apache.org/confluence/display/solr/Collections+API#CollectionsAPI-RELOAD:ReloadaCollection

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