首页 > 解决方案 > 如何在 Apache Solr 中创建包罗万象的复制字段?

问题描述

使用下的 Solr 管理界面Schema,我正在尝试创建一个搜索所有其他字段的包罗万象的复制字段。

当输入*assourcesearchas 时destination,管理界面返回:

错误处理命令

如何创建搜索所有其他字段的包罗万象的复制字段?

标签: searchsolr

解决方案


在你的schema.xml你可以有这个领域:

<field name="destination" type="text" indexed="true" stored="true" required="false"/> 
<field name="country" type="text" indexed="false" stored="true" required="false" /> 
<field name="city" type="text" indexed="false" stored="true" required="false" /> 
<field name="state" type="text" indexed="false" stored="true" required="false" />

country, city and state是源字段。

然后可以将源字段添加到目标,如下所示:

<copyField source="city" dest="destination"/> 
<copyField source="state" dest="destination"/> 
<copyField source="country" dest="destination"/> 

或者你也可以有类似的东西作为你的源字段

<field name="destination" type="text" indexed="true" stored="true" required="false"/>
<field name="country" type="text" indexed="false" stored="true" required="false"> 
<field name="city" type="text" indexed="false" stored="true" required="false" /> 
<copyField source="*_y" dest="destination"/>

您可以为您的字段应用任何合适的字段类型destination

您还可以添加字段类型text,如下所示。这是一个供您参考的示例。使用哪种字段类型以及使用什么tokenizer和使用什么filters都取决于您的要求。

<fieldType name="text" class="solr.TextField" positionIncrementGap="100">
    <analyzer type="index">
        <tokenizer class="solr.WhitespaceTokenizerFactory" />
        <filter class="solr.WordDelimiterFilterFactory" generateWordParts="1" generateNumberParts="1" catenateWords="1" catenateNumbers="1" catenateAll="0" splitOnCaseChange="1" preserveOriginal="1" />
        <filter class="solr.StopFilterFactory" ignoreCase="true" words="stopwords.txt" enablePositionIncrements="true" />
        <filter class="solr.LowerCaseFilterFactory" />              
    </analyzer>
    <analyzer type="query">
        <tokenizer class="solr.WhitespaceTokenizerFactory"/>
        <filter class="solr.WordDelimiterFilterFactory" generateWordParts="1" generateNumberParts="1" catenateWords="1" catenateNumbers="1" catenateAll="0" splitOnCaseChange="1" preserveOriginal="1" />
        <filter class="solr.StopFilterFactory" ignoreCase="true" words="stopwords.txt" enablePositionIncrements="true" />
        <filter class="solr.LowerCaseFilterFactory" />              
    </analyzer>
</fieldType>

推荐阅读