我想用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
参数):
<str name="queryAnalyzerFieldType">text_spell</str>
,
据我了解,它应该使用上面定义的fieldType text_spell
分析传入的查询,似乎没有应用。特别是,如果我搜索“ 你好”或“ 你好”,我将得到与“ 您好”,无论查询条件如何。
我该怎么做?如果您可以帮助我解决此问题,将为您提供很大的帮助。 :)谢谢。