Solr 搭建搜索服務器

1、安裝配置
所需JDK和Tomcat和安裝包solr-4.2.1.tgz
Tomcat安裝目錄 /usr/local/tomcat
修改Tomcat支持中文
# vi /usr/local/tomcat/conf/server.xml
<Connector port="8080" URIEncoding="UTF-8" />
# tar xvf /root/solr-4.2.1.tgz
# cp /root/solr-4.2.1/dist/solr-4.2.1.war /usr/local/tomcat/webapps/solr.war
# cp -r /root/solr-4.2.1/example/solr /usr/local/tomcat/
導入下面包 同時 IKAnalyzer2012FF_u1.jar mysql-connector-java-5.1.24-bin.jar也導入
# cp -r /root/solr-4.2.1/dist/solr*.jar /usr/local/tomcat/webapps/solr/WEB-INF/lib/
# cp -r /root/solr-4.2.1/contrib/extraction/lib/* /usr/local/tomcat/webapps/solr/WEB-INF/lib/
修改tomcat下solr\WEB-INF\web.xml找到 <env-entry>節點
# vi /usr/local/tomcat/webapps/solr/WEB-INF/web.xml
 <env-entry>
       <env-entry-name>solr/home</env-entry-name>
       <env-entry-value>/usr/local/tomcat/solr</env-entry-value>
       <env-entry-type>java.lang.String</env-entry-type>
    </env-entry>
重啓Tomcat http://192.168.1.52:8080/solr

2、中文分詞
一、IK 分詞器
下載 http://code.google.com/p/ik-analyzer/downloads/list
mv /root/IKAnalyzer2012FF_u1.jar /usr/local/tomcat/webapps/solr/WEB-INF/lib/
# vi /usr/local/tomcat/solr/collection1/conf/schema.xml
 <field name="ik" type="text_ik" indexed="true" stored="true"/>
 <fieldType name="text_ik" class="solr.TextField">   
        <analyzer type="index" isMaxWordLength="false" class="org.wltea.analyzer.lucene.IKAnalyzer"/>
        <analyzer type="query" isMaxWordLength="true" class="org.wltea.analyzer.lucene.IKAnalyzer"/>
 </fieldType>
重啓Tomcat http://192.168.1.52:8080/solr
選擇collection1 -> Analysis >> Analyse Fieldname / FieldType選擇 ik
二、mmseg4j 分詞器
<dependency>  
    <groupId>com.chenlb.mmseg4j</groupId>  
    <artifactId>mmseg4j-core</artifactId>  
    <version>1.9.0</version>  
</dependency> 
將mmseg4j-1.9.1-SNAPSHOT/dist/下三個包複製到 /usr/local/tomcat/webapps/solr/WEB-INF/lib/
# vi /usr/local/tomcat/solr/collection1/conf/schema.xml
    <field name="mm_complex" type="textComplex" indexed="true" stored="true"/>
    <field name="mm_title" type="textComplex" indexed="true" stored="true"/>
    <fieldType name="textComplex" class="solr.TextField" >  
        <analyzer>  
            <tokenizer class="com.chenlb.mmseg4j.solr.MMSegTokenizerFactory" mode="complex"/>  
        </analyzer>  
    </fieldType>
重啓Tomcat http://192.168.1.52:8080/solr
選擇collection1 -> Analysis >> Analyse Fieldname / FieldType選擇 textComplex
三、smartcn 分詞器
# cp /root/solr-4.2.1/contrib/analysis-extras/lucene-libs/lucene-analyzers-smartcn-4.2.1.jar /usr/local/tomcat/webapps/solr/WEB-INF/lib/
# vi /usr/local/tomcat/solr/collection1/conf/schema.xml
 <field name="text_zh" type="text_zh" indexed="true" stored="true"/>
 <fieldType name="text_zh" class="solr.TextField" positionIncrementGap="100">
   <analyzer>
    <tokenizer class="solr.SmartChineseSentenceTokenizerFactory"/>
    <filter class="solr.SmartChineseWordTokenFilterFactory"/>
    <filter class="solr.LowerCaseFilterFactory"/>
    <filter class="solr.PositionFilterFactory" />
   </analyzer>
 </fieldType>
 
