solr 的使用及安裝

http://sinykk.iteye.com/blog/1168272 php

注本文以solr3.3爲例

 

Solr 簡介

  Solr 是一個開源的企業級搜索服務器,底層使用易於擴展和修改的Java 來實現。
       Solr 主要特性有:強大的全文檢索功能,高亮顯示檢索結果,動態集羣,數據庫接口和電子文檔(Word ,PDF 等)的處理。並且Solr 具備高度的可擴展,支持分佈搜索和索引的複製。
       Solr 底層的核心技術是使用Apache Lucene 來實現的,簡單的說Solr 是Lucene 的服務器化。須要注意的是Solr 並非簡單的對Lucene 進行封裝,它所提供的大部分功能都區別於Lucene 。 html

================================================== java

WINDOWS/linux SOLR安裝 node

【linux參考】:http://sinykk.iteye.com/admin/blogs/1171098 mysql

【windows以下】 linux

================================================== git

環境參數:

Tomcat 7
Solr apache-solr-3.3.0
Jdk 1.6
Windows web

搭建步驟:

1. 下載所需軟件,安裝配置Tomcat。 sql

下載軟件爲 :Tomcat與Solr,jdk1.6,官網均可免費下載。 數據庫

2. Tomcat 配置文件conf\server.xml

添加編碼的配置 URIEncoding="UTF-8" (如不添加,中文檢索時由於亂碼搜索不到)。
添加後爲:
<Connector port="8983" protocol="HTTP/1.1" connectionTimeout="20000"
           redirectPort="8443" URIEncoding="UTF-8" />

 

4. 將D:\solr\apache-solr-3.3.0 解壓

5. 創建d:/solr/home主目錄(能夠根據本身的狀況創建),把D:\solr\apache-solr-3.3.0\example\solr複製到該目錄下。

6. 創建solr.home 環境變量:置爲 d:/solr/home

7. 將solr.War複製到tomcat的webapp下啓動是會自動解壓。

8. 修改D:\resouce\java\tomcat\webapps\solr\WEB-INF\web.xml.

    <env-entry>
       <env-entry-name>solr/home</env-entry-name>
       <env-entry-value>d:\solr\home</env-entry-value>
       <env-entry-type>java.lang.String</env-entry-type>
</env-entry>
9. 啓動tomcat,瀏覽器輸入:http://localhost:8080/solr/ 
10.看到頁面說明部署成功

 

 

==================================================

solr 將MYSQL數據庫作成索引數據源【注意格式】

參考:http://digitalpbk.com/apachesolr/apache-solr-mysql-sample-data-config

==================================================

 

一、在solrconfig.xml中添加,增長導入數據功能

 

Xml代碼   收藏代碼
  1. <requestHandler name="/dataimport" class="org.apache.solr.handler.dataimport.DataImportHandler">     
  2.           <lst name="defaults">     
  3.                <str name="config">data-config.xml</str>     
  4.           </lst>     
  5. </requestHandler>  

 

二、添加一個數據源data-config.xml,代碼以下

 

Xml代碼   收藏代碼
  1. <dataConfig>  
  2.     <dataSource type="JdbcDataSource"  
  3.    driver="com.mysql.jdbc.Driver"  
  4.    url="jdbc:mysql://localhost/test"  
  5.    user="root"  
  6.    password=""/>  
  7.     <document name="content">  
  8.         <entity name="node" query="select id,name,title from solrdb">  
  9.             <field column="nid" name="id" />  
  10.             <field column="name" name="name" />  
  11.             <field column="title" name="title" />  
  12.         </entity>  
  13.     </document>  
  14. </dataConfig>  
 

三、建立schema.xml語法,代碼以下

 

Xml代碼   收藏代碼
  1. <?xml version="1.0" encoding="UTF-8" ?>  
  2. <schema name="example" version="1.4">  
  3.   <types>      
  4.      <fieldType name="tint" class="solr.TrieIntField" precisionStep="8" omitNorms="true" positionIncrementGap="0"/>  
  5.   
  6.      <fieldType name="string" class="solr.StrField" sortMissingLast="true" omitNorms="true"/>  
  7.   
  8.      <fieldType name="text" class="solr.TextField" positionIncrementGap="100">  
  9.       <analyzer type="index">  
  10.         <tokenizer class="solr.StandardTokenizerFactory"/>  
  11.         <filter class="solr.StopFilterFactory" ignoreCase="true" words="stopwords.txt" enablePositionIncrements="true" />  
  12.         <filter class="solr.LowerCaseFilterFactory"/>  
  13.       </analyzer>  
  14.       <analyzer type="query">  
  15.         <tokenizer class="solr.StandardTokenizerFactory"/>  
  16.         <filter class="solr.StopFilterFactory" ignoreCase="true" words="stopwords.txt" enablePositionIncrements="true" />  
  17.         <filter class="solr.SynonymFilterFactory" synonyms="synonyms.txt" ignoreCase="true" expand="true"/>  
  18.         <filter class="solr.LowerCaseFilterFactory"/>  
  19.       </analyzer>  
  20.     </fieldType>  
  21.   
  22.      <fieldType name="date" class="solr.TrieDateField" omitNorms="true" precisionStep="0" positionIncrementGap="0"/>    
  23. </types>  
  24.   
  25.   
  26.  <fields>  
  27.    <field name="id" type="string" indexed="true" stored="true" required="true" />   
  28.    <field name="title" type="string" indexed="true" stored="true"/>  
  29.    <field name="contents" type="text" indexed="true" stored="true"/>  
  30.  </fields>  
  31.   
  32.  <uniqueKey>id</uniqueKey>  
  33.  <defaultSearchField>contents</defaultSearchField>  
  34.  <solrQueryParser defaultOperator="OR"/>  
  35. <copyField source="title" dest="contents"/>  
  36.   
  37. </schema>  

 

