Solr建议 - 如何将Solr建议定义为不区分大小写

4

我建议的拼写检查器返回区分大小写的答案。(我使用它来自动完成 - dog和Dog返回不同的短语)

我的建议如下 - 在solrconfig中定义 -

 <searchComponent class="solr.SpellCheckComponent" name="suggest">
<lst name="spellchecker">
    <str name="name">suggest</str>
    <str name="classname">org.apache.solr.spelling.suggest.Suggester</str>
    <str name="lookupImpl">org.apache.solr.spelling.suggest.tst.TSTLookup</str>
    <str name="field">suggest</str>  <!-- the indexed field to derive suggestions from -->
    <float name="threshold">0.005</float>
    <str name="buildOnCommit">true</str>
    <!--<str name="sourceLocation">american-english</str>-->
</lst>
</searchComponent>
<requestHandler class="org.apache.solr.handler.component.SearchHandler" name="/suggest">
    <lst name="defaults">
        <str name="spellcheck">true</str>
        <str name="spellcheck.dictionary">suggest</str>
        <str name="spellcheck.onlyMorePopular">true</str>
        <str name="spellcheck.count">5</str>
        <str name="spellcheck.collate">true</str>
    </lst>
    <arr name="components">
        <str>suggest</str>
    </arr>
</requestHandler>

在架构中
<field name="suggest" type="phrase_suggest" indexed="true" stored="true" required="false" multiValued="true"/>  

and

<copyField source="Name" dest="suggest"/>

and

<fieldtype name="phrase_suggest" class="solr.TextField">
  <analyzer>
    <tokenizer class="solr.KeywordTokenizerFactory"/>
    <filter class="solr.PatternReplaceFilterFactory"
            pattern="([^\p{L}\p{M}\p{N}\p{Cs}]*[\p{L}\p{M}\p{N}\p{Cs}\_]+:)|([^\p{L}\p{M}\p{N}\p{Cs}])+"
            replacement=" " replace="all"/>
    <filter class="solr.LowerCaseFilterFactory"/>
    <filter class="solr.TrimFilterFactory"/>
  </analyzer>
</fieldtype>

你在这之后重建了索引吗?我看不出有什么问题。 - Maurizio In denmark
谢谢。重建是指重新启动Solr,进行完整的导入和提交吗?是的。已经做了。 - Bick
如果它不起作用,那么可能是您的令牌或查询没有被转换为小写。您能否检查它们并查看lowerCaseFilterFactory是否起作用? - Maurizio In denmark
这是一个建议请求(基于拼写检查器)。调试似乎不起作用(即http://127.0.0.1:8983/solr/vault/suggest?q=c&wt=xml&indent=true&debugQuery=true)。 - Bick
1
那么我建议您将分析器拆分为“查询”和“索引”,并开始剥离不必要的部分,直到找到问题所在。仅从LowerCaseFilterFactory(和显然的KeywordTokenizerFactory)开始,并删除所有其他过滤器。 - Maurizio In denmark
显示剩余2条评论
3个回答

0
实际上,正确的配置参数是“queryAnalyzerFieldType”,它必须放在列表元素之外,如下所示:
<searchComponent class="solr.SpellCheckComponent" name="suggest">
    <lst name="spellchecker">
        <str name="name">suggest</str>
        <str name="classname">org.apache.solr.spelling.suggest.Suggester</str>
        <str name="lookupImpl">org.apache.solr.spelling.suggest.tst.TSTLookup</str>
        <str name="field">suggest</str>  <!-- the indexed field to derive suggestions from -->
        <float name="threshold">0.005</float>
        <str name="buildOnCommit">true</str>

    </lst>
    <!-- Make it case-insensitive -->
    <str name="queryAnalyzerFieldType">text_general</str>
</searchComponent>

这适用于拼写纠正和建议。


0
为了使其正常工作,您需要在solrconfig.xml中的搜索组件声明中添加字段类型。 在这种情况下,“phrase_suggestion”匹配到您在schema.xml中创建并声明了lowercasefilterfactory的任何字段类型。
<searchComponent class="solr.SpellCheckComponent" name="suggest">
    <lst name="spellchecker">
        <str name="name">suggest</str>
        <str name="classname">org.apache.solr.spelling.suggest.Suggester</str>
        <str name="lookupImpl">org.apache.solr.spelling.suggest.tst.TSTLookup</str>
        <str name="field">suggest</str>  <!-- the indexed field to derive suggestions from -->
        <float name="threshold">0.005</float>
        <str name="buildOnCommit">true</str>

        <!-- THIS IS THE LINE TO ADD -->
        <str name="suggestAnalyzerFieldType">phrase_suggest</str>

    </lst>
</searchComponent>

0
尝试更改添加到fieldType中的过滤器工厂的顺序。此外,将LowerCaseFilterFactory放在列表的顶部。
Shishir

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接