3、優化
經過更改其中的dataDir屬性來指定索引文件的存放位置,對於有大數據量的狀況下還要進行自動commit操做配置,如下設置爲當內存索引量達到20W條時自動進行往磁盤寫操做,以避免堆溢出,這也是解決單 個入庫xml文件最好不要超過30M的有效方法:
# vi /usr/local/tomcat/solr/collection1/conf/solrconfig.xml
<autocommit>
  <maxdocs>200000</maxdocs>
</autocommit>

4、Solr導入Xml
schema.xml的字段配置部分以下:
<field name="id" type="string" stored="true" indexed="true"/>
<field name="name" type="string" stored="true" indexed="true" omitNorms="false"/>
<field name="content" type="string" stored="true" indexed="true"/>
# vi /opt/books.xml
<add overwrite="true" commitWithin="10000">
<doc>
<field name="id">1</field>
<field name="name" boost="2">Some Book</field>
<field name="content">首先創建證書鏈,從咱們目前的證書爲基礎,一直上溯到Root CA的證書.
    若是中間有任何問題,好比找不到某個證書的頒發者的證書</field>
</doc>
<doc boost="2.5">
<field name="id">2</field>
<field name="name" boost="2">Important Book</field>
<field name="content"> 如今獲得鏈條上全部CA的名稱和證書了,下一步是去檢查第一個證書的用途是否和簽發時候批准的同樣。其餘的證書則必須都是做爲CA證書而頒發的</field>
</doc>
<doc>
<field name="id">3</field>
<field name="name" boost="2">Some other book</field>
<field name="content">若是驗證操做有問題了,那麼打印出來的結果可能會讓人有點模糊</field>
</doc>
</add>
說明:
overwrite="true" :告訴solr在作索引的時候,若是文檔已經存在,就用xml中的文檔進行替換
commitWithin="10000" :告訴solr 在作索引的時候,每一個10000(10s)毫秒,作一次文檔提交
boost:用來指明文檔或者字段的重要程度,默認值爲:1.0,在這個示例中,第二個文檔的boost值爲2.5,表示比其它兩個文檔更重要
omitNorms="false":這個屬性值表示是否忽略字段的的規範,此處設爲否。若是要在作索引的時候指定字段的重要程度,必須使用字段的長度規範。
若是設置爲true,那麼這些字段在索引時不會增長重要程度
linux下提交文檔
# curl http://localhost:8080/solr/update --data-binary @books.xml -H 'Content-type:text/xml; charset=utf-8'
選擇collection1 -> Query >> q輸入"模糊" 有1個結果

5、Solr導入Json
# vi /opt/books.json
{
"add": {
"doc": {
  "id": 1,
  "name": "Some book",
  "content": ["中國John", "Marry"]
 }
}
,
"add": {
 "boost": 2.5,
 "doc": {
  "id": 2,
  "name": "Important Book",
  "content": ["中國Harry", "Jane"]
 }
}
,
"add": {
  "doc": {
  "id": 3,
  "name": "Some other book",
  "content": "泰國使用手冊Marry"
 }
}
}
先查詢下solrconfig.xml中有沒有配置:
# vi /usr/local/tomcat/solr/collection1/conf/solrconfig.xml
<requestHandler name="/update/json" class="solr.JsonUpdateRequestHandler" />
linux下提交文檔
# curl "http://localhost:8080/solr/update/json?commit=true" --data-binary @books.json -H 'Content-type:text/json; charset=utf-8'
選擇collection1 -> Query >> q輸入"模糊" 有1個結果

6、Solr導入Pdf或Word或Ppt或Excel或Txt或Html或Eml
# vi /usr/local/tomcat/solr/collection1/conf/schema.xml
<fields>
<field name="id" type="string" indexed="true" stored="true" required="true" />
   <field name="content" type="text_general" indexed="true" stored="true" required="true" />
   <!--<field name="size" type="slong" indexed="true" stored="true" required="true" />-->
   <dynamicField name="ignored_*" type="ignored" multiValued="true" indexed="false" stored="false"/>
