Как исправить исключение проверки орфографии Все контролеры должны использовать один и тот же Анализатор (Solr 5.3.1)

Все, я пытаюсь применить проверку орфографии в Solr 5.3.1.

В настоящее время Solr 5.3.1 уже включает SpellCheckComponent, который выглядит как ниже.

<searchComponent name="spellcheck" class="solr.SpellCheckComponent">
        <str name="queryAnalyzerFieldType">text_general</str>
        <lst name="spellchecker">
            <str name="name">default</str>
            <str name="field">text</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">name</str>
            <str name="combineWords">true</str>
            <str name="breakWords">true</str>
            <int name="maxChanges">10</int>
        </lst>
</searchComponent>

Но когда я пытался использовать эту функцию. как это.

http://10.2.21.38:7574/solr/gettingstarted_shard1_replica2/spell?q=%E7%94%B2&wt=json&indent=true

Я получил ответ с исключением сказал

All checkers need to use the same Analyzer

Я также попытался найти какое-то решение из интернета. и нашел некоторые решения, как показано ниже.

Solr 4.0 Как я могу изменить анализаторы проверки орфографии, чтобы они все были одинаковыми?

Проверка орфографии Solr: не может показать результат, всегда получая ту же ошибку

Поэтому я попытался следовать ответам, чтобы изменить эти поля на одно и то же.

<str name="field">text</str>
<str name="field">name</str>

в то же поле

как это.

...
<str name="field">EntryCNName</str>

....
<str name="field">EntryCNName</str>

который определен в схеме.

<field name="EntryCNName" type="text_ik" indexed="true" stored="true"/>

определение типа поля

<fieldType name="text_ik" class="solr.TextField">
    <analyzer type="index" isMaxWordLength="false" class="org.wltea.analyzer.lucene.IKAnalyzer"/>
    <analyzer type="query" isMaxWordLength="true" class="org.wltea.analyzer.lucene.IKAnalyzer"/>
</fieldType>

Но, к сожалению, все еще получил ту же ошибку. Может кто-нибудь, пожалуйста, помогите выяснить, что это означает для этой ошибки? Как это исправить?

Благодарю.

Upated

Я делаю что-то прогресс

Я нашел <str name="field">xx</str> определены в searchComponent должны быть определены в схеме. и в requestHandler ххх <str name="spellcheck.dictionary">xxx</str> должно быть из spellchecker название. например, в моем случае они default а также wordbreak,

Поэтому я меняю свою конфигурацию, как показано ниже.

Schema.xml

    <field name="id" type="string" indexed="true" stored="true" required="true" multiValued="false" />
    <field name="_version_" type="long" indexed="true" stored="true"/>
    <field name="_root_" type="string" indexed="true" stored="false"/>
    <!--<field name="Name" type="string" indexed="true" stored="true"/>-->
    <field name="EntityID" type="string" indexed="false" stored="true"/>
    <field name="EntryCNName" type="text_ik" indexed="true" stored="true"/>
    <field name="EntryEnName" type="string" indexed="true" stored="true"/>
    <field name="EntryType" type="string" indexed="false" stored="true"/>
    <field name="_text_" type="text_general" indexed="true" stored="true" multiValued="true"/>
    <field name="spell" type="textSpell" indexed="true" stored="true" multiValued="true" />
    <!--<field name="content" type="text_general" indexed="true" stored="true" required="true" />-->
    <copyField source="*" dest="_text_"/>
    <copyField source="EntryEnName" dest="spell" />



<fieldType name="textSpell" class="solr.TextField" positionIncrementGap="100" omitNorms="true">
        <analyzer type="index">
            <tokenizer class="solr.StandardTokenizerFactory" />
            <filter class="solr.StopFilterFactory" ignoreCase="true" words="stopwords.txt" />
            <filter class="solr.LowerCaseFilterFactory" />
            <filter class="solr.StandardFilterFactory" />
        </analyzer>
        <analyzer type="query">
            <tokenizer class="solr.StandardTokenizerFactory" />
            <filter class="solr.SynonymFilterFactory" synonyms="synonyms.txt" ignoreCase="true" expand="true" />
            <filter class="solr.StopFilterFactory" ignoreCase="true" words="stopwords.txt" />
            <filter class="solr.LowerCaseFilterFactory" />
            <filter class="solr.StandardFilterFactory" />
        </analyzer>
    </fieldType>

SolrConfig.xml

<lst name="spellchecker">
            <str name="name">default</str>
            <str name="classname">solr.IndexBasedSpellChecker</str>
            <str name="field">spell</str>
            <str name="spellcheckIndexDir">/path/to/my/spell/index</str>
            <str name="accuracy">0.7</str>
            <float name="thresholdTokenFrequency">.0001</float>

        </lst>

        <lst name="spellchecker">
            <str name="name">wordbreak</str>
            <str name="classname">solr.WordBreakSolrSpellChecker</str>
            <str name="field">spell</str>
            <str name="spellcheckIndexDir">/path/to/my/spell/index</str>
            <str name="combineWords">true</str>
            <str name="breakWords">true</str>
            <int name="maxChanges">10</int>
        </lst>



<requestHandler name="/spell" class="solr.SearchHandler" startup="lazy">
        <lst name="defaults">

            <str name="spellcheck.dictionary">default</str>
            <!--<str name="spellcheck.dictionary">wordbreak</str>-->
            <str name="spellcheck">on</str>
            <str name="spellcheck.extendedResults">true</str>
            <str name="spellcheck.count">10</str>
            <str name="spellcheck.alternativeTermCount">5</str>
            <str name="spellcheck.maxResultsForSuggest">5</str>
            <str name="spellcheck.collate">true</str>
            <str name="spellcheck.collateExtendedResults">true</str>
            <str name="spellcheck.maxCollationTries">10</str>
            <str name="spellcheck.maxCollations">5</str>
        </lst>
        <arr name="last-components">
            <str>spellcheck</str>
        </arr>
    </requestHandler>

Теперь ошибка исчезла. Но когда я называю URL как

http://10.2.21.38:7574/solr/gettingstarted_shard1_replica2/spell?q=lu&spellcheck=true&spellcheck.collate=true&spellcheck.build=true

Я получил пустые предложения.

<lst name="spellcheck">
<lst name="suggestions"/>
<bool name="correctlySpelled">false</bool>
<lst name="collations"/>
</lst>

И собственно. Я могу искать много результатов с ключевыми словами lung, почему Solr не предлагает Lung когда я попробовал lu? Все, что я пропустил. Спасибо.

0 ответов

Другие вопросы по тегам