不区分大小写的搜索Solr 5.5

时间:2016-04-05 11:34:23

标签: solr

我正在尝试创建一个非常简单的solr应用程序,我将索引标题和id。我想在没有任何情况下搜索标题,我已经使用了LowerCaseFilterFactory过滤器,但有些它是如何工作的。我也希望获得搜索支持。

以下是我的架构文件。

<?xml version="1.0" encoding="UTF-8" ?>

<schema name="example" version="1.5">

   <field name="_version_" type="long" indexed="true" stored="true"/>
   <field name="_root_" type="string" indexed="true" stored="false"/>
   <field name="id" type="string" indexed="true" stored="true" required="true" multiValued="false" />

 <uniqueKey>id</uniqueKey>
 <field name="title" type="text" indexed="true" stored="true"/>
 <fieldType name="long" class="solr.TrieLongField" precisionStep="0" positionIncrementGap="0"/>
 <fieldType name="string" class="solr.StrField" sortMissingLast="true" />
<fieldType name="text" class="solr.TextField" positionIncrementGap="100">
        <analyzer type="index">
                <tokenizer class="solr.KeywordTokenizerFactory" />
                <filter class="solr.LowerCaseFilterFactory" />
                <filter class="solr.PorterStemFilterFactory"/>
        </analyzer>
        <analyzer type="query">
                <tokenizer class="solr.WhitespaceTokenizerFactory" />
                <filter class="solr.LowerCaseFilterFactory" />
        </analyzer>
</fieldType>
</schema>

任何指针都将受到高度赞赏。

提前致谢。

1 个答案:

答案 0 :(得分:2)

您使用“KeywordTokenizerFactory”进行索引,使用“WhitespaceTokenizerFactory”进行查询。

这两者的输出都不同。

KeywordTokenizerFactory保持这个词不变。它不会对单词/文本进行标记。

但是WhitespaceTokenizerFactory是一个在空格处划分文本的标记化器。

PorterStemFilterFactory:一个标准化过程,用于删除单词中的常见结尾。

Example: "riding", "rides", "horses" ==> "ride", "ride", "hors".

您可以尝试修改字段类型。

现在您的要求是,您希望如何实现搜索,然后决定构建自定义fieldType,还是可以使用fieldType中提到的schema.xml < / p>

您可以尝试使用以下类型字段作为字段标题

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

OR

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