1

我在端口 8983 启动并运行 Solr 1.2 并使用 liferay 5.1.1 问题是如何配置 solr 以在 liferay JournalArticle 表中搜索我已经为 liferay 安装了 solr-web 插件,但它抛出了这个异常

[SolrIndexSearcherImpl:79] Error while sending request to Solr
java.lang.ClassCastException: com.liferay.portal.kernel.util.HttpUtil cannot be cast to com.liferay.portal.kernel.util.HttpUtil
        at com.liferay.portal.kernel.util.HttpUtil._getUtil(HttpUtil.java:317)
        at com.liferay.portal.kernel.util.HttpUtil.getHttp(HttpUtil.java:96)
        at com.liferay.portal.kernel.util.HttpUtil.addParameter(HttpUtil.java:68)
        at com.liferay.portal.search.solr.SolrIndexSearcherImpl.search(SolrIndexSearcherImpl.java:71)
        at com.liferay.portal.search.solr.SolrSearchEngineUtil.search(SolrSearchEngineUtil.java:78)
        at com.liferay.portal.search.solr.messaging.SolrReaderMessageListener.doCommandSearch(SolrReaderMessageListener.java:92)
        at com.liferay.portal.search.solr.messaging.SolrReaderMessageListener.doReceive(SolrReaderMessageListener.java:75)
        at com.liferay.portal.search.solr.messaging.SolrReaderMessageListener.receive(SolrReaderMessageListener.java:46)
        at com.liferay.portal.kernel.messaging.InvokerMessageListener.receive(InvokerMessageListener.java:69)
        at com.liferay.portal.kernel.messaging.ParallelDestination$1.run(ParallelDestination.java:59)
        at java.util.concurrent.ThreadPoolExecutor$Worker.runTask(ThreadPoolExecutor.java:886)
        at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:908)
        at java.lang.Thread.run(Thread.java:619)
16:08:16,174 ERROR [SolrReaderMessageListener:49] Unable to process message com.liferay.portal.kernel.messaging.Message@2c591d98
com.liferay.portal.kernel.search.SearchException: java.lang.ClassCastException: com.liferay.portal.kernel.util.HttpUtil cannot be cast to com.liferay.portal.kernel.util.HttpUtil
        at com.liferay.portal.search.solr.SolrIndexSearcherImpl.search(SolrIndexSearcherImpl.java:81)
        at com.liferay.portal.search.solr.SolrSearchEngineUtil.search(SolrSearchEngineUtil.java:78)
        at com.liferay.portal.search.solr.messaging.SolrReaderMessageListener.doCommandSearch(SolrReaderMessageListener.java:92)
        at com.liferay.portal.search.solr.messaging.SolrReaderMessageListener.doReceive(SolrReaderMessageListener.java:75)
        at com.liferay.portal.search.solr.messaging.SolrReaderMessageListener.receive(SolrReaderMessageListener.java:46)
        at com.liferay.portal.kernel.messaging.InvokerMessageListener.receive(InvokerMessageListener.java:69)
        at com.liferay.portal.kernel.messaging.ParallelDestination$1.run(ParallelDestination.java:59)
        at java.util.concurrent.ThreadPoolExecutor$Worker.runTask(ThreadPoolExecutor.java:886)
        at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:908)

顺便说一句,这是我的 solr-web solr-spring.xml

<beans>
    <bean id="indexSearcher" class="com.liferay.portal.search.solr.SolrIndexSearcherImpl">
     <property name="serverURL" value="http://localhost:8983/solr/select" />
    </bean>
    <bean id="indexWriter" class="com.liferay.portal.search.solr.SolrIndexWriterImpl">
     <property name="serverURL" value="http://localhost:8983/solr/update" />
    </bean>
    <bean id="searchEngine" class="com.liferay.portal.search.solr.SolrSearchEngineImpl">
  <property name="name" value="Solr" />
     <property name="searcher" ref="indexSearcher" />
     <property name="writer" ref="indexWriter" />
     <property name="indexReadOnly" value="false" />
    </bean>

 <bean id="searchEngineUtil" class="com.liferay.portal.search.solr.SolrSearchEngineUtil" lazy-init="false">
     <constructor-arg ref="searchEngine" />
     <constructor-arg ref="searchReaderMessageListener" />
     <constructor-arg ref="searchWriterMessageListener" />
    </bean>

在这种情况下 schema.xml 会是什么样子

4

2 回答 2

0

看来您的应用服务器中必须有多个 portal-kernel.jar 文件。

此 jar 不能在至少包含应用服务器中的门户应用程序和插件的 ear 的上下文中复制,或者如果在 servlet 容器(如 tomcat)中运行,则不能在全局类路径中复制。

于 2010-03-22T17:49:34.547 回答
0

他 HttpUtils 类实际上被修改以适应需求,所以解决这个问题的方法是用我们修改的那个替换原来的内核类

于 2010-03-24T10:08:16.473 回答