首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >部分模式共享-有可能吗?

部分模式共享-有可能吗?
EN

Stack Overflow用户
提问于 2014-04-29 12:18:00
回答 1查看 251关注 0票数 1

我们有大量的Solr核,它们都共享相同的字段,但是对于某些字段类型(例如,不同的语言)有不同的定义。

例如,在下面的示例中,我有一个类型为full_texttext字段,它存在于两个不同的核心中,但我对每个核心中的text字段应用了不同的过滤器。

核心1

代码语言:javascript
复制
<fields>
    <field name="full_text" type="text" indexed="true" />
</fields>
<types>
    <fieldType name="text" class="solr.TextField">
         <analyzer type="index">
             <tokenizer class="solr.StandardTokenizerFactory" />
             <filter class="solr.SnowballPorterFilterFactory" language="English"/>
         </analyzer>
    </fieldType>
</types>

核心2

代码语言:javascript
复制
<fields>
    <field name="full_text" type="text" indexed="true" />
</fields>
<types>
    <fieldType name="text" class="solr.TextField">
         <analyzer type="index">
             <tokenizer class="solr.StandardTokenizerFactory" />
             <filter class="solr.SnowballPorterFilterFactory" language="Portuguese"/>
         </analyzer>
    </fieldType>
</types>

由于我们有20+核,维护和更新字段集是困难的。

是否有任何方法从某个父类继承字段并覆盖(或应用某种类型的转换)字段类型定义?到目前为止,我的搜索没有发现任何结果。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2014-04-30 08:15:17

1.提取常见字段类型

你可以在这件事上使用XInclude。您需要将字段类型写入自己的XML文件,然后将该文件包含在这几个schema.xml文件中。

Paige回答了类似的问题如何从Solr schema.xml中包含另一个XML文件?

代码语言:javascript
复制
<?xml version="1.0" encoding="UTF-8" ?>
<schema name="foo" version="1.5">
  <fields>
    <field name="full_text" type="text" indexed="true" />
  </fields>
  <xi:include href="/path/to/field_types.xml" xmlns:xi="http://www.w3.org/2001/XInclude"/>
</schema>

然后,在您的新field_types.xml中,您将具有类型定义

代码语言:javascript
复制
<types>
    <fieldType name="text" class="solr.TextField">
         <analyzer type="index">
             <tokenizer class="solr.StandardTokenizerFactory" />
             <filter class="solr.SnowballPorterFilterFactory" language="Portuguese"/>
         </analyzer>
    </fieldType>
</types>

您将需要Solr 4.X或5.X,因为这是用SOLR-3087修复的。

2.使用core.properties定义变量部分

从您的示例中可以看到,每个核心似乎都有其设计的语言。您可以将这种语言放入core.properties. --这是驻留在每个核心中的属性文件,在遵循Solr4.4引入的新的核心配置方法之后。

在该core.properties中,您可以引入新的属性,例如,名为typeLanguage的属性

代码语言:javascript
复制
name=core-1
loadOnStartup=false
typeLanguage=English

然后,可以使用${ xxx }表示法(如language="${typeLanguage}" )将此属性用作先前定义的字段类型中的参数。

代码语言:javascript
复制
<fieldType name="text" class="solr.TextField">
     <analyzer type="index">
         <tokenizer class="solr.StandardTokenizerFactory" />
         <filter class="solr.SnowballPorterFilterFactory" language="${typeLanguage}" />
     </analyzer>
</fieldType>
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/23364440

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档