Дескриптор запроса solrconfig.xml Проверка орфографии - PullRequest
6 голосов
/ 19 октября 2010

Я пытаюсь настроить проверку орфографии, согласно документации solr Но когда я тестирую, у меня нет никаких предложений. Мой код выглядит следующим образом:

 <searchComponent name="spellcheck" class="solr.SpellCheckComponent">

    <str name="queryAnalyzerFieldType">textSpell</str>

    <lst name="spellchecker">
      <str name="classname">solr.IndexBasedSpellChecker</str>
      <str name="name">default</str>
      <str name="field">name</str>
      <str name="spellcheckIndexDir">./spellchecker</str>
    </lst>
    <str name="queryAnalyzerFieldType">textSpell</str>

  </searchComponent>


 <requestHandler name="/spellcheck" class="solr.SearchHandler">
    <lst name="defaults">
      <str name="echoParams">explicit</str>
      <!-- Optional, must match spell checker's name as defined above, defaults to "default" -->
      <str name="spellcheck.dictionary">default</str>
      <!-- omp = Only More Popular -->
      <str name="spellcheck.onlyMorePopular">false</str>
      <!-- exr = Extended Results -->
      <str name="spellcheck.extendedResults">false</str>
      <!--  The number of suggestions to return -->
      <str name="spellcheck.count">1</str>
    </lst>
    <arr name="last-components">
      <str>spellcheck</str>
    </arr>
  </requestHandler>

Запрос, который я посылаю Solr:
д =% 2B% 28text% 3A% 28gasal% 29% 29 & suggestField = contentOriginal & ontologySeed = gasal & spellcheck.build = истина & spellcheck.q = gasal & проверка орфографии = истина & spellcheck.collate = истина & гл = истина & hl.snippets = 5 & hl.fl = текст & hl.fl = текст и строки = 12 & начать = 0 & Qt =% 2Fsuggestprobabilistic

Кто-нибудь знает почему? Заранее спасибо

1 Ответ

17 голосов
/ 19 октября 2010

Во-первых, не повторяйте queryAnalyzerFieldType дважды в конфигурации компонента.

Рекомендуется не использовать обработчик /spellcheck, а вместо этого связывать компонент проверки орфографии со стандартным обработчиком запросов (или dismaxесли это то, что вы используете), как это:

<requestHandler name="standard" class="solr.SearchHandler" default="true">
 <lst name="defaults">
    ...
 </lst>   
 <arr name="last-components">
    <str>spellcheck</str>
    ...         
 </arr>
</requestHandler>

Затем вы можете назвать это так:
http://localhost:8983/solr/select?q=komputer&spellcheck=true

Также не забудьте , чтобы построитьпроверка орфографии словаря перед его использованием:
http://localhost:8983/solr/select/?q=*:*&spellcheck=true&spellcheck.build=true

Вы можете принудительно создать словарь при каждой фиксации, настроив его в компоненте:

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

Наконец,убедитесь, что ваше поле name действительно является индексированным полем типа textSpell и содержит достаточно содержимого для создания хорошего словаря.В моем случае у меня есть поле с именем spellchecker, которое заполняется из пары полей моего индекса (с использованием copyField инструкций в схеме).

...