Solr Installation and Configuration

Introduction

Download Solr: http://lucene.apache.org/solr/html

因爲OSchina的緣由,圖片展現成縮略圖,如看不清楚的話,請選中相應圖片在新標籤頁進行打開查看。java

例如:Solr (Version:solr-6.2.0)  directory content as follows:web

  • bin:Solr命令,提供core、cloud等支持。
  • docs:Help documentations。
  • example:Solr example
  • server: Solr configuration。

Solr自帶jetty支持,便可直接經過bin/solr start運行Solr服務。但通常把Solr集成到Tomcat中運行。數據庫

Use tomcat run Solr

Requirements

Download Tomcat :http://tomcat.apache.org/ apache

Download Java JDK:http://www.oracle.com/technetwork/java/javase/downloads/index.htmltomcat

Download Solr:http://lucene.apache.org/solr/oracle

This tutorial uses the tool version follows:app

Tomcat version:apache-tomcat-8.0.37webapp

Solr Version:solr-5.4.1ide

Java JDK verison:1.7

Configuration Steps

  1. Copy solr-5.4.1\server\solr-webapp\webapp to apache-tomcat-8.0.37\webapps,將webapp改名爲solr;

  2. Copy solr-5.4.1\server\lib\ext(all *.jar) to apache-tomcat-8.0.37\webapps\solr\WEB-INF\lib;
  3. mkdir apache-tomcat-7.0.37\webapps\solr\WEB-INF\classes;
  4. Copy solr-5.4.1\server\resources\log4j.properties to apache-tomcat-8.0.37\webapps\solr\WEB-INF\classes
  5. Configuration Solr Home,Copy D:\Environment\solr-5.4.1\server\solr to apache-tomcat-8.0.37\webapps\solr,將拷貝的solr目錄名稱改名爲solrhome(名稱不固定,方便理解便可)
  6. Open apache-tomcat-8.0.37\webapps\solr\WEB-INF\web.xml
    <!-- People who want to hardcode their "Solr Home" directly into the
           WAR File can set the JNDI property here...
       -->
    <!--
        <env-entry>
           <env-entry-name>solr/home</env-entry-name>
           <env-entry-value>/put/your/solr/home/here</env-entry-value>
           <env-entry-type>java.lang.String</env-entry-type>
        </env-entry>
    -->

    將註釋去掉,在<env-entry-value>中填寫solr home的path。 例如:  

  7. <env-entry>
           <env-entry-name>solr/home</env-entry-name>
           <env-entry-value>D:\Environment\apache-tomcat-8.0.37\webapps\solr\solrhome</env-entry-value>
           <env-entry-type>java.lang.String</env-entry-type>
    </env-entry>

      7.  Run tomcat,access url:http://solr_server_ip:port/sor/admin.html

Configuration Core

  Solr Core 的基礎配置文件存放在solr-5.4.1\server\solr\configsets:

basic_configs爲基礎core的配置,data_driven_shcema_configs是數據庫鏈接的配置。複製相應的Core配置內容,更改相應的參數便可使用。

Create Basic Core

  1. 在Tomcat的 Solr home 中,Create a new folder named cat;

  2. 在apache-tomcat-8.0.37\webapps\solr\solrhome\cat中,Create a new folder named data;

  3. Copy solr-5.4.1\server\solr\configsets\basic_configs\conf to apache-tomcat-7.0.37\webapps\solr\solrhome,as follows:

  4. core.properties

name=cat  //此處爲新建core的名稱

 or

  經過Solr 控制檯新增Core,但前提是要建立Core文件夾,conf(配置文件夾)、data(索引存儲文件夾)、schema.xml(模式配置)和solrconfig.xml(索引配置),注意圖上灰色文字。

  5. Restart Sorl

  

Configuring IKAnalyzer 分詞器

Install IKAnalyzer

  1. Download Solr對應版本的IKAnalyzer分詞器包(前提是修改過內容從新編譯的)。

    Share IKAnalyzer.jar 通過測試適用於Solr 5.X:連接: http://pan.baidu.com/s/1dFgFA4x 密碼: qjyz

    IKAnalyzer content as follows:

  2. Copy IKAnalyzer2012FF_u2.jar to apache-tomcat-8.0.37\webapps\solr\WEB-INF\lib;

  3. Copy IKAnalyzer.cfg.xml  stopword.dic to apache-tomcat-8.0.37\webapps\solr\WEB-INF\classes;

  4. Open apache-tomcat-8.0.37\webapps\solr\solrhome\cat\conf\schema.xml

<!-- Defined Field -->
<field name="name" type="text_ik" indexed="true" stored="true" />

<!-- Defined FieldType IK Analyzer--> 
<fieldType name="text_ik" class="solr.TextField">
         <analyzer type="index" class="org.wltea.analyzer.lucene.IKAnalyzer" useSmart="false"/>
         <analyzer type="query" class="org.wltea.analyzer.lucene.IKAnalyzer" useSmart="true"/>