</fields>
<!--
<fieldtype name="slong" class="solr.SortableLongField" sortMissingLast="true" omitNorms="true"/>
-->
<uniqueKey>id</uniqueKey>
<defaultSearchField>content</defaultSearchField>
<solrQueryParser defaultOperator="AND"/>
# vi /usr/local/tomcat/solr/collection1/conf/solrconfig.xml
  <requestHandler name="/update/extract"
                  startup="lazy"
                  class="solr.extraction.ExtractingRequestHandler" >
    <lst name="defaults">
      <str name="fmap.content">content</str>
      <str name="fmap.stream_size">size</str>
      <str name="lowernames">true</str>
      <str name="uprefix">ignored_</str>
      <str name="captureAttr">true</str>
    </lst>
  </requestHandler>
參數解釋:
fmap.source=target : 映射規則,將在pdf文件中提取出的字段(source) 映射到solr中的字段(tar)
uprefix : 若是指定了該參數,任何在schema中未定義的字段,都將以該參數指定的值做爲字段名前綴
defaultField : 若是沒有指定uprefix參數值,且有字段沒法在schema中沒法檢測到,則使用defaultField指定的字段名
captureAttr :(true|false)捕獲屬性,對Tika XHTML 元素的屬性進行索引。
literal:自定義metadata信息,也就是給schema文件中定義的某一個字段指定一個值
linux下提交文檔
# curl "http://localhost:8080/solr/update/extract?literal.id=doc5&commit=true" --data-binary @t2.pdf -H 'Content-type:application/pdf'
# curl "http://localhost:8080/solr/update/extract?literal.id=doc5&commit=true" --data-binary @t2.doc -H 'Content-type:application/msword'
# curl "http://localhost:8080/solr/update/extract?literal.id=doc5&commit=true" --data-binary @t2.ppt -H 'Content-type:application/mspowerpoint'
# curl "http://localhost:8080/solr/update/extract?literal.id=doc5&commit=true" --data-binary @t2.xlsx -H 'Content-type:application/msexcel'
# curl "http://localhost:8080/solr/update/extract?literal.id=doc1&commit=true" -F myfile=@t2.txt
# curl "http://localhost:8080/solr/update/extract?literal.id=doc1&commit=true" -F myfile=@t2.html
# curl "http://localhost:8080/solr/update/extract?literal.id=doc1&commit=true" -F myfile=@t2.eml
7、Solr導入Csv
先查詢下solrconfig.xml中有沒有配置:
<field name="id" type="string" stored="true" indexed="true"/>
<field name="name" type="string" stored="true" indexed="true"/>
<field name="description" type="text" stored="true" indexed="true"/>
# vi /opt/t2.csv
id;name;description
1;北京;"這個屬性值表示是否忽略字段的的規範"
2;上海;"對於有大數據量的狀況下還要進行自動"
3;香港;"若是要在作索引的時候指定字段的重要程度"
# vi /usr/local/tomcat/solr/collection1/conf/solrconfig.xml
<requestHandler name="/update/csv" class="solr.CSVRequestHandler" startup="lazy">
<lst name="defaults">
   <str name="separator">;</str>
   <str name="header">true</str>
   <str name="skip">publish_date</str>
   <str name="encapsulator">"</str>
</lst>
</requestHandler>
說明:
startup="lazy":經過該參數告訴solr在第一次添加時才實例化這個更新處理程序
<str name="separator">;</str> : 經過該參數告訴solr 字段之間是經過";」分隔
<str name="header">true</str>:經過該參數告訴solr在數據項以前含有頭信息
<str name="skip">publish_date</str> :經過該參數告訴solr,publish_date 這列數據須要忽略掉
<str name="encapsulator">"</str>:經過該參數告訴solr數據項是經過雙引號(")進行封裝的
linux下提交文檔
# curl "http://localhost:8080/solr/update/extract?literal.id=doc5&commit=true" --data-binary @t2.csv -H 'Content-type:application/csv'
封裝好的數據項(此處爲雙引號),也能夠進行拆分,若是過咱們將name 字段設爲多值,那麼在requestHandler裏面作一個小的調整,能夠對以下文檔進行處理:
id;name;isbn;description;publish_date
1;"Solr cookbook;New solr cookbook";ABC123456;"Solr Cookbook";2011-06
在 requestHandler裏再添加一項:<str name="split">true</str>
這樣設置以後,solr裏面會添加一條id爲1,name 字段有 Solr cookbook、New solr cookbook 兩個值

