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

Итак, я новичок в solr, и, возможно, у меня так много проблем с пониманием.

То, что я пытаюсь сделать прямо сейчас, это самовнушение для моей панели поиска. Например, если вы пишете "glves", результатом должны быть "перчатки". Это внутри автозаполнения, который работает отлично прямо сейчас. Но, конечно, когда я набираю "глюс", ничего не появляется.

Прямо сейчас, когда вы пишете "перчатки", все элементы с надписью "перчатки" появляются в поле элемента. Я хочу это тоже для термина "гловес".

Это мой schema.xml:

    <field name="_version_" type="long" indexed="true" stored="true"/>
    <field name="text" type="text_general" indexed="true" stored="false" multiValued="true"/>
    <field name="oxid" type="string" indexed="true" stored="true" required="true" multiValued="false" />
    <field name="ean" type="string" indexed="true" required="false" />
    <field name="marken" type="text_en" indexed="true" stored="true" />
    <field name="item" type="text_en" indexed="true" stored="true" />
    <field name="shortdesc" type="text_de" indexed="true" stored="true" />
    <field name="price" type="float" indexed="true" stored="true" />
    <field name="picture" type="string" indexed="true" stored="true" />
    <field name="seourl" type="string" indexed="true" stored="true" />
    <field name="item_autocomplete" type="text_autocomplete" indexed="true" stored="false" />
    <field name="item_show" type="string" indexed="true" stored="false" />

Поля выше, работают хорошо для моей цели. Поле, которое мне нужно проиндексировать для поиска, это элемент.

И это то, что у меня есть на моем solrconfig.xml:

<searchComponent name="spellcheck" class="solr.SpellCheckComponent">

<str name="queryAnalyzerFieldType">item</str>

<!-- Multiple "Spell Checkers" can be declared and used by this
     component
  -->

<!-- a spellchecker built from a field of the main index -->
<lst name="spellchecker">
  <str name="name">default</str>
  <str name="field">item</str>
  <str name="classname">solr.DirectSolrSpellChecker</str>
    <str name="spellcheckIndexDir">./spellchecker</str>
  <str name="buildOnOptimize">true</str>
  <str name="buildOnCommit">true</str>
  <!-- the spellcheck distance measure used, the default is the internal levenshtein -->
  <str name="distanceMeasure">internal</str>
  <!-- minimum accuracy needed to be considered a valid spellcheck suggestion -->
  <float name="accuracy">0.5</float>
  <!-- the maximum #edits we consider when enumerating terms: can be 1 or 2 -->
  <int name="maxEdits">2</int>
  <!-- the minimum shared prefix when enumerating terms -->
  <int name="minPrefix">1</int>
  <!-- maximum number of inspections per result. -->
  <int name="maxInspections">5</int>
  <!-- minimum length of a query term to be considered for correction -->
  <int name="minQueryLength">4</int>
  <!-- maximum threshold of documents a query term can appear to be considered for correction -->
  <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">name</str>
  <str name="combineWords">true</str>
  <str name="breakWords">true</str>
  <int name="maxChanges">10</int>
</lst>

Но каждый раз я делаю запрос, чтобы решить, т.е.

http://localhost:8983/solr/spell?spellcheck=true&qt=spellchecker&spellcheck.accuracy=0.8&spellcheck.collate=true&extendedResults=true+&q=glovs

Я получаю такой же ответ:

<response><lst name="responseHeader"><int name="status">500</int><int name="QTime">2</int></lst><lst name="error"><str name="msg">All checkers need to use the same Analyzer.</str><str name="trace">java.lang.IllegalArgumentException: All checkers need to use the same Analyzer.
at org.apache.solr.spelling.ConjunctionSolrSpellChecker.addChecker(ConjunctionSolrSpellChecker.java:79)
at org.apache.solr.handler.component.SpellCheckComponent.getSpellChecker(SpellCheckComponent.java:475)
at org.apache.solr.handler.component.SpellCheckComponent.prepare(SpellCheckComponent.java:106)
at org.apache.solr.handler.component.SearchHandler.handleRequestBody(SearchHandler.java:187)
at org.apache.solr.handler.RequestHandlerBase.handleRequest(RequestHandlerBase.java:135)
at org.apache.solr.core.RequestHandlers$LazyRequestHandlerWrapper.handleRequest(RequestHandlers.java:242)
at org.apache.solr.core.SolrCore.execute(SolrCore.java:1797)
at org.apache.solr.servlet.SolrDispatchFilter.execute(SolrDispatchFilter.java:637)
at org.apache.solr.servlet.SolrDispatchFilter.doFilter(SolrDispatchFilter.java:343)
at org.apache.solr.servlet.SolrDispatchFilter.doFilter(SolrDispatchFilter.java:141)
at org.eclipse.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1307)
at org.eclipse.jetty.servlet.ServletHandler.doHandle(ServletHandler.java:453)
at org.eclipse.jetty.server.handler.ScopedHandler.handle(ScopedHandler.java:137)
at org.eclipse.jetty.security.SecurityHandler.handle(SecurityHandler.java:560)
at org.eclipse.jetty.server.session.SessionHandler.doHandle(SessionHandler.java:231)
at org.eclipse.jetty.server.handler.ContextHandler.doHandle(ContextHandler.java:1072)
at org.eclipse.jetty.servlet.ServletHandler.doScope(ServletHandler.java:382)
at org.eclipse.jetty.server.session.SessionHandler.doScope(SessionHandler.java:193)
at org.eclipse.jetty.server.handler.ContextHandler.doScope(ContextHandler.java:1006)
at org.eclipse.jetty.server.handler.ScopedHandler.handle(ScopedHandler.java:135)
at org.eclipse.jetty.server.handler.ContextHandlerCollection.handle(ContextHandlerCollection.java:255)
at org.eclipse.jetty.server.handler.HandlerCollection.handle(HandlerCollection.java:154)
at org.eclipse.jetty.server.handler.HandlerWrapper.handle(HandlerWrapper.java:116)
at org.eclipse.jetty.server.Server.handle(Server.java:365)
at org.eclipse.jetty.server.AbstractHttpConnection.handleRequest(AbstractHttpConnection.java:485)
at org.eclipse.jetty.server.BlockingHttpConnection.handleRequest(BlockingHttpConnection.java:53)
at org.eclipse.jetty.server.AbstractHttpConnection.headerComplete(AbstractHttpConnection.java:926)
at org.eclipse.jetty.server.AbstractHttpConnection$RequestHandler.headerComplete(AbstractHttpConnection.java:988)
at org.eclipse.jetty.http.HttpParser.parseNext(HttpParser.java:635)
at org.eclipse.jetty.http.HttpParser.parseAvailable(HttpParser.java:235)
at org.eclipse.jetty.server.BlockingHttpConnection.handle(BlockingHttpConnection.java:72)
at org.eclipse.jetty.server.bio.SocketConnector$ConnectorEndPoint.run(SocketConnector.java:264)
at org.eclipse.jetty.util.thread.QueuedThreadPool.runJob(QueuedThreadPool.java:608)
at org.eclipse.jetty.util.thread.QueuedThreadPool$3.run(QueuedThreadPool.java:543)
at java.lang.Thread.run(Thread.java:722)
</str><int name="code">500</int></lst></response>

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

Спасибо за ваше время.

1 ответ

Решение

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

<str name="field">item</str>А ТАКЖЕ<str name="field">name</str>

они должны быть равны. Это то, на что жалуется Солр.

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