Во-первых, не повторяйте 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
инструкций в схеме).