</fieldType>

  or

<fieldType name="text_ik" class="solr.TextField" positionIncrementGap="100">
    <analyzer type="index">
        <tokenizer class="org.wltea.analyzer.lucene.IKTokenizerFactory" useSmart="false" />
    </analyzer>
    <analyzer type="query">
        <tokenizer class="org.wltea.analyzer.lucene.IKTokenizerFactory" useSmart="true" />
    </analyzer>
</fieldType>

    配置index(索引)和query(查詢)使用的分詞器。

    useSmart="false" 使用細粒度分詞,useSmart="true" 使用智能分詞。

  5. Run Solr,Access url:http://solr_server_ip:port/sor/admin.html,選擇配置的core,點擊Analysis,如圖:

  默認採用最細粒度分詞。正常顯示,則IK分詞器配置成功。

  IK Analyzer經過配置IKAnalyzer.cfg.xml 文件來擴充用戶本身的詞典以及中止詞字典(過濾詞典),只需把IKAnalyzer.cfg.xml、stopword.dic(中止詞典)、ext.dic(用戶詞典) 文件放入classes目錄下面。

  IKAnalyzer.cfg.xml content as follows:

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE properties SYSTEM "http://java.sun.com/dtd/properties.dtd">  
<properties>  
	<comment>IK Analyzer 擴展配置</comment>
	<!--用戶能夠在這裏配置本身的擴展字典 -->
	<entry key="ext_dict">ext.dic;</entry> 
	
	<!--用戶能夠在這裏配置本身的擴展中止詞字典-->
	<entry key="ext_stopwords">stopword.dic;</entry> 
	
</properties>

  ext.dic content as follow:

飛機
大炮
機槍
熊貓

Install IKAnalyzer Error

分詞器與Solr版本不匹配出現過如下問題:

Tomcat 7 選擇IK的分詞器類型進行分析的時候提示:

Tomcat 8 選擇IK的分詞器類型進行分析的時候提示:

after 2seconds as follows

以上圖片展現,徹底看不出是什麼緣由致使的問題,具體緣由需查看Tomcat\log\日誌文件。

Tomcat log as follows:

12-Sep-2016 14:37:42.152 SEVERE [http-nio-8080-exec-2] org.apache.catalina.core.StandardWrapperValve.invoke Servlet.service() for servlet [default] in context with path [/solr] threw exception [Filter execution threw an exception] with root cause
 java.lang.AbstractMethodError
	at org.apache.lucene.analysis.Analyzer.tokenStream(Analyzer.java:179)
	at org.apache.solr.handler.AnalysisRequestHandlerBase.analyzeValue(AnalysisRequestHandlerBase.java:91)
	at org.apache.solr.handler.FieldAnalysisRequestHandler.analyzeValues(FieldAnalysisRequestHandler.java:221)
	at org.apache.solr.handler.FieldAnalysisRequestHandler.handleAnalysisRequest(FieldAnalysisRequestHandler.java:190)
	at org.apache.solr.handler.FieldAnalysisRequestHandler.doAnalysis(FieldAnalysisRequestHandler.java:102)
	at org.apache.solr.handler.AnalysisRequestHandlerBase.handleRequestBody(AnalysisRequestHandlerBase.java:63)
	at org.apache.solr.handler.RequestHandlerBase.handleRequest(RequestHandlerBase.java:143)
	at org.apache.solr.core.SolrCore.execute(SolrCore.java:2068)
	at org.apache.solr.servlet.HttpSolrCall.execute(HttpSolrCall.java:672)
	at org.apache.solr.servlet.HttpSolrCall.call(HttpSolrCall.java:463)
	at org.apache.solr.servlet.SolrDispatchFilter.doFilter(SolrDispatchFilter.java:215)
	at org.apache.solr.servlet.SolrDispatchFilter.doFilter(SolrDispatchFilter.java:179)
	at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:240)
	at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:207)
	at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:212)
	at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:106)
	at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:141)
	at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:79)
	at org.apache.catalina.valves.AbstractAccessLogValve.invoke(AbstractAccessLogValve.java:616)
	at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:88)
	at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:528)
	at org.apache.coyote.http11.AbstractHttp11Processor.process(AbstractHttp11Processor.java:1100)
	at org.apache.coyote.AbstractProtocol$AbstractConnectionHandler.process(AbstractProtocol.java:687)
	at org.apache.tomcat.util.net.NioEndpoint$SocketProcessor.doRun(NioEndpoint.java:1520)
	at org.apache.tomcat.util.net.NioEndpoint$SocketProcessor.run(NioEndpoint.java:1476)
	at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1145)
	at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:615)
	at org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:61)
	at java.lang.Thread.run(Thread.java:745)

Solr與IK版本若是直接不匹配,啓動時會直接出現如下錯誤:

