исключение среды выполнения при индексации с помощью украинского языка - PullRequest
0 голосов
/ 30 октября 2019

Когда я добавляю документ с украинским в индекс Solr, я получаю следующую ошибку времени выполнения от Solr

java.lang.RuntimeException: java.lang.NoClassDefFoundError: morfologik / stemming / IStemmer atorg.apache.solr.servlet.HttpSolrCall.sendError (HttpSolrCall.java:593) в org.apache.solr.servlet.HttpSolrCall.call (HttpSolrCall.java:465) в org.apache.solr.servlet.ilterSolterSolrDispatchFilter.java:227) в org.apache.solr.servlet.SolrDispatchFilter.doFilter (SolrDispatchFilter.java:196) в org.eclipse.jetty.servlet.ServletHandler $ CachedChain.doFilserv.jetty.servlet.ServletHandler.doHandle (ServletHandler.java:585) в org.eclipse.jetty.server.handler.ScopedHandler.handle (ScopedHandler.java:143) в org.eclipse.jetty.security.andleHeh Security.java: 577) в org.eclipse.jetty.server.session.SessionHandler.doHandle (SessionHandler.java:223) в org.eclipse.jetty.server.handler.ContextHandler.doHandle (ContextHandler.java:1127) в org.eclipse.jetty.servlet.ServletHandler.doScope (ServletHandler.java:515) в org.eclipse.jetty.server.session.SessionHandler.doScope (SessionHandler.java:18lseg или в).jetty.server.handler.ContextHandler.doScope (ContextHandler.java:1061) в org.eclipse.jetty.server.handler.ScopedHandler.handle (ScopedHandler.java:141) в org.eclipse.jetty.server.Handler.Context.handle (ContextHandlerCollection.java:215) в org.eclipse.jetty.server.handler.HandlerCollection.handle (HandlerCollection.java:110) в org.eclipse.jetty.server.handler.HandlerWrapper.handle (HandlerWrapper.j) в org.eclipse.jetty.server.Server.handle (Server.java:497) в org.eclipse.jetty.server.HttpChannel.handle (HttpChannel.java:310) в org.eclipse.jetty.server.HttpConnection. onFillable (HttpConnection.java:257) в org.eclipse.jetty.io.AbstractConnection $ 2.run (AbstractConnection.java:540) в org.eclipse.jetty.util.thread.QueuedThreadPool.runJob (QueuedThreadPol) 35org.eclipse.jetty.util.thread.QueuedThreadPool $ 3.run (QueuedThreadPool.java:555) в java.lang.Thread.run (Thread.java:745) Причина: java.lang.NoClassDefFoundError: morfologik / stemming / IStemmer at.apache.lucene.analysis.morfologik. Морфологический фильтр(AnalyzerWrapper.java:101) в org.apache.lucene.analysis.AnalyzerWrapper.createComponents (AnalyzerWrapper.java:101) в org.apache.lucene.analysis.Analyzer.tokenStream (Analyzer.java:179) в org.ap. lucene.document.Field.tokenStream (Field.java:564) в org.apache.lucene.index.DefaultIndexingChain $ PerField.invert (DefaultIndexingChain.java:606) в org.apache.lucene.index.DefaultIndexingChainJava: 344) в org.apache.lucene.index.DefaultIndexingChain.processDocument (DefaultIndexingChain.java:300) в org.apache.lucene.index.DocumentsWriterPerThread.updateDocument (DocumentsWriterPerThread.java:232) по адресу org.apache.lucene.index.DocumentsWriter.updateDocument (DocumentsWriter.java:458) по адресу org.apache.lucene.index.IndexWriter.jd: orD.WDate.apache.solr.update.DirectUpdateHandler2.addDoc0 (DirectUpdateHandler2.java:239) при org.apache.solr.update.DirectUpdateHandler2.addDoc (DirectUpdateHandler2.java:163) при org.apache.solr.update.processor.RunUpdateProcessor.processAdd(RunUpdateProcessorFactory.java:69) в org.apache.solr.update.processor.UpdateRequestProcessor.processAdd (UpdateRequestProcessor.java:51) в org.apache.solr.update.processor.DistributedUpdateProcessor.doProor.jpg ()org.apache.solr.update.processor.DistributedUpdateProcessor.versionAdd (DistributedUpdateProcessor.java:1110) в org.apache.solr.update.processor.DistributedUpdateProcessor.processAdd (DistributedUpdateProcessor.sol.at. processor.LogUpdateProcessor.processAdd (LogUpdateProcessorFactory.java:104) в org.apache.solr.handler.loader.XMLLoader.processUpdate (XMLLoader.java:250) в org.apache.solr.handler.loader.XMLLoader. Java: 177) в org.apache.solr.handler.UpdateRequestHandler $ 1.load (UpdateRequestHandler.java:98) в org.apache.solr.handler.ContentStreamHandlerBase.handleRequestBody (ContentStreamHandlerBase.java:74) в org.apache.sol. handler.RequestHandlerBase.handleRequest (RequestHandlerBase.java:143) в org.apache.solr.core.SolrCore.execute (SolrCore.java:2064) в org.apache.solr.servlet.HttpSolrCall.execute (HttpSava) 4at org.apache.solr.servlet.HttpSolrCall.call (HttpSolrCall.java:450) ... еще 22 причины: java.lang.ClassNotFoundException: morfologik.stemming.IStemmer в java.net.URLClassLoader $ 1.run (URLClassLoader.java:366) в java.net.URLClassLoader $ 1.run (URLClassLoader.java:355) в java.security.AccessController.doPrivileged (собственный)) в java.net.URLClassLoader.findClass (URLClassLoader.java:354) в java.lang.ClassLoader.loadClass (ClassLoader.java:425) в java.net.FactoryURLClassLoader.loadClass (URLClassLoader.java:793) в Java. .ClassLoader.loadClass (ClassLoader.java:358) ... еще 50

