1

我的 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"/>

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

我要查找的数据是:“Nokia Lumia 610”

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

上面的“分析器”仅在索引上执行小写,而不在搜索查询上执行。

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

4

2 回答 2

3

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

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 添加到请求的输出。

于 2013-03-17T04:37:18.863 回答
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 中更改return $("#q").val(); 返回 $("#q").val().toLowerCase(); 用于 InCaseSensitive 自动完成功能。这样您就可以在使用大写字母搜索时获得结果。

于 2015-05-20T13:10:46.423 回答