【问题标题】:Case insensitive seach Solr 5.5不区分大小写的搜索 Solr 5.5
【发布时间】:2016-04-05 11:34:22
【问题描述】:

我正在尝试创建一个非常简单的 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>

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

提前致谢。

【问题讨论】:

    标签: solr


    【解决方案1】:

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

    这两者的输出是不同的。

    KeywordTokenizerFactory 保持原样。它不会标记单词/文本。

    但是WhitespaceTokenizerFactory 是一个分词器,可以在空格处分割文本。

    PorterStemFilterFactory:一个规范化过程,从单词中删除常见的结尾。

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

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

    现在由您决定如何实现搜索,然后决定构建自定义fieldType 还是可以使用schema.xml 中提到的fieldType

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

    <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>
    

    <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>
    

    【讨论】:

    • 我尝试了相同但仍然不区分大小写的搜索不起作用。我正在使用托管模式而不是 schema.xml
    • 您是否在 solr 管理 UI 上进行了同样的验证?更改后您是否重新启动服务器并重新索引数据?
    猜你喜欢
    • 2015-12-10
    • 1970-01-01
    • 1970-01-01
    • 2015-10-02
    • 2012-08-17
    • 2017-02-09
    • 1970-01-01
    • 2012-12-25
    相关资源
    最近更新 更多