2016-11-07 3 views
0

Я пытаюсь сделать проверку орфографии в Solr, и у меня проблема с делом. Проблема в изменении случая запроса не влияет на количество возвращенных результатов, но оно изменяет результаты проверки орфографии. Например, если я напечатаю «leave», я получаю 7 результатов документа и результаты проверки орфографии. Но если я ищу «Leave», то я до сих пор получить 7 результаты поиска документа, но теперь есть проверка орфографии следующие результаты:Фильтр нижнего регистра Solr

"spellcheck":{ 
"suggestions":[ 
    "Leave",{ 
    "numFound":3, 
    "startOffset":0, 
    "endOffset":5, 
    "origFreq":0, 
    "suggestion":[{ 
     "word":"leave", 
     "freq":7}, 
     { 
     "word":"lease", 
     "freq":4}, 
     { 
     "word":"travel", 
     "freq":2}]}], 
"correctlySpelled":true, 
"collations":[ 
    "collation",{ 
    "collationQuery":"leave", 
    "hits":7, 
    "misspellingsAndCorrections":[ 
     "Leave","leave"]}]} 

Предложив строчную «отпуск». Обратите внимание, что все равно говорит, что верно. Вот поля и типов полей от моего schema.xml:

<field name="title"   type="text_en" indexed="true" stored="true" multiValued="false" /> 
<field name="filename"  type="string" indexed="true" stored="true" multiValued="false" /> 
<field name="filext"  type="string" indexed="true" stored="true" multiValued="false" /> 
<field name="version"  type="int"  indexed="false" stored="true" multiValued="false" /> 
<field name="docSet"  type="string" indexed="true" stored="true" multiValued="false" /> 
<field name="businessArea" type="string" indexed="true" stored="true" multiValued="false" /> 
<field name="processGroup" type="string" indexed="true" stored="true" multiValued="false" /> 
<field name="applicability" type="string" indexed="true" stored="true" multiValued="true" /> 
<field name="content"  type="text_en" indexed="true" stored="true" multiValued="false" /> 
<field name="lastIndex"  type="int"  indexed="true" stored="true" multiValued="false" /> 
<field name="popularity" type="int"  indexed="true" stored="true" multiValued="false" default="1"/> 

<field name="speller" type="speller_type" indexed="true" stored="true" multiValued="true" /> 

<copyField source="*" dest="speller"/> 

<fieldType name="speller_type" class="solr.TextField" positionIncrementGap="100"> 
    <analyzer type="index"> 
    <tokenizer class="solr.StandardTokenizerFactory"/> 
    <filter class="solr.LowerCaseFilterFactory"/> 
    <filter class="solr.StopFilterFactory" 
      ignoreCase="true" 
      words="stopwords_en.txt"/> 
    </analyzer> 

    <analyzer type="query"> 
    <tokenizer class="solr.StandardTokenizerFactory"/> 
    <filter class="solr.LowerCaseFilterFactory"/> 
    <filter class="solr.StopFilterFactory" 
      ignoreCase="true" 
      words="stopwords_en.txt"/> 
    </analyzer> 
</fieldType> 

И это орфография часть моего solrconfig.xml:

<requestHandler name="/select" class="solr.SearchHandler"> 
    <lst name="defaults"> 

    ... 

    <!--**************************************************************** 
    * Spellcheck configuration 
    *****************************************************************--> 
    <str name="spellcheck">on</str> 
    <!-- Suggestions --> 
    <str name="spellcheck.count">10</str> 
    <!-- <str name="spellcheck.maxResultsForSuggest">10</str> --> 
    <str name="spellcheck.extendedResults">true</str> 
    <!-- Collations --> 
    <str name="spellcheck.collate">true</str> 
    <str name="spellcheck.maxCollationTries">5</str> 
    <str name="spellcheck.collateExtendedResults">true</str> 
    <str name="spellcheck.collateMaxCollectDocs">0</str> 

    ... 

    </lst> 

    <arr name="last-components"> 
    <str>spellcheck</str> 
    </arr> 
</requestHandler> 


<searchComponent name="spellcheck" class="solr.SpellCheckComponent"> 
    <lst name="spellchecker"> 
     <str name="classname">solr.IndexBasedSpellChecker</str> 
     <str name="spellcheckIndexDir">./spellchecker</str> 
     <str name="field">speller</str> 
     <str name="buildOnCommit">true</str> 
    </lst> 
</searchComponent> 

Если я применяю строчной фильтр к Спеллеру поле, то почему бы изменить случай во время поиска, чтобы изменить результаты проверки орфографии? Я искал решения для этого, но не могу найти ничего, что исправило бы его.

Спасибо за любую помощь.

EDIT: Я получаю ту же проблему со стоп-словами, они не применяются. Даже если «for» - это секундомер в файле stopwords.txt, и я обращаюсь к типу поля speller, если я нахожу «оставить для приложения», он предлагает «оставить форму приложения» в качестве запроса сортировки. Почему удаленные слова не удаляются?

ответ

0

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

<str name="classname">solr.IndexBasedSpellChecker</str> 
<str name="spellcheckIndexDir">./spellchecker</str> 

к этому:

<str name="classname">solr.DirectSolrSpellChecker</str> 

Не уверен, почему индекс основан один игнорировал фильтры, Мне нужно будет изучить документацию.

Смежные вопросы