对于一个使用Solr进行搜索的电子商务网站,我们使用的是标准拼写检查组件,它在某些情况下可以正常工作,但在某些情况下则不能。这个问题是要了解它在后台如何工作以及如何改进它。
例如: 我有一些产品的名称带有“手链”。当我搜索“ brecelet”,“ bracelat”,“ braselet”或“ brecelat”等拼写错误的术语时,会将其更正为“手镯”,而不是“ breclate”。
为什么它对上学期不起作用,我如何影响它?
更新: 拼写检查配置:
<field name="SpellContent" type="textSpell" indexed="true" stored="false" multiValued="true" required="false" />
我们在上面的字段中复制了“名称”字段。
<fieldType name="textSpell" class="solr.TextField" positionIncrementGap="100">
<analyzer type="index">
<tokenizer class="solr.StandardTokenizerFactory"/>
<filter class="solr.StopFilterFactory" ignoreCase="true" words="stopwords.txt" />
<filter class="solr.LowerCaseFilterFactory"/>
</analyzer>
<analyzer type="query">
<tokenizer class="solr.StandardTokenizerFactory"/>
<filter class="solr.StopFilterFactory" ignoreCase="true" words="stopwords.txt" />
<filter class="solr.SynonymFilterFactory" synonyms="synonyms.txt" ignoreCase="true" expand="true"/>
<filter class="solr.LowerCaseFilterFactory"/>
</analyzer>
</fieldType>
拼写检查为:
<searchComponent name="spellcheck" class="solr.SpellCheckComponent">
<str name="queryAnalyzerFieldType">text</str>
<lst name="spellchecker">
<str name="name">default</str>
<str name="field">SpellContent</str>
<str name="classname">solr.DirectSolrSpellChecker</str>
<str name="distanceMeasure">internal</str>
<float name="accuracy">0.5</float>
<int name="maxEdits">2</int>
<int name="minPrefix">1</int>
<int name="maxInspections">5</int>
<int name="minQueryLength">4</int>
<float name="maxQueryFrequency">0.01</float>
</lst>
<lst name="spellchecker">
<str name="name">wordbreak</str>
<str name="classname">solr.WordBreakSolrSpellChecker</str>
<str name="field">SpellContent</str>
<str name="combineWords">true</str>
<str name="breakWords">false</str>
<int name="maxChanges">10</int>
</lst>
</searchComponent>