Ядро Solr не может инициализироваться из-за write.lock в каталоге индекса проверки орфографии - PullRequest
0 голосов
/ 17 января 2019

У меня проблема с блокировкой при попытке инициализации ядра Solr:

Сбои инициализации SolrCore:

MySolrCore: org.apache.solr.common.SolrException: org.apache.solr.common.SolrException: org.apache.lucene.store.LockObtainFailedException: блокировка, удерживаемая этой виртуальной машиной: C: \ solr-6.0.1 \ сервер \ Solr \ MySolrCore \ Data \ analyzingInfixSuggesterIndexDir \ write.lock

Я пытаюсь реализовать несколько проверок правописания на этом ядре, и я получаю эту ошибку блокировки.

Некоторые интересные заметки из разных подходов:

Я попытался продлить writeLockTimeout до 30 секунд, но ничего не получилось.

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

Если я закомментирую один из компонентов и обработчиков, другой будет работать.

Если я закомментирую средства проверки орфографии, использующие AnalyzingInfixLookupFactory, то будут работать оба средства проверки орфографии, использующие WFSTLookupFactory, и оба обработчика. Однако spellcheckIndexDir не создается.

Как мне исправить проблему с блокировкой? Я думаю, что если я смогу заставить все указанные spellcheckIndexDir работать, индексы будут расположены в разных папках и блокировки не будет. Спасибо за любую помощь!

Вот мои компоненты поиска Solr и обработчики для этих двух полей.

  <searchComponent name="NameSuggest" class="solr.SpellCheckComponent">
    <lst name="spellchecker">
      <str name="name">NameFST</str>
      <str name="classname">org.apache.solr.spelling.suggest.Suggester</str>
      <str name="lookupImpl">org.apache.solr.spelling.suggest.fst.WFSTLookupFactory</str>
      <str name="field">NameFST</str>
      <int name="minQueryLength">3</int>
      <str name="buildOnCommit">true</str>
      <str name="buildOnOptimize">true</str>
      <str name="suggestAnalyzerFieldType">suggest_phrase</str>
      <str name="spellcheckIndexDir">./NameFSTSuggestIndexDir</str>
    </lst>
    <lst name="spellchecker">
      <str name="name">NameAI</str>
      <str name="classname">org.apache.solr.spelling.suggest.Suggester</str>
      <str name="lookupImpl">org.apache.solr.spelling.suggest.fst.AnalyzingInfixLookupFactory</str>
      <str name="field">NameAI</str>
      <int name="minQueryLength">3</int>
      <str name="buildOnCommit">true</str>
      <str name="buildOnOptimize">true</str>
      <str name="suggestAnalyzerFieldType">suggest_phrase</str>
      <str name="spellcheckIndexDir">./NameAISuggestIndexDir</str>
    </lst>
    <str name="queryAnalyzerFieldType">suggest_phrase</str>
  </searchComponent>
  <requestHandler class="org.apache.solr.handler.component.SearchHandler" name="/NameSuggest" startup="lazy">
    <lst name="defaults">
      <str name="spellcheck">true</str>
      <str name="spellcheck.dictionary">NameFST</str>
      <str name="spellcheck.dictionary">NameAI</str>
      <str name="spellcheck.onlyMorePopular">true</str>
      <str name="spellcheck.count">10</str>
      <str name="spellcheck.collate">false</str>
      <str name="spellcheck.extendedResults">true</str>
    </lst>
    <arr name="components">
      <str>NameSuggest</str>
    </arr>
  </requestHandler>



  <searchComponent name="DescriptionSuggest" class="solr.SpellCheckComponent">
    <lst name="spellchecker">
      <str name="name">DescriptionFST</str>
      <str name="classname">org.apache.solr.spelling.suggest.Suggester</str>
      <str name="lookupImpl">org.apache.solr.spelling.suggest.fst.WFSTLookupFactory</str>
      <str name="field">DescriptionFST</str>
      <int name="minQueryLength">3</int>
      <str name="buildOnCommit">true</str>
      <str name="buildOnOptimize">true</str>
      <str name="suggestAnalyzerFieldType">suggest_phrase</str>
      <str name="spellcheckIndexDir">./DescriptionFSTSuggestIndexDir</str>
    </lst>
    <lst name="spellchecker">
      <str name="name">DescriptionAI</str>
      <str name="classname">org.apache.solr.spelling.suggest.Suggester</str>
      <str name="lookupImpl">org.apache.solr.spelling.suggest.fst.AnalyzingInfixLookupFactory</str>
      <str name="field">DescriptionAI</str>
      <int name="minQueryLength">3</int>
      <str name="buildOnCommit">true</str>
      <str name="buildOnOptimize">true</str>
      <str name="suggestAnalyzerFieldType">suggest_phrase</str>
      <str name="spellcheckIndexDir">./DescriptionAISuggestIndexDir</str>
    </lst>
    <str name="queryAnalyzerFieldType">suggest_phrase</str>
  </searchComponent>
  <requestHandler class="org.apache.solr.handler.component.SearchHandler" name="/DescriptionSuggest" startup="lazy">
    <lst name="defaults">
      <str name="spellcheck">true</str>
      <str name="spellcheck.dictionary">DescriptionFST</str>
      <str name="spellcheck.dictionary">DescriptionAI</str>
      <str name="spellcheck.onlyMorePopular">true</str>
      <str name="spellcheck.count">10</str>
      <str name="spellcheck.collate">false</str>
      <str name="spellcheck.extendedResults">true</str>
    </lst>
    <arr name="components">
      <str>DescriptionSuggest</str>
    </arr>
  </requestHandler>

1 Ответ

0 голосов
/ 17 января 2019

Вместо spellcheckIndexDir мне нужно было использовать indexPath. Сейчас работает.

<!-- <str name="spellcheckIndexDir">./NameAISuggestIndexDir</str> -->
<str name="indexPath">./NameAISuggestIndexDir</str>
...