Проверка орфографии Solr не возвращает результаты для индексов, содержащих более 10 000 элементов

У меня есть ядро ​​Solr (версия Solr 6.4.1), где я также использую компонент проверки орфографии. Проблема в том, что пока у меня меньше 30 тысяч элементов, моя проверка орфографии работает нормально. Увеличение количества документов до 30 000 и более приводит к тому, что проверка орфографии не возвращает никаких результатов. Мне известны параметры в файле solrconfig.xml, такие как maxQueryFrequency или thresholdTokenFrequency, но их изменение не решило проблему.

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

Вот соответствующие части файла solrconfig.xml:

<searchComponent name="spellcheck" class="solr.SpellCheckComponent">
  <str name="queryAnalyzerFieldType">text_general</str>
  <lst name="spellchecker">
    <str name="name">default</str>
    <str name="field">_spellcheck_</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.1</float>
    <float name="thresholdTokenFrequency">.0000001</float>
  </lst>
</searchComponent>

и в моем обработчике запросов:

<bool name="spellcheck">true</bool>
<str name="spellcheck.dictionary">default</str>
<str name="spellcheck.extendedResults">false</str>
<str name="spellcheck.count">5</str>
<str name="spellcheck.alternativeTermCount">2</str>
<str name="spellcheck.maxResultsForSuggest">5</str>
<str name="spellcheck.collate">true</str>
<str name="spellcheck.collateExtendedResults">true</str>
<str name="spellcheck.maxCollationTries">5</str>
<str name="spellcheck.maxCollations">3</str>

_spellcheck_ — это поле CopyField (source="*"), проиндексированное как text_general, которое определяется как:

<fieldType name="text_general" class="solr.TextField" >
  <analyzer type="index">
    <charFilter class="solr.HTMLStripCharFilterFactory" />
    <tokenizer class="solr.ClassicTokenizerFactory" />
    <filter class="solr.ClassicFilterFactory" />
    <filter class="solr.ASCIIFoldingFilterFactory" />
    <filter class="solr.LowerCaseFilterFactory" />
    <filter class="solr.TrimFilterFactory" />
    <filter class="solr.HyphenatedWordsFilterFactory" />
  </analyzer>
  <analyzer type="query">
    <charFilter class="solr.HTMLStripCharFilterFactory" />
    <tokenizer class="solr.ClassicTokenizerFactory" />
    <filter class="solr.ClassicFilterFactory" />
    <filter class="solr.ASCIIFoldingFilterFactory" />
    <filter class="solr.LowerCaseFilterFactory" />
    <filter class="solr.TrimFilterFactory" />
    <filter class="solr.HyphenatedWordsFilterFactory" />
  </analyzer>
</fieldType>

Любой совет?


person picci    schedule 18.09.2017    source источник


Ответы (1)


После некоторой работы я обнаружил, что ответственным за это является параметр maxResultForSuggest. Значение по умолчанию 5 не соответствовало размеру моего набора данных, установка его на 100 в моем обработчике поиска решила мою проблему:

<str name="spellcheck.maxResultsForSuggest">100</str>

Надеюсь, это поможет кому-то.

person picci    schedule 20.09.2017