【问题标题】:Solr 6.5.1 - programmatically manage synonymsSolr 6.5.1 - 以编程方式管理同义词
【发布时间】:2017-06-21 14:50:30
【问题描述】:

我想使用同义词进行搜索。 所以我在 schema.xml 中定义了一个“同义词”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 那样容易维护同义词吗?

感谢阅读和问候

【问题讨论】:

    标签: solr


    【解决方案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 设置中重新加载所有内核。如果您有两个核心并且只重新加载一个,那么您只会在一个重新加载的核心上看到变化。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2020-04-26
      • 1970-01-01
      • 2019-02-07
      • 1970-01-01
      • 1970-01-01
      • 2014-11-06
      • 1970-01-01
      • 2011-10-04
      相关资源
      最近更新 更多