Я использую такой код (в PHP), чтобы добавить документ

<?php
    $solrInputDocument = new SolrInputDocument();
    $solrInputDocument->addField('id', 'iscar-hk uk 1 1', 1);
    $solrInputDocument->addField('product_id_i', '1', 1);
    $solrInputDocument->addField('type_i', 1, 1);
    $solrInputDocument->addField('lang_code_s', 'uk', 1);
    $solrInputDocument->addField('system_instance_s', 'iscar-hk', 1);
    $solrInputDocument->addField('hello_tuk', 'abc', 1);
    $docs = array($solrInputDocument);
    $solrClient->getSolrClient()->addDocuments($docs);

Я используюСледующее в моей схеме для определения украинских полей:

<dynamicField name="*_tuk"  type="text_uk"    indexed="true"  stored="true" />
<fieldType name="text_uk" class="solr.TextField" positionIncrementGap="100">
    <analyzer>
        <tokenizer class="solr.StandardTokenizerFactory"/>
        <filter class="solr.StopFilterFactory" words="lang/stopwords_uk.txt"/>
        <filter class="solr.MorfologikFilterFactory" />
        <filter class="solr.LowerCaseFilterFactory" />
    </analyzer>
</fieldType>

В файле solrconfig.xml я указываю путь анализатора mofologik.

  <lib dir="/opt/solr/contrib/analysis-extras/lucene-libs" regex="lucene-analyzers-morfologik-5\.2\.1\.jar" />

Я проверил, что путь правильный.

1 Ответ

0 голосов
/ 30 октября 2019

В более новых версиях Solr вам нужно вручную запросить в вашем solrconfig.xml указание пути, где хранится MorfologikFilterFactory (обычно $ SOLR_HOME / contrib / analysis-extras / lib /).

Возможно, вам понадобится добавить следующие две строки (или аналогичные) к вашему solrconfig.xml и перезагрузить ядро.

<lib dir="${solr.install.dir:../../../..}/contrib/analysis-extras/lib" regex=".*\.jar" />
<lib dir="${solr.install.dir:../../../..}/contrib/analysis-extras/lucene-libs" regex=".*\.jar" />

См. Также https://lucene.apache.org/solr/guide/7_0/language-analysis.html#ukrainian

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...