Solr Spellcheck区分大小写的问题

时间:2018-08-07 23:13:10

标签: java search solr lucene spell-checking

我想用Solr实现一个“ 你的意思是?”功能。我知道这需要使用 spellcheck 组件,并且为此应用了一些配置,但是看来这不能正常工作。

solrconfig.xml中的配置如下:

<requestHandler name="/select" class="solr.SearchHandler">
     <lst name="defaults">
       <bool name="spellcheck">true</bool>
       <str name="spellcheck.dictionary">en</str>
       <bool name="spellcheck.collate">true</bool>
       <str name="echoParams">explicit</str>
       <int name="rows">10</int>
       <str name="spellcheck.onlyMorePopular">true</str>
       <bool name="preferLocalShards">false</bool>
     </lst>
     <arr name="last-components">
       <str>spellcheck</str>
     </arr>
</requestHandler>

<searchComponent name="spellcheck" class="solr.SpellCheckComponent">
        <str name="queryAnalyzerFieldType">text_spell</str>
        <lst name="spellchecker">
            <str name="name">default</str>          
            <str name="classname">solr.DirectSolrSpellChecker</str>
            <str name="field">spellcheck_en</str>
        </lst>
        <lst name="spellchecker">
            <str name="name">en</str>
            <str name="classname">solr.DirectSolrSpellChecker</str>
            <str name="field">spellcheck_en</str>
        </lst>
    ...
</searchComponent>

schema.xml文件中,我有:

...
<fieldType name="text_spell" class="solr.TextField" positionIncrementGap="100">
            <analyzer>
                <tokenizer class="solr.StandardTokenizerFactory" />
                <filter class="solr.LowerCaseFilterFactory" />
            </analyzer>
</fieldType>

<fieldType name="text_spell_en" class="solr.TextField" positionIncrementGap="100">
            <analyzer>
                <tokenizer class="solr.StandardTokenizerFactory" />
                <filter class="solr.PatternReplaceFilterFactory" pattern="(['’])" replacement=" " />
                <filter class="solr.EnglishMinimalStemFilterFactory" />
                <filter class="solr.SynonymGraphFilterFactory" ignoreCase="true" synonyms="synonyms.txt"/>
                <filter class="solr.ManagedSynonymGraphFilterFactory" managed="en" />
                <filter class="solr.StopFilterFactory" ignoreCase="true" words="lang/stopwords_en.txt" />
                <filter class="solr.ManagedStopFilterFactory" managed="en" />
                <filter class="solr.TrimFilterFactory" />
                <filter class="solr.RemoveDuplicatesTokenFilterFactory" />
            </analyzer>
</fieldType>

<field name="spellcheck_en" type="text_spell_en" indexed="true" stored="true" multiValued="true" />
...

spellcheck_en中,我有一个索引为“ Hello ”的值,并且运行查询,并出现以下几点(使用spellcheck.q参数):

  1. 那个<str name="queryAnalyzerFieldType">text_spell</str>, 据我了解,它应该使用上面定义的fieldType text_spell分析传入的查询,似乎没有应用。
  2. 查询区分大小写。也就是说,如果我搜索“ 你好”,则不会返回任何更正,相反,如果我使用“ Hallo ”,它将返回“ 你好”。 / li>

特别是,如果我搜索“ 你好”或“ 你好”,我将得到与“ 您好”,无论查询条件如何。

我该怎么做?如果您可以帮助我解决此问题,将为您提供很大的帮助。 :)谢谢。

0 个答案:

没有答案
相关问题