8、Solr導入二進制文件
schema.xml的字段配置部分以下:
<field name="id" type="string" indexed="true" stored="true" required="true"/>
<field name="author" type="string" indexed="true" stored="true" multiValued="true"/>
<field name="title" type="text" indexed="true" stored="true"/>
<dynamicField name="ignored_*" type="ignored" indexed="false" stored="false" multiValued="true"/>
# vi /usr/local/tomcat/solr/collection1/conf/schema.xml
<requestHandler name="/update/extract" class="org.apache.solr.handler.extraction.ExtractingRequestHandler">
<lst name="defaults">
    <str name="lowernames">true</str>
    <str name="uprefix">ignored_</str>
    <str name="captureAttr">true</str>
</lst>
</requestHandler>
說明:
<str name="lowernames">true</str> :將從二進制文件中抽取的元數據信息字段名都轉換爲小寫
<str name="uprefix">ignored_</str>:若是從二進制文件中抽取出來的字段名在schema.xml中沒有定義時,使用的字段名前綴
<str name="captureAttr">true</str>:捕獲二進制文件的一些屬性信息
linux下提交文檔
# curl "http://localhost:8080/solr/update/extract?literal.id=1&commit=true" -F "myfile=@t2.mp3"

8、Solr經過JDBC從數據庫導入
假設數據庫(test)中表:執行Sql語句
DROP TABLE IF EXISTS `art`;
CREATE TABLE IF NOT EXISTS `art` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `description` varchar(30) NOT NULL,
  PRIMARY KEY (`id`)
) ENGINE=MyISAM  DEFAULT CHARSET=utf8 AUTO_INCREMENT=5 ;
INSERT INTO `art` (`id`, `description`) VALUES
(1, '寶興縣靈關中學建立於1958年,其老校區在五年前的汶川地震中'),
(2, '財政部、國家衛計委、人社部、民政部日前聯合下發通知,要求各部'),
(3, '該負責人表示,根據業內的消息,窄路掉頭主要考驗在很窄小的路上'),
(4, '民最擔憂的而是學費是否會進一步提升。對此,該人士也坦言,如今');
# vi /usr/local/tomcat/solr/collection1/conf/solrconfig.xml
<requestHandler name="/import" class="org.apache.solr.handler.dataimport.DataImportHandler">
 <lst name="defaults">
    <str name="config">db-config.xml</str>
 </lst>
 </requestHandler>
# vi /usr/local/tomcat/solr/collection1/conf/db-config.xml
<dataConfig>
  <dataSource type="JdbcDataSource"
              driver="com.mysql.jdbc.Driver"
              url="jdbc:mysql://localhost:3306/test?characterEncoding=UTF-8"
              user="root"
              password="root"/>
  <document>
    <entity name="id"
            query="select id,description from art">
    </entity>
  </document>
</dataConfig>
配置完成以後,重啓solr服務,而後執行如下命令進行數據導入
# curl http://localhost:8080/solr/import?command=full-import
/import: 這個命令用於顯示當前的狀態
/import?command=full-import :使用該參數,表示進行徹底導入,默認狀況下,在開始導入的時候,會將上次導入的數據進先進行刪除,而後再導入,經過另一個參數,能夠改變這種默認行爲,clean=false
/dataimport?command=delta-import:使用該參數,表示進行增量導入
/dataimport?command=reload-config: 該命令表示強制對配置進行從新加載
/dataimport?command=abort :該命令表示中止當前正在進行的索引
下面就一些參數稍做解釋:
 <field column="title" name="title" />  此處是將從mysql數據庫中獲取的字段名"title"映射到schema.xml中的title域中(其實此處),其他字段以此類推

