私はTomcat6.0.26で Solr 3.3. を使用しています。 Solrを正常にインストールでき、http:/ localhost:8084/solr/adminを使用してそのWebインターフェイスにアクセスすることもできました。
次に、dataimporthandlerを使用して、データベースのデータにインデックスを付けたいと思います。solrconfigに以下を追加しました。
<requestHandler name="/dataimport" class="org.Apache.solr.handler.dataimport.DataImport
Handler">
<lst name="defaults">
<str name="config">data-config.xml</str>
</lst>
</requestHandler>
同じディレクトリにdata-config.xmlも作成しました。
私のsolrconfigファイルにはdataimport用の次の場所があります
<lib dir="../../dist/" regex="Apache-solr-dataimporthandler-\d.*\.jar" />
そして、dataimporthandler.jarファイルが次のパスC:\ web\solr\example\lib\Apache-solr-3.3.0\distのdistフォルダーに存在することを確認しました。
しかし、http:/ localhost:8084/solr/dataimportまたはhttp:/ localhost:8084/solr/admin/dataimportと入力すると、リソースが利用できないと表示されます。 Tomcatの設定に問題があると思ったので、Tomcatを停止し、Java -jarstart.jarを使用してcmdからSolrを起動しようとしました。次のエラーが発生します。
HTTP ERROR 500
Problem accessing /solr/. Reason:
Severe errors in solr configuration.
Check your log files for more detailed information on what may be wrong.
If you want solr to continue after configuration errors, change:
<abortOnConfigurationError>false</abortOnConfigurationError>
in solr.xml
-------------------------------------------------------------
org.Apache.solr.common.SolrException: Error loading class
'org.Apache.solr.handler.dataimport.DataImportHandler'
at org.Apache.solr.core.SolrResourceLoader.findClass(SolrResourceLoader.Java:389)
at org.Apache.solr.core.SolrCore.createInstance(SolrCore.Java:423)
at org.Apache.solr.core.SolrCore.createRequestHandler(SolrCore.Java:459)
at
org.Apache.solr.core.RequestHandlers.initHandlersFromConfig(RequestHandlers.Java:157)
at org.Apache.solr.core.SolrCore.<init>(SolrCore.Java:563)
at org.Apache.solr.core.CoreContainer.create(CoreContainer.Java:463)
at org.Apache.solr.core.CoreContainer.load(CoreContainer.Java:316)
at org.Apache.solr.core.CoreContainer.load(CoreContainer.Java:207)
at
org.Apache.solr.core.CoreContainer$Initializer.initialize(CoreContainer.Java:130)
at org.Apache.solr.servlet.SolrDispatchFilter.init(SolrDispatchFilter.Java:94)
at org.mortbay.jetty.servlet.FilterHolder.doStart(FilterHolder.Java:97)
at org.mortbay.component.AbstractLifeCycle.start(AbstractLifeCycle.Java:50)
at org.mortbay.jetty.servlet.ServletHandler.initialize(ServletHandler.Java:713)
at org.mortbay.jetty.servlet.Context.startContext(Context.Java:140)
at org.mortbay.jetty.webapp.WebAppContext.startContext(WebAppContext.Java:1282)
at org.mortbay.jetty.handler.ContextHandler.doStart(ContextHandler.Java:518)
at org.mortbay.jetty.webapp.WebAppContext.doStart(WebAppContext.Java:499)
at org.mortbay.component.AbstractLifeCycle.start(AbstractLifeCycle.Java:50)
at org.mortbay.jetty.handler.HandlerCollection.doStart(HandlerCollection.Java:152)
at
org.mortbay.jetty.handler.ContextHandlerCollection.doStart
(ContextHandlerCollection.Java:156)
at org.mortbay.component.AbstractLifeCycle.start(AbstractLifeCycle.Java:50)
at org.mortbay.jetty.handler.HandlerCollection.doStart(HandlerCollection.Java:152)
at org.mortbay.component.AbstractLifeCycle.start(AbstractLifeCycle.Java:50)
at org.mortbay.jetty.handler.HandlerWrapper.doStart(HandlerWrapper.Java:130)
at org.mortbay.jetty.Server.doStart(Server.Java:224)
at org.mortbay.component.AbstractLifeCycle.start(AbstractLifeCycle.Java:50)
at org.mortbay.xml.XmlConfiguration.main(XmlConfiguration.Java:985)
at Sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at Sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source)
at Sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)
at Java.lang.reflect.Method.invoke(Unknown Source)
at org.mortbay.start.Main.invokeMain(Main.Java:194)
at org.mortbay.start.Main.start(Main.Java:534)
at org.mortbay.start.Main.start(Main.Java:441)
at org.mortbay.start.Main.main(Main.Java:119)
Caused by: Java.lang.ClassNotFoundException:
org.Apache.solr.handler.dataimport.DataImportHandler
at Java.net.URLClassLoader$1.run(Unknown Source)
at Java.security.AccessController.doPrivileged(Native Method)
at Java.net.URLClassLoader.findClass(Unknown Source)
at Java.lang.ClassLoader.loadClass(Unknown Source)
at Java.net.FactoryURLClassLoader.loadClass(Unknown Source)
at Java.lang.ClassLoader.loadClass(Unknown Source)
at Java.lang.Class.forName0(Native Method)
at Java.lang.Class.forName(Unknown Source)
at org.Apache.solr.core.SolrResourceLoader.findClass(SolrResourceLoader.Java:373)
... 34 more
私は、solr 4.1とTomcatを使用して、この問題を少し自分で調べてきました。必要なライブラリを<lib dir="../../dist/" regex="solr-dataimporthandler-.*\.jar" /> -->
に含めることができませんでした。これは、solrconfig.xmlが含まれているディレクトリから、上に2つ、下に1つあるため、正しい必要があると考えました。直接パス(私にとっては/ opt/solr/dist)を一時的にサブスクライブするまで、問題は間違ったディレクトリから開始していることに気づきました。私が必要としていたのは次のとおりです。
<lib dir="../dist/" regex="solr-dataimporthandler-.*\.jar" /> -->
したがって、これを含めるのに問題がある場合は、confディレクトリ自体ではなく、confディレクトリを含むディレクトリから開始していることを確認してください。
4.3を含むSolrのいくつかのバージョンでは、ソースからビルドするときに、dataimportハンドラーjarが最終的なwarファイルに含まれていないようです。
ファイル/solr/webapp/build.xmlを変更することにより、これに対する非常に簡単な修正があります。
<lib dir="${dist}" excludes="${exclude.from.war},${common.classpath.excludes}">
<include name="Apache-solr-dataimporthandler-${version}.jar" />
保存して終了。
ここで、ビルドするときに、次のことを行います。
Dataimporthandler jarがWARファイルにあることを確認するには、それを解凍し、WEB-INF/libディレクトリー内のjarの中から探します。
これのいくつかのバリエーションは、おそらく以前のバージョンでも機能します。
探しているjarファイル(少なくとも3.5では)は./distsフォルダーの下にあります
あなたが私たちに言っている限り、あなたのjarファイル名は提供された正規表現と一致しません:
指定された構成の場合:
<lib dir="../../dist/" regex="Apache-solr-dataimporthandler-\d.*\.jar" />
ファイル:
dataimporthandler.jar
Solrのサンプル構成ファイル に示されているように、正規表現と一致しませんが、一致する必要があります。
おそらく、以下を指定することから始めます。
<lib dir="../../dist/"/>
sOLRjarをWEB-INF/libの下に置きます
Glassfish3.1.2コンテナーでSolr4.0を使用していますが、Solr War自体を開き、内部にjarファイルを手動で追加し、Glassfishを再デプロイすることで問題を解決しました。
Solrソースからdataimporthandlerjarをビルドすることで、この問題を解決しました。 3.1の場合、dataimporthandlerはApache-solr-core-3.1.0.jarに含まれていません。 dataimporthandlerのjarファイルが見つからなかったため、ソースからビルドしてsolrlibディレクトリに配置しました。
Solrconfig.xmlファイルのconfigタグの下に以下のコードを追加する必要があります。
注:それに応じてjarファイルのバージョンを変更してください。
<lib dir="${solr.install.dir:../../../..}/dist/" regex="solr-dataimporthandler-.*\.jar" />
<lib dir="${solr.install.dir:../../../..}/dist/" regex="mysql-connector-Java-5.1.18-bin.jar" />
詳細については、 connecting-solr-to-database を参照してください。
次の3つの必須フィールドが正しいことを確認してください。
1)solr-conf.xmlのdataimportハンドラーのエントリー
</requestHandler>
<requestHandler name="/dataimport" class="org.Apache.solr.handler.dataimport.DataImportHandler">
<lst name="defaults">
<str name="config">data-config.xml</str>
</lst>
</requestHandler>
2)Solr warファイルはsolr-homeフォルダーを認識しているため、solr-homeに含まれているライブラリーを認識しています。 solr-homeが明示的に追加された場合。
<!-- <env-entry>
<env-entry-name>solr/home</env-entry-name>
<env-entry-value> /Path/To/My/solr/Home/solr/</env-entry-value>
<env-entry-type>Java.lang.String</env-entry-type>
</env-entry> -->
3)新しいライブラリの場所を/home/javaguys/solr-home/collection1/conf/solr-config.xmlに追加します。のようなタグのすぐ下。
これで問題が解決することを願っています。詳細については、こちらをご覧ください 解決策はこちら
バージョンは4.3.1で、dataimporthandler
jarを/lib
にコピーしましたが、機能しませんでした。この問題を修正するために、これをconf/solrconfig.xml
に追加しました。
<lib dir="../../../dist/" regex="solr-dataimporthandler-.*\.jar" />
この問題は、WindowsTomcatとUbuntuTomcatで2回発生しました。
SOLR 4.3、およびTomcat 7
以下のファイルがSOLR_Home/libフォルダーにあることを確認してください
solr-dataimporthandler-4.3.0.jar
上記のように、構成ファイルにも参照が必要です。必要に応じてパスを調整します。
<lib dir="../../dist/" regex="Apache-solr-dataimporthandler-\d.*\.jar" />
いくつかのパスが台無しになっているかもしれませんが、それが私がそれを機能させる方法です。