Solr 搭建搜索服务器
2019獨角獸企業重金招聘Python工程師標準>>>
一、安裝配置
所需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
二、中文分詞
1、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
2、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
3、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>
?
三、優化
通過更改其中的dataDir屬性來指定索引文件的存放位置,對于有大數據量的情況下還要進行自動commit操作配置,以下設置為當內存索引量達到20W條時自動進行往磁盤寫操作,以免堆溢出,這也是解決單 個入庫xml文件最好不要超過30M的有效方法:
# vi /usr/local/tomcat/solr/collection1/conf/solrconfig.xml
<autocommit>
? <maxdocs>200000</maxdocs>
</autocommit>
四、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個結果
五、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個結果
六、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
七、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 兩個值
八、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"
八、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域中(其實此處),其余字段以此類推
九、通過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> '${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
十、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 => 一
十一、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 *
重啟Tomcat?
一、Solr 程序包 的目錄結構
l client :包含了一些特定語言調用Solr 的API 客戶端程序,目前只有Ruby 可供選擇。
l contrib: 更多內容和索引的支持與擴展。
??????????? 2? contrib /analysis-extras:提供了基于大量依賴和字典的加強分析器。
?????????? 2? contrib /clustering:提供了給第三方聚簇實現的插件。
?????????? 2? contrib /dataimporthandler:數據導入工具,可以從數據庫,xml文件和http數據源導入。
?????????? 2? contrib /extraction:更多抽象支持包。
?????????? 2? contrib /uima: UIMA 元數據抽象庫和使用應該做的配置。
l? dist :存放Solr 構建完成正式發布的JAR 文件、WAR 文件和Solr 依賴的JAR 文件。
l? docs: 包含Solr的官方說明文檔和使用API。
l? example :是一個安裝好的Jetty 中間件,其中包括一些樣本數據和Solr 的配置信息。
?????????? 2? example/etc :Jetty 的配置文件。
?????????? 2? example /example-DIH:數據導入的配置和事例。
?????????? 2? example /exampledocs:post.jar可以用來建立索引。*.xml可以作數據源。
?????????? 2? example /lib: 相關的包,jsp,jetty, servlet有關。
?????????? 2? example /logs: 記錄日志,初始狀態為空。
?????????? 2? example/multicore :當安裝Slormulticore 時,用來放置多個Solr 主目錄。
?????????? 2? example/solr :默認安裝時一個Solr 的主目錄。給出一個例子,展示solr home是什么樣,建議新建一個solr實例時,復制這個文件夾下的所有文件。
?????????? 2? example/webapps :Solr 的WAR 文件部署在這里。是一個可運行的例子。
?????????? 2? example /work:工作目錄,默認為空。
?????????? 2? example/start.jar: 通過運行start.jar可以使example中的Solr.war在Jetty環境下啟動服務。
二、Solr 主目錄結構
當Solr啟動時,第一件事就是從主目錄中讀取它的配置。一個運行的Solr 服務其主目錄包含了Solr 的配置文件和數據(Lucene 的索引文件)
Solr 的主目錄展開后為如下結構:(example/solr )
l? bin :建議將集群復制腳本放在這個目錄下。
l? conf :放置配置文件。
?????????? 2? conf/schema.xml :建立索引的schema 包含了字段類型定義和其相關的分析器。
?????????? 2? conf/solrconfig.xml :這個是Solr 主要的配置文件。
?????????? 2? conf/velocity:以*.vm來進行頁面展示。
?????????? 2? conf/xslt :包含了很多xslt 文件,這些文件能將Solr 的XML 的查詢結果轉換為特定的格式,比如:Atom/RSS 。
l? data :放置Lucene 產生的索引數據。
l? lib :放置可選的JAR 文件比如對Slor 擴展的插件,這些JAR 文件將會在Solr 啟動時加載。
三、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??
solr與zookeeper搭建solrcloud分布式索引服務實例
概述
由于機器臺數的問題,本次搭建的是一臺zookeeper服務器多臺solr服務器的形式。其他知識這里不再啰嗦,可以參與:http://wiki.apache.org/solr/SolrCloud
注:"x"表示實際信息。
預先準備
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服務
解壓tomcat6.x包,將端口設置為:8081.
解壓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內容:
<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>修改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服務
復制192.168.0.1的tomcat6.x到本臺機器上
修改solr/WEB-INF/web.xml內容
修改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服務
復制192.168.0.1的tomcat6.x到本臺機器上
修改solr/WEB-INF/web.xml內容
修改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,可進行測試.
轉載于:https://my.oschina.net/u/1757458/blog/389109
總結
以上是生活随笔為你收集整理的Solr 搭建搜索服务器的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 荣耀Magic5系列再曝青海湖技术 荣耀
- 下一篇: iOS 开发-文件下载原理