9、經過jdbc對對solr進行數據的增量導入
接着上一節的內容,假如咱們從mysql中導入進solr中的數據量比較大,所耗時比較長,若是每次都是進行徹底導入,確定是很差的作法,所以能夠採起增量導入的方式,solr的相關配置以下所示:
在 schema.xml的域信息定義以下:
<field name="id"     type="string"   indexed="true"  stored="true"  required="true"/>
 <field name="title" type="text" indexed="true" stored="true"/>
 <field name="catname" type="string" stored="true"/>
# vi /usr/local/tomcat/solr/collection1/conf/solrconfig.xml
<requestHandler name="/import" class="org.apache.solr.handler.dataimport.DataImportHandler">
 <lst name="defaults">
    <str name="config">db-data-config.xml</str>
 </lst>
 </requestHandler>
# vi /usr/local/tomcat/solr/collection1/conf/db-data-config.xml
<dataConfig>
    <dataSource driver="com.mysql.jdbc.Driver" url="jdbc:mysql://localhost:3306/blog" user="root" password="admin"/>
    <document>
        <entity name="article" query="select id,title,catid from article" deltaImportQuery="select id,title,catid from article where id='${dataimporter.delta.id}'" deltaQuery="select id from article where cdate&gt; '${dataimporter.last_index_time}'">
            <field column="id" name="id" />
            <field column="title" name="title" />
            <field column="title" name="suggest"/>
            <entity name="category" query="select catname from category where id=${article.catid}">
                <field column="catname" name="catname"/>
            </entity>
        </entity>
    </document>
</dataConfig>
與上一節相比,db-data-config.xml 文件的配置有所變化:
在最外層的entity節點裏面新增了兩個屬性節點,deltaImportQuery 與deltaQuery, deltaImportQuery使用deltaQuery返回的文章id做爲查詢條件,而後進行增量導入。
dataimporter.last_index_time  :存儲在文件import.properties 中
#Sat Jun 16 19:30:20 CST 2012
last_index_time=2012-06-16 19\:30\:19
article.last_index_time=2012-06-16 19\:30\:19
dataimporter.delta.id:deltaImportQuery 返回的id

10、Solr中實現同義詞搜索
在爲用戶提供搜索服務時,爲了提供更好的用戶體驗,咱們須要很好的處理同義詞搜索。
例如用戶在搜索的關鍵詞中含有"1」,須要將其轉爲爲"一」,這時能夠採用如下的方式去實現:
首先,配置schema.xml文件,定義相應的域類型
<fieldtype name="text_search" class="solr.TextField" omitNorms="true">
    <analyzer type="index">
        <tokenizer class="solr.StandardTokenizerFactory"/>
        <filter class="solr.LowerCaseFilterFactory"/>
    </analyzer>
    <analyzer type="query">
        <tokenizer class="solr.StandardTokenizerFactory"/>
        <filter class="solr.SynonymFilterFactory" synonyms="synonyms.txt" ignoreCase="true" expand="true"/>
        <filter class="solr.LowerCaseFilterFactory"/>
    </analyzer>
   </fieldtype>
synonyms.txt:
1 => 一

11、Solr函數使用之map
map 函數是將將一個字段指定範圍內的值進行映射轉換爲目標值
常見的用法有:
map(x,min,max,target)和map(x,min,max,target,other)兩種
例如:
map(x,0,0,1) 在函數參數中的x若是爲0時則將其值映射爲1,這在處理默認值爲0時頗有用。
map(x,10,100,1,2) 在函數參數中的x若是落在[10,100]之間,則將x的值映射爲1,不然將其值映射爲2
使用方法:
通常用做排序
sort=sum(value,map(age,10,10,$x,$y))+asc&x=2&y=3
上面是將age字段值爲10,則將其值映射爲2,不然爲3,而後加上value,而後按照升序排列
sort=sum(value,map(age,10,10,$x,$y))+asc&x=sum(2,some_field*2)&y=3
與上一個例子的意圖差很少,只是x值的生成是經過函數實現
經過map函數,對score字段進行影響,而後對score進行排序
http://localhost:8080/solr/loupan/select/?q={!func}map(loupan_id,1004,1004,1,100)&fl=*,score&sort=score+asc,loupan_id+desc
直接在sort的時候使用map進行排序
http://localhost:8080/solr/loupan/select/?q=*:*&fl=*,score&sort=map(loupan_id,1004,1004,1,100)+asc

