如何在多个内核之间共享Solr fieldType?

时间:2012-02-08 09:03:27

标签: solr

是否可以在多个核心之间共享fieldType中定义的Solr schema.xml

我在Solr中有许多内核,并发现自己重新定义fieldType仅基于内置过滤器和标记器。 e.g。

<fieldType name="exact" class="solr.TextField" positionIncrementGap="100">
    <analyzer type="index">
        <filter class="solr.LowerCaseFilterFactory"/> 
        <tokenizer class="solr.KeywordTokenizerFactory"/>
    </analyzer>
    <analyzer type="query">
        <filter class="solr.LowerCaseFilterFactory"/>
        <tokenizer class="solr.KeywordTokenizerFactory"/>
    </analyzer>
</fieldType>

我知道我可以编写自己的Field类并在内核之间共享它,但是当自定义代码只配置标准过滤器时,创建对自定义代码的依赖似乎很愚蠢。还有更好的方法吗?

请注意,与其他一些示例(配置停用词和字符转换等)相比,上面的示例很简单。

2 个答案:

答案 0 :(得分:2)

分享类似&#34;普通&#34;的字段类型可以使用XInclude在多个核心的schema.xml,solrconfig.xml中定义。

<?xml version="1.0" encoding="UTF-8" ?>
<!-- common-types.xml -->
<types>
<fieldType name="exact" class="solr.TextField" positionIncrementGap="100">
    <analyzer type="index">
        <filter class="solr.LowerCaseFilterFactory"/> 
        <tokenizer class="solr.KeywordTokenizerFactory"/>
    </analyzer>
    <analyzer type="query">
        <filter class="solr.LowerCaseFilterFactory"/>
        <tokenizer class="solr.KeywordTokenizerFactory"/>
    </analyzer>
</fieldType>
</types>

并在schema.xml中使用它,如下所示:

<schema version="1.1">
  <types>
   <!-- Other types  here -->
  </types>
  <xi:include href="file:/path/to/common-types.xml" xmlns:xi="http://www.w3.org/2001/XInclude"></xi:include>
</schema>

注意:包含的XML文件必须是单个根节点。

答案 1 :(得分:1)

我不知道在核心之间共享fieldTypes的方法。但是,如果您的核心都具有相同的模式(例如,相同的字段和fieldTypes),则可以在多个核心之间共享该模式,并且只需要在一个位置更新模式。有关设置详情,请参阅此Solr用户邮件列表帖子:Sharing Schema with multiple cores