schema.xml 裏重要的字段

要有這個copyField字段SOLR才能檢索多個字段的值【如下設置將同時搜索 title,name,contents中的值】
<defaultSearchField>contents</defaultSearchField>
copyField是用來複製你一個欄位裡的值到另外一欄位用. 如你能夠將name裡的東西copy到default裡, 這樣solr作檢索時也會檢索到name裡的東西.
<copyField source="name" dest="contents"/>
<copyField source="title" dest="contents"/>

 

四、建立索引

http://192.168.171.129:8983/solr/dataimport?command=full-import

 

注:保證與數據庫鏈接正確

 

==================================================

solr 建立增量索引

主要是修改data-config.xml 數據源

==================================================

 

Xml代碼   收藏代碼
  1. <dataConfig>  
  2.     <dataSource driver="com.mysql.jdbc.Driver" url="jdbc:mysql://localhost/demo" user="root" password=""/>  
  3.     <document name="products">  
  4.        <entity name="item" pk="id"  
  5.           query="SELECT id,title,contents,last_index_time FROM solr_articles"  
  6.           deltaImportQuery="SELECT id,title,contents,last_index_time FROM solr_articles  
  7.             WHERE id = '${dataimporter.delta.id}'"  
  8.           deltaQuery="SELECT id FROM solr_articles  
  9.             WHERE last_index_time > '${dataimporter.last_index_time}'">  
  10.         </entity>  
  11.     </document>  
  12. </dataConfig>  
 

注意數據庫相關表的建立

如本例中 solr_articles表中有 last_index_time(timestamp)字段,每當增長或者更新了值都應修改last_index_time的值,以便增量索引能更新到

有問題請即時查看TOMCAT的LOG日誌文件

 

運行:http://192.168.171.129:8983/solr/dataimport?command=delta-import

若是運行後未達到你的預期,請查看dataimport.properties文件的日期,並組合新SQL語句查詢來調整問題

 

 

==================================================

multiple core(SOLR多個索引共存)

參考:http://wiki.apache.org/solr/CoreAdmin

==================================================

一、配置多個索引

 

Xml代碼   收藏代碼
  1. <solr persistent="true" sharedLib="lib">  
  2.  <cores adminPath="/admin/cores">  
  3.   <core name="core0" instanceDir="core0" dataDir="D:\solr\home\core0\data"/>  
  4.   <core name="core1" instanceDir="core1" dataDir="D:\solr\home\core1\data" />  
  5.  </cores>  
  6. </solr>  
 

 

二、將D:\solr\apache-solr-3.3.0\example\multicore下的 core0,core1兩個文件拷貝到D:\solr\home下,D:\solr\home目錄下以前的任務目錄及文件不變

注:D:\solr\home目錄爲D:\solr\apache-solr-3.3.0\example\solr


三、創建兩個索引數據存放目錄
D:\solr\home\core0\data
D:\solr\home\core1\data

四、修改其中一個索引如CORE1
修改solrconfig.xml爲以下代碼
【注 須要加入 lib 標籤主要是由於DataImportHandler 爲報錯,這多是官方的BUG】

