如何将搜索SOLR数据的查询转换为小写?

时间:2013-03-16 12:47:21

标签: search solr lowercase analyzer

我的scheme.xlm看起来像这样:

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

<!-- The searched field -->
<field name="product_name" type="text" indexed="true" stored="true"/>

这应该用小写索引字段,并将搜索查询转换为小写。

我想找的数据是:“诺基亚Lumia 610”

当我搜索“诺基亚”时,我得到了预期的结果但是 仅搜索“诺基亚”(大写字母N)时,没有任何结果。

以上“analyzer”仅对索引执行小写,但不对搜索查询执行。

这是一个错误吗? 如何强制SOLR索引和搜索查询为小写?

2 个答案:

答案 0 :(得分:3)

搜索查询的转换还取决于您使用的查询类型和分析器。例如,如果您向select分析器发送请求,则上述内容不会将您的搜索查询转换为小写。如果您要发送请求: -

http://url/solr/select?q=Nokia

然后上面的内容将不会转换为小写,因为您的字段类型定义中不存在选择分析器。您必须按如下方式修改代码: -

    <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>
            <analyzer type="select">
                <tokenizer class="solr.WhitespaceTokenizerFactory"/>
                <filter class="solr.LowerCaseFilterFactory"/>
            </analyzer>
    </fieldType>

如果上述方法不起作用,请发送您要发送的请求以及向请求添加debugQuery = true的输出。

答案 1 :(得分:0)

一起
<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>
            <analyzer type="select">
                <tokenizer class="solr.WhitespaceTokenizerFactory"/>
                <filter class="solr.LowerCaseFilterFactory"/>
            </analyzer>
    </fieldType>

在schema.xml中。

在head.vm中更改返回$(&#34;#q&#34;)。val(); 返回$(&#34; #q&#34;)。val()。toLowerCase(); 用于InCaseSensitive自动完成功能。 因此,如果您使用大写字母进行搜索,您就可以获得结果。