12-Sep-2016 15:35:49.648 SEVERE [http-apr-8080-exec-3] org.apache.catalina.core.StandardWrapperValve.invoke Servlet.service() for servlet [default] in context with path [/solr] threw exception [Filter execution threw an exception] with root cause
 java.lang.VerifyError: class org.wltea.analyzer.lucene.IKAnalyzer overrides final method tokenStream.(Ljava/lang/String;Ljava/io/Reader;)Lorg/apache/lucene/analysis/TokenStream;
	at java.lang.ClassLoader.defineClass1(Native Method)
	at java.lang.ClassLoader.defineClass(ClassLoader.java:800)
	at java.security.SecureClassLoader.defineClass(SecureClassLoader.java:142)
	at org.apache.catalina.loader.WebappClassLoaderBase.findClassInternal(WebappClassLoaderBase.java:2560)
	at org.apache.catalina.loader.WebappClassLoaderBase.findClass(WebappClassLoaderBase.java:859)
	at org.apache.catalina.loader.WebappClassLoaderBase.loadClass(WebappClassLoaderBase.java:1302)
	at java.lang.ClassLoader.loadClass(ClassLoader.java:412)
	at java.lang.ClassLoader.loadClass(ClassLoader.java:412)
	at java.lang.ClassLoader.loadClass(ClassLoader.java:358)
	at java.lang.Class.forName0(Native Method)
	at java.lang.Class.forName(Class.java:274)
	at org.apache.solr.core.SolrResourceLoader.findClass(SolrResourceLoader.java:543)
	at org.apache.solr.core.SolrResourceLoader.findClass(SolrResourceLoader.java:490)
	at org.apache.solr.schema.FieldTypePluginLoader.readAnalyzer(FieldTypePluginLoader.java:271)
	at org.apache.solr.schema.FieldTypePluginLoader.create(FieldTypePluginLoader.java:96)
	at org.apache.solr.schema.FieldTypePluginLoader.create(FieldTypePluginLoader.java:54)
	at org.apache.solr.util.plugin.AbstractPluginLoader.load(AbstractPluginLoader.java:153)
	at org.apache.solr.schema.IndexSchema.readSchema(IndexSchema.java:471)
	at org.apache.solr.schema.IndexSchema.<init>(IndexSchema.java:160)
	at org.apache.solr.schema.IndexSchemaFactory.create(IndexSchemaFactory.java:56)
	at org.apache.solr.schema.IndexSchemaFactory.buildIndexSchema(IndexSchemaFactory.java:70)
	at org.apache.solr.core.ConfigSetService.createIndexSchema(ConfigSetService.java:109)
	at org.apache.solr.core.ConfigSetService.getConfig(ConfigSetService.java:80)
	at org.apache.solr.core.CoreContainer.create(CoreContainer.java:744)
	at org.apache.solr.core.CoreContainer.create(CoreContainer.java:720)
	at org.apache.solr.handler.admin.CoreAdminHandler.handleCreateAction(CoreAdminHandler.java:623)
	at org.apache.solr.handler.admin.CoreAdminHandler.handleRequestInternal(CoreAdminHandler.java:204)
	at org.apache.solr.handler.admin.CoreAdminHandler.handleRequestBody(CoreAdminHandler.java:184)
	at org.apache.solr.handler.RequestHandlerBase.handleRequest(RequestHandlerBase.java:156)
	at org.apache.solr.servlet.HttpSolrCall.handleAdminRequest(HttpSolrCall.java:664)
	at org.apache.solr.servlet.HttpSolrCall.call(HttpSolrCall.java:438)
	at org.apache.solr.servlet.SolrDispatchFilter.doFilter(SolrDispatchFilter.java:223)
	at org.apache.solr.servlet.SolrDispatchFilter.doFilter(SolrDispatchFilter.java:181)
	at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:240)
	at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:207)
	at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:212)
	at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:106)
	at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:141)
	at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:79)
	at org.apache.catalina.valves.AbstractAccessLogValve.invoke(AbstractAccessLogValve.java:616)
	at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:88)
	at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:528)
	at org.apache.coyote.http11.AbstractHttp11Processor.process(AbstractHttp11Processor.java:1100)
	at org.apache.coyote.AbstractProtocol$AbstractConnectionHandler.process(AbstractProtocol.java:687)
	at org.apache.tomcat.util.net.AprEndpoint$SocketProcessor.doRun(AprEndpoint.java:2508)
	at org.apache.tomcat.util.net.AprEndpoint$SocketProcessor.run(AprEndpoint.java:2497)
	at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1145)
	at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:615)
	at org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:61)
	at java.lang.Thread.run(Thread.java:745)

注意:出現以上錯誤信息或者類似圖片時,請嘗試更換IK的版本,IK下載後實際上是從新修改過class內容從新打包才能使用,具體內容下篇介紹,由於IK於2012年中止更新,因此從GoogleCode直接下載後的IK是不可直接使用的,須要在網上找已經從新編譯好的IK.jar。

相關文章
相關標籤/搜索