Xml代碼   收藏代碼
  1. <?xml version="1.0" encoding="UTF-8" ?>  
  2. <config>  
  3.   <luceneMatchVersion>LUCENE_33</luceneMatchVersion>  
  4.   <directoryFactory name="DirectoryFactory" class="${solr.directoryFactory:solr.StandardDirectoryFactory}"/>  
  5.   
  6.   <lib dir="D:/solr/apache-solr-3.3.0/contrib/extraction/lib" />  
  7.   <lib dir="D:/solr/apache-solr-3.3.0/dist/" regex="apache-solr-cell-\d.*\.jar" />  
  8.   <lib dir="D:/solr/apache-solr-3.3.0/dist/" regex="apache-solr-clustering-\d.*\.jar" />  
  9.   <lib dir="D:/solr/apache-solr-3.3.0/dist/" regex="apache-solr-dataimporthandler-\d.*\.jar" />  
  10.   <lib dir="D:/solr/apache-solr-3.3.0/contrib/clustering/lib/" />  
  11.   <lib dir="/total/crap/dir/ignored" />   
  12.   <updateHandler class="solr.DirectUpdateHandler2" />  
  13.   
  14.   <requestDispatcher handleSelect="true" >  
  15.     <requestParsers enableRemoteStreaming="false" multipartUploadLimitInKB="2048" />  
  16.   </requestDispatcher>  
  17.     
  18.   <requestHandler name="standard" class="solr.StandardRequestHandler" default="true" />  
  19.   <requestHandler name="/update" class="solr.XmlUpdateRequestHandler" />  
  20.   <requestHandler name="/admin/" class="org.apache.solr.handler.admin.AdminHandlers" />  
  21.   <admin>  
  22.     <defaultQuery>solr</defaultQuery>  
  23.   </admin>  
  24. <requestHandler name="/dataimport" class="org.apache.solr.handler.dataimport.DataImportHandler">     
  25.           <lst name="defaults">     
  26.                <str name="config">data-config.xml</str>     
  27.           </lst>     
  28. </requestHandler>  
  29. </config>  
 

最後運行 http://localhost:8080/solr/core1/admin/

 

==================================================

定時更新SOLR索引

因SOLR的索引更新是通過HTTP的,因此不能直接使用CRON,如今咱們換一種方式

將要訪問的HTTP寫入到PHP文件中,通過定時運行PHP文件來達到更新SORL索引目錄

10/* * * * * /usr/local/php/bin/php /yym/cronfile/solr_cron.php?t=index_delta


==================================================

 

Php代碼   收藏代碼
  1. /* 
  2.  * Created on 2011-9-15 
  3.  * @author tianyongchun 
  4.  * 此文件用於定時更新SOLR的索引 
  5.  * @param t爲更新類型 帶不一樣的參考更新不一樣的索引 
  6.  *  
  7.  * 此文件能夠經過LINUX的CRON方法運行以便達到定時更新索引 
  8.  */  
  9.  set_time_limit(0);  
  10.  /** 
  11.   *  
  12.   * 增量更新 
  13.   * index_delta 
  14.   * 全更新 
  15.   * index_full 
  16.   *  
  17.   *  
  18.   */  
  19.  $t = $_GET['t'];  
  20.  //http://192.168.171.129:8983/solr/dataimport?command=delta-import  
  21.  $url = 'http://localhost:8983/solr/dataimport?command=';  
  22.  $r = 'result error';  
  23.  if($t =='index_delta'){  
  24.     $r = file_get_contents($url.'delta-import');  
  25.  }else if($t =="index_full"){  
  26.     $r = file_get_contents($url.'full-import');  
  27.  }else{  
  28.     echo 'param error';  
  29.  }  
  30.  var_dump($r);  
  31. ?>  
 

 

 

 

==================================================

solr 的PHP客戶端

solr-php-client

==================================================

從名字就能夠看出,這是 Solr 的 PHP 客戶端開發包。
經過這個包能夠像
http://code.google.com/p/solr-php-client/downloads/list

 

 

==================================================

常見錯誤 org.apache.solr.common.SolrException: Error loading class 'org.apache.solr.handler.dataimport.DataImportHandler 
================================================== 
將solrconfig.xml中的值改成以下:【主要是指定SOLR的主目錄路徑出錯】

  <lib dir="D:/solr/apache-solr-3.3.0/contrib/extraction/lib" />
  <!-- When a regex is specified in addition to a directory, only the
       files in that directory which completely match the regex
       (anchored on both ends) will be included.
    -->
  <lib dir="D:/solr/apache-solr-3.3.0/dist/" regex="apache-solr-cell-\d.*\.jar" />
  <lib dir="D:/solr/apache-solr-3.3.0/dist/" regex="apache-solr-clustering-\d.*\.jar" />
  <lib dir="D:/solr/apache-solr-3.3.0/dist/" regex="apache-solr-dataimporthandler-\d.*\.jar" />

  <!-- If a dir option (with or without a regex) is used and nothing
       is found that matches, it will be ignored
    -->
  <lib dir="D:/solr/apache-solr-3.3.0/contrib/clustering/lib/" />


-----------------------------
    
I experienced the same issue. With Solr 1.x, I was copying out the
'example' directory to make my solr installation. However, for the
Solr 3.x distributions, the DataImportHandler class exists in a
directory that is at the same level as example: "dist", not a
directory within.

You'll either want to take the entire apache 3.1 directory, or modify
solrconfig to point to the new place you've copied it:

  <lib dir="../../dist/" regex="apache-solr-dataimporthandler-\d.*\.jar" />

 

==================================================

solr搜索不出數據

==================================================



SELECT id,title,main_contents as contents,last_index_time FROM solr_articles
要使用<field column="NAME" name="name" />最好將schema.xml中經過field配置相應的名字

 

 

==================================================

solr 分佈式(複製)配置

參考:http://hi.baidu.com/648636045/blog/item/3985aaf1f8f150d00a46e080.html

==================================================

相關文章
相關標籤/搜索