Проблема с распределенной проверкой орфографии в Solr Cloud

Я нахожусь в процессе перехода на Solr Cloud из конфигурации ведущий-подчиненный. Версия Solr, на которую я перехожу, — 4.4. У меня есть 2 осколка с 1 репликой каждый. Я столкнулся с одной проблемой с предложением распределенного правописания. Я включил компонент проверки правописания в своем обработчике запросов. Идея состоит в том, чтобы вернуть предложение (если оно есть) как часть ответа на запрос.


<str name="spellcheck">on</str> 
   <str name="spellcheck.collate">true</str> 
   <str name="spellcheck.onlyMorePopular">false</str> 
   <str name="spellcheck.extendedResults">false</str> 
   <str name="spellcheck.count">1</str> 
   <str name="spellcheck.dictionary">default</str> 
  </lst> 
  <!-- append spellchecking to our list of components --> 
  <arr name="last-components"> 
   <str>spellcheck</str> 
  </arr>

Компонент поиска с проверкой орфографии также довольно стандартный.


<searchComponent name="spellcheck" class="solr.SpellCheckComponent">
    <str name="queryAnalyzerFieldType">spell</str>
    <!-- a spellchecker built from a field of the main index -->
    <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>
        <!-- uncomment this to require suggestions to occur in 1% of the documents
               <float name="thresholdTokenFrequency">.01</float>
      -->
    </lst>

    <!-- a spellchecker that can break or combine words.  See "/spell" handler below for usage -->
    <lst name="spellchecker">
        <str name="name">wordbreak</str>
        <str name="classname">solr.WordBreakSolrSpellChecker</str>     
        <str name="field">text</str>
        <str name="combineWords">true</str>
        <str name="breakWords">true</str>
        <int name="maxChanges">10</int>
    </lst>
</searchComponent>

Я запустил spellcheck.build=true в обоих сегментах. Теперь, если я запускаю запрос,


http://testhost.com:8983/solr/browse?q=dellll
ответ не возвращает никаких предложений. Но если я явно добавлю distrib=false , я получу предложение обратно


http://testhost.com:8983/solr/browse?q=dellll&distrib=false

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

Любой указатель на это будет оценен.

  • Спасибо

person Shamik    schedule 07.10.2013    source источник


Ответы (1)


Я нашел решение. В качестве справки для других, ищущих решение, вот что вам нужно сделать.

Чтобы подсказка по правописанию работала в распределенной среде Solr, необходимо добавить в запрос shards.qt. Он должен быть установлен на имя обработчика запросов, который вы используете. Например, если вы используете обработчик запросов /select, вам нужно использовать обработчик запросов /spell. Запрос будет выглядеть так:


http://testhost.com:8983/solr/select?q=dellll&shards.qt=/spell

Для пользовательских обработчиков запросов qt должен совпадать с обработчиком запросов.


http://testhost.com:8983/solr/customhandler?q=dellll&shards.qt=/customhandler
person Shamik    schedule 08.10.2013