windows下安裝solr6.4.1及常見異常

科普篇

來自百度百科:Solr簡介Solr是一個基于Lucene的Java搜索引擎服務器。Solr 提供了層面搜索、命中醒目顯示并且支持多種輸出格式(包括 XML/XSLT 和 JSON 格式)。它易于安裝和配置,而且附帶了一個基于 HTTP 的管理界面。Solr已經在眾多大型的網站中使用,較為成熟和穩定。Solr 包裝并擴展了 Lucene,所以Solr的基本上沿用了Lucene的相關術語。更重要的是,Solr 創建的索引與 Lucene 搜索引擎庫完全兼容。通過對 Solr 進行適當的配置,某些情況下可能需要進行編碼,Solr 可以閱讀和使用構建到其他 Lucene 應用程序中的索引。此外,很多 Lucene 工具(如Nutch、 Luke)也可以使用 Solr 創建的索引。

安裝篇

準備工作:jdk-8u111、apache-tomcat-8.0.39、solr6.4.1。
這是solr的下載地址:http://archive.apache.org/dist/lucene/solr/6.4.1/,下載solr-6.4.1.zip就行。

下面是具體的搭建步驟:

第一步:把solr-6.4.1.zip解壓之后,找到solr-6.4.1/server/server-webapp/目錄下的webapp文件夾,復制粘貼到tomcat下的webapps下;
第二步:把solr-6.4.1/server/lib/ext目錄下的所有jar包、和solr-6.4.1/dist下的solr-dataimporthandler-6.4.1.jar、solr-dataimporthandler-extras-6.4.1.jar粘貼復制到tomcat下的solr項目的WEB-INF/lib目錄下;
第三步:把server目錄下的solr文件夾粘貼復制到其他目錄,然后重命名為:solrhome,這是solr核心文件夾。
第四步:修改tomcat下的solr項目的WEB-INF/web.xml,這一步用來指定默認的solrhome。在web.xml開頭附近找到:

    <env-entry>
       <env-entry-name>solr/home</env-entry-name>
       <env-entry-value>D:/solrhome</env-entry-value>
       <env-entry-type>java.lang.String</env-entry-type>
    </env-entry>

然后取消注釋,把<env-entry-value>填第三步solrhome文件夾的地址。
第五步:在tomcat下的solr項目的WEB-INF下新建classes目錄,然后把solr-6.4.1/server/resources下的log4j.properties粘貼過去;
做完這五步就基本搭建完成了,可以訪問http://localhost:8080/solr/index.html可以到solr的后臺做一些配置工作。

異常篇

下面說一下搭建過程中可能遇到的異常:

  1. 啟動tomcat時如果報下面的錯誤:
嚴重: Exception starting filter SolrRequestFilter
java.lang.NoClassDefFoundError: com/codahale/metrics/MetricSetat java.lang.Class.getDeclaredConstructors0(Native Method)at java.lang.Class.privateGetDeclaredConstructors(Class.java:2671)at java.lang.Class.getConstructor0(Class.java:3075)at java.lang.Class.newInstance(Class.java:412)at org.apache.catalina.core.DefaultInstanceManager.newInstance(DefaultInstanceManager.java:119)at org.apache.catalina.core.ApplicationFilterConfig.getFilter(ApplicationFilterConfig.java:258)at org.apache.catalina.core.ApplicationFilterConfig.<init>(ApplicationFilterConfig.java:105)at org.apache.catalina.core.StandardContext.filterStart(StandardContext.java:4700)at org.apache.catalina.core.StandardContext.startInternal(StandardContext.java:5340)at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:145)at org.apache.catalina.core.ContainerBase.addChildInternal(ContainerBase.java:753)at org.apache.catalina.core.ContainerBase.addChild(ContainerBase.java:729)at org.apache.catalina.core.StandardHost.addChild(StandardHost.java:717)at org.apache.catalina.startup.HostConfig.deployDirectory(HostConfig.java:1092)at org.apache.catalina.startup.HostConfig$DeployDirectory.run(HostConfig.java:1834)at java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:511)at java.util.concurrent.FutureTask.run(FutureTask.java:266)at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142)at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617)at java.lang.Thread.run(Thread.java:745)Caused by: java.lang.ClassNotFoundException: com.codahale.metrics.MetricSetat org.apache.catalina.loader.WebappClassLoaderBase.loadClass(WebappClassLoaderBase.java:1333)at org.apache.catalina.loader.WebappClassLoaderBase.loadClass(WebappClassLoaderBase.java:1167)... 20 more

請把solr-6.4.1/server/lib下的metrics-core-3.1.2.jar,metrics-ganglia-3.1.2.jar,metrics-graphite-3.1.2.jar,metrics-jetty9-3.1.2.jar,metrics-jvm-3.1.2.jar這幾個jar包放到tomcat下的solr項目的WEB-INF/lib目錄下。

  1. 訪問http://localhost:8080/solr/index.html時如果報下面的錯誤:
    HTTP Status 403 - Access to the requested resource has been denied
    **把tomcat下的solr項目的web.xml文件中
  <security-constraint>
    <web-resource-collection>
      <web-resource-name>Disable TRACE</web-resource-name>
      <url-pattern>/</url-pattern>
      <http-method>TRACE</http-method>
    </web-resource-collection>
    <auth-constraint/>
  </security-constraint>
  <security-constraint>
    <web-resource-collection>
      <web-resource-name>Enable everything but TRACE</web-resource-name>
      <url-pattern>/</url-pattern>
      <http-method-omission>TRACE</http-method-omission>
    </web-resource-collection>
  </security-constraint>

這段注釋掉。這段配置限制了對solr資源的訪問,注釋掉就可以訪問了。**

  1. java.lang.NoSuchMethodError:
    解決:solr5.5以上版本在tomcat8下運行
    由于solr5.5.0和solr5.5.1 版本部署在tomcat7下的時候,會報Java.lang.NoSuchMethodError: javax.servlet.ServletInputStream.isFinished()Z的錯誤,這個是serverlet3.1才有的方法。
  2. javax.servlet.ServletInputStream.isFinished
    解決:solr5版本以上的部署最好使用JDK1.8
    solr5版本以上的部署最好使用JDK1.8,雖然官網沒有明確表示solr5必須是要使用JDK1.8,但是其中一部分功能鎖需求的JDK版本在JDK1.7以下是沒有的
    比如:Java.lang.NoSuchMethodError: javax.servlet.ServletInputStream.isFinished()Z
    我是在全量索引的時候發生的此異常提示:找不到ServletInputStream類下面的isFinished()方法,那么現在我們找到該類ServletInputStream
    如果在這個類下面沒有isFinished()方法,那就是JAR包問題,這個類所在的jar包是servlet-api.jar

解決掉上面的異常后,重啟tomcat,訪問http://localhost:8080/solr/index.html,不出意外會進入如下圖的頁面

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。

推薦閱讀更多精彩內容