проверка орфографии - PullRequest
       3

проверка орфографии

1 голос
/ 01 ноября 2010

Я реализовал проверку орфографии solr на основе fieldType, приведенного здесь: http://wiki.apache.org/solr/SpellCheckingAnalysis Проверка орфографии должна быть сделана для имен поставщиков, где должны быть даны предложения, относящиеся к введенному поисковому запросу. Я использовал copyField для поля vendorName указанного выше типа, т.е. textSpell Я получаю странные сопоставленные результаты для некоторых моих запросов. например 1) maccys не дает мне никаких результатов, тогда как maccy дает мне желаемый результат, то есть macy's. Я сравнил анализ текста (инструмент администратора), выполненный для maccys & maccy, используя оба типа полей text & textSpell, и оба дали macy как конечный результат. Так почему же результат проверки орфографии не возвращается?

2) khols дает мне «обувь» сопоставленный результат, где в качестве правильного результата «kohls» - третье предложение после (обувь и магазины).

Флаг onlyMorePopular имеет значение false, а точность по умолчанию составляет 0,5

Заранее спасибо за любую помощь. Я немного потерян в плане дальнейшей отладки.

1 Ответ

2 голосов
/ 03 ноября 2010

Мы столкнулись с теми же проблемами, что и проверка орфографии со странными результатами, хотя у нас было много доступных данных. Я не могу помочь, как отладить это лучше, но я могу сказать вам, что мы сделали:

  1. мы используем текстовое поле как есть - без пробелов и стандартного токенизатора! Вы также можете добавить фильтр shingle, если у вас меньше данных для индексации не только «hello rabbit», но и «rabbit hello», но это взорвет индекс проверки орфографии еще больше

     <fieldType name="txtspell" class="solr.TextField" positionIncrementGap="100" omitNorms="true">
        <analyzer>
            <tokenizer class="solr.KeywordTokenizerFactory"/>
            <filter class="solr.LowerCaseFilterFactory"/>
            <filter class="solr.TrimFilterFactory" />
            <filter class="solr.PatternReplaceFilterFactory"
            pattern="[\-\.\/\(\),]" replacement=""  replace="all"/>
        <filter class="solr.StopFilterFactory" ignoreCase="true" words="spellstopwords.txt"/>                       
            <!-- we don't want duplicates for one doc -->
            <filter class="solr.RemoveDuplicatesTokenFilterFactory"/>
         </analyzer>
     </fieldType>
    
  2. если вам действительно нужна сортировка, то (если вы не используете фильтр shingle, он вам понадобится) вы можете использовать solr from trunk, где вы можете указать maxCollationTries = 1, чтобы быть уверенным, что возвращаемое исправление приведет к некоторому хиты

  3. мы используем spellcheck.accuracy = 0.7 (и onlyMorePopular = false)
...