Для веб-сайта электронной коммерции с Solr для поиска мы используем стандартный компонент проверки орфографии, и он отлично работает в некоторых случаях, но не в других.Этот вопрос поможет понять, как он работает в фоновом режиме и как мне его улучшить.
Например: у меня есть несколько продуктов с названием "браслет".И когда я ищу слово, написанное неверно, например, «браслет» или «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>