異常解決
1.SolrException: Error loading class 'solr.VelocityResponseWriter'
vi /usr/local/tomcat/solr/collection1/conf/solrconfig.xml
<queryResponseWriter name="velocity" class="solr.VelocityResponseWriter" enable="${solr.velocity.enabled:true}"/>註釋或者disabled - enable:false便可
重啓Tomcat

2.org.apache.solr.common.SolrException:org.apache.solr.common.SolrException: Error opening new searcher
清空索引
# cd /usr/local/tomcat/solr/collection1/data/index
# rm -rf *
html

重啓Tomcat 
java


1、Solr 程序包 的目錄結構
l client :包含了一些特定語言調用Solr 的API 客戶端程序,目前只有Ruby 可供選擇。
l contrib: 更多內容和索引的支持與擴展。
            ²  contrib /analysis-extras:提供了基於大量依賴和字典的增強分析器。
           ²  contrib /clustering:提供了給第三方聚簇實現的插件。
           ²  contrib /dataimporthandler:數據導入工具,能夠從數據庫,xml文件和http數據源導入。
           ²  contrib /extraction:更多抽象支持包。
           ²  contrib /uima: UIMA 元數據抽象庫和使用應該作的配置。
l  dist :存放Solr 構建完成正式發佈的JAR 文件、WAR 文件和Solr 依賴的JAR 文件。
l  docs: 包含Solr的官方說明文檔和使用API。
l  example :是一個安裝好的Jetty 中間件,其中包括一些樣本數據和Solr 的配置信息。
           ²  example/etc :Jetty 的配置文件。
           ²  example /example-DIH:數據導入的配置和事例。
           ²  example /exampledocs:post.jar能夠用來創建索引。*.xml能夠做數據源。
           ²  example /lib: 相關的包,jsp,jetty, servlet有關。
           ²  example /logs: 記錄日誌,初始狀態爲空。
           ²  example/multicore :當安裝Slormulticore 時,用來放置多個Solr 主目錄。
           ²  example/solr :默認安裝時一個Solr 的主目錄。給出一個例子,展現solr home是什麼樣,建議新建一個solr實例時,複製這個文件夾下的全部文件。
           ²  example/webapps :Solr 的WAR 文件部署在這裏。是一個可運行的例子。
           ²  example /work:工做目錄,默認爲空。
           ²  example/start.jar: 經過運行start.jar可使example中的Solr.war在Jetty環境下啓動服務。
2、Solr 主目錄結構
當Solr啓動時,第一件事就是從主目錄中讀取它的配置。一個運行的Solr 服務其主目錄包含了Solr 的配置文件和數據(Lucene 的索引文件)
Solr 的主目錄展開後爲以下結構:(example/solr )
l  bin :建議將集羣複製腳本放在這個目錄下。
l  conf :放置配置文件。
           ²  conf/schema.xml :創建索引的schema 包含了字段類型定義和其相關的分析器。
           ²  conf/solrconfig.xml :這個是Solr 主要的配置文件。
           ²  conf/velocity:以*.vm來進行頁面展現。
           ²  conf/xslt :包含了不少xslt 文件,這些文件能將Solr 的XML 的查詢結果轉換爲特定的格式,好比:Atom/RSS 。
l  data :放置Lucene 產生的索引數據。
l  lib :放置可選的JAR 文件好比對Slor 擴展的插件,這些JAR 文件將會在Solr 啓動時加載。
3、post.jar的使用
1.        post.jar能夠用來添加索引,經過反編譯post.jar獲得SimplePostTool.java這一個類。
2.        工具默認的參數以D(default)爲前綴:
l  請求的url是 -Durl=http://localhost:8983/solr/update。
l  是否提交-Dcommit=yes。
l  數據來源-Ddata=files。
l  數據的文本類型-Dtype=application/xml。
l  請求是否輸出到控制檯-Dout=no。
3.        數據來源能夠來自文件、參數和控制檯,指定創建索引的文件和字段及值。
來自文件, 例java-Ddata=files -jar post.jar *.xml,能夠省略爲java -jar post.jar *.xml (由於是默認-Ddata=files)
來自參數,例:java-Ddata=args  -jar post.jar '<delete><id>42</id></delete>'
來自控制檯輸入,例:java-Ddata=stdin -jar post.jar < hd.xml  

