Влияние Solr Spellcheck - PullRequest
       22

Влияние Solr Spellcheck

0 голосов
/ 04 февраля 2019

Для веб-сайта электронной коммерции с 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>
...