mysql


solr與zookeeper搭建solrcloud分佈式索引服務實例linux

概述  

  因爲機器臺數的問題,本次搭建的是一臺zookeeper服務器多臺solr服務器的形式。其餘知識這裏再也不囉嗦,能夠參與:http://wiki.apache.org/solr/SolrCloud
web

  注:"x"表示實際信息。sql

預先準備

  1.下載solr4.1.0的壓縮包:http://labs.mop.com/apache-mirror/lucene/solr/4.1.0/solr-4.1.0.tgz
  2.三臺機器,假定ip分別爲:192.168.0.1,192.168.0.2,192.168.0.3
  3.準備好java jdk1.6及以上版本和tomcat6.x及以上版本數據庫

搭建服務

  A.搭建192.168.0.1服務apache

  1. 解壓tomcat6.x包,將端口設置爲:8081.json

  2. 解壓solr-4.1.0.tgz包,將x/solr-4.1.0/example/solr複製到x/tomcat6.x/目錄內。將x/solr-4.1.0/example/webapps/solr.war,複製到tomcat的webapps目錄內。並修改solr/WEB-INF/web.xml內容:bootstrap

    <env-entry>
         <env-entry-name>solr/home</env-entry-name>
         <env-entry-value>x/tomcat6.x/</env-entry-value>
         <env-entry-type>java.lang.String</env-entry-type></env-entry>
  3. 修改tomcat6.x/bin目錄內的catalina.sh,在頭部分添加以下代碼:

    #   JAVA_OPTS       (Optional) Java runtime options used when the "start",
    #                   "stop", or "run" command is executed.
    JAVA_OPTS="-Dbootstrap_confdir=x/tomcat6.x/solr/collection1/conf -Dcollection.configName=clusterconf -Djetty.port=8081 -Dhost=192.168.0.1 -DzkRun -DzkHost=localhost:9081 -DnumShards=1"

    固然這-Djetty.port=8081 -Dhost=192.168.0.1配置也能夠在x/tomcat6.x/solr/solr.xml文件設置。

  B.搭建192.168.0.2服務

  1. 複製192.168.0.1的tomcat6.x到本臺機器上

  2. 修改solr/WEB-INF/web.xml內容

  3. 修改tomcat6.x/bin目錄內的catalina.sh,在頭部分添加以下代碼:

    #   JAVA_OPTS       (Optional) Java runtime options used when the "start",
    #                   "stop", or "run" command is executed.
    JAVA_OPTS="-Djetty.port=8082 -DzkHost=192.168.0.1:9081"

  C.搭建192.168.0.3服務

  1. 複製192.168.0.1的tomcat6.x到本臺機器上

  2. 修改solr/WEB-INF/web.xml內容

  3. 修改tomcat6.x/bin目錄內的catalina.sh,在頭部分添加以下代碼:

    #   JAVA_OPTS       (Optional) Java runtime options used when the "start",
    #                   "stop", or "run" command is executed.
    JAVA_OPTS="-Djetty.port=8083 -DzkHost=192.168.0.1:9081"

啓動服務

  分別啓動三臺機器的tomcat服務。

查看結果

  輸入URL:http://192.168.0.1:8081/solr/#/~cloud,查看solr管理後臺.

簡單應用

  在leader節點上建立一些索引數據:

cd exampledocs
java -Durl=http://192.168.0.1:8081/solr/collection1/update -jar post.jar ipod_video.xmljava -Durl=http://192.168.0.1:8081/solr/collection1/update -jar post.jar monitor.xmljava -Durl=http://192.168.0.1:8081/solr/collection1/update -jar post.jar mem.xml

  因此Replica節點都同步得到索引數據,輸入URL:http://192.168.0.2:8082/solr/collection1/select?q=*:*&wt=xml,可進行測試.

相關文章
相關標籤/搜索