用到的相關jar包:http://pan.baidu.com/disk/home#list/path=%2Fsolrhtml
Solr 目錄java
Contrib :solr 爲了加強自身的功能,所添加的擴展依賴包。mysql
Dilst:solr build 過程時產生的jar包和war包,還有他的一些依賴包。web
Docs: 文檔。sql
Example: 例子數據庫
Solr:配置了solr運行至的信息,是一個標準的solrhome目錄。apache
Collection1:solrcore目錄vim
Data: 該目錄是儲存了索引的目錄。centos
Multicore:能夠配置多個solr實例。數組
Webapps: solr.war的目錄
Licenses :版本
從example中copy出solr到新的一個目錄,這就是一個solrhome了,能夠更名。C:\QQDownload\Solrs\solr1\solrhome
Solrhome是一個目錄,是solr運行的主目錄,它包括多個solrcore目錄。Solrcore目錄中就是solr實例的運行配置文件和數據文件。
Solr部署到tomcat。
Solr須要運行在一個servlet容器,它默認提供了一個jetty容器。
把solrhome下webapps的solr.war複製到tomcat下的webapps目錄下,解壓並刪除該war包。
添加solr依賴包,從目錄solr-4.9.0\example\lib\ext 複製到 Tomcat 6.0-solr\webapps\solr\WEB-INF\lib
把solr-4.9.0 下的dist和contrib複製到solrhome\collection1\conf 下solrconfig.xml 中配置的相應路徑中
依賴包有log4j,須要添加lofg4j的配置文件solr-4.9.0\example\resources 到 Tomcat 6.0-solr\webapps\solr\WEB-INF\classes(該文件夾需手動添加)。
添加sorl和tomcat的關聯編輯 Tomcat 6.0-solr\webapps\solr\WEB-INF下的web.xml
添加映射關係,指定solrhome :<env-entry-value> C:\QQDownload\Solrs\solr1\solrhome </env-entry-value>
啓動tomcat 看是否有錯誤。
遇到了solrconf.xml 的路徑不對的問題,<lib dir="../../contrib/extraction/lib" regex=".*\.jar" />
<lib dir="../../dist/" regex="solr-cell-\d.*\.jar" /> 修改dir 路徑並從solr中複製contrilb和dlist目錄到相應的位置
http://localhost:8080/solr/#/~logging看到正常solr界面就說明安裝成功了。
分詞器是須要配置的。
能夠操做索引。 在solr中,修改或添加索引 都須要id主鍵。
多solrcore 配置:
Collection1,collection2
一個solr工程,配置多個solrcore 每一個solrcore之間是相互獨立的,能夠單獨對外提供服務。
相似於數據庫,一個數據庫能夠後多個實例,若是有新需求,能夠直接擴展。
多solrcore在管理索引文件時,能夠進行分類管理。
使用solrcloud solr集羣, 必需要創建多個solrcore。
複製solrhome下的collection1 到本目錄下,更名爲collection2.
修改collection2下的core.properties 修改成collection2 就ok了。
重啓tomcat。
ok。兩個solrcore 互相是獨立的。
Solr 基本使用
C:\QQDownload\Solrs\solr1\solrhome\collection1\conf
Schema.xml 文件在solrcore中的conf目錄下,這個文件主要是配置域名及域的類型。
Solr 的域要先定義,後使用。
<field name="id" type="string" indexed="true" stored="true" required="true" multiValued="false" />
Name:域名
Type:域的類型(也須要配置)
Indexed:是否索引
Stored:是否存儲
Required:是否必須通常id才設置。
multiValued:是否能夠多值。若是設置爲多值,裏面的值就採用數組方式存儲。
<dynamicField name="*_i" type="int" indexed="true" stored="true"/>
配置動態域
Name:域名,該域經過一個正則指定。
<uniqueKey>id</uniqueKey>
指定一個主鍵域。每一個文檔中都應該有個惟一主鍵。
<copyField source="cat" dest="text"/>
複製域
<field name="text" type="text_general" indexed="true" stored="false" multiValued="true"/>
Source :源域
Dest:目標域 把源域的內容複製到目標域,目標域必須設置 multiValued="true"
<fieldType name="text_general" class="solr.TextField" positionIncrementGap="100">
<analyzer type="index">
<tokenizer class="solr.StandardTokenizerFactory"/>
<filter class="solr.StopFilterFactory" ignoreCase="true" words="stopwords.txt" />
<!-- in this example, we will only use synonyms at query time
<filter class="solr.SynonymFilterFactory" synonyms="index_synonyms.txt" ignoreCase="true" expand="false"/>
-->
<filter class="solr.LowerCaseFilterFactory"/>
</analyzer>
<analyzer type="query">
<tokenizer class="solr.StandardTokenizerFactory"/>
<filter class="solr.StopFilterFactory" ignoreCase="true" words="stopwords.txt" />
<filter class="solr.SynonymFilterFactory" synonyms="synonyms.txt" ignoreCase="true" expand="true"/>
<filter class="solr.LowerCaseFilterFactory"/>
</analyzer>
</fieldType>
fieldType 配置域的類型
Name:域的類型的名稱 引用該類型時: type=」 text_general」
Class:指定solr的類型
Analyzer:配置分詞器 type:index,query 索引,查詢分詞器
Tokenizer :分詞器
Filter :過濾器
使用IkAnalyzer中文分詞器
把IkAnalyzer2012ff_u1.jar添加到tomcat下的 web-inf/lib目錄下
tomcat-6.0.35\apache-tomcat-6.0.35-solr\webapps\solr\WEB-INF\lib
複製IkAnalyzer的配置文件和自定義詞典和停用詞典到sorl的classpath下
Copy到apache-tomcat-6.0.35-solr\webapps\solr\WEB-INF\classes下
配置fieldtype 指定使用中文分詞器。
打開C:\QQDownload\Solrs\solr1\solrhome\collection1\conf下的 scheme.xml文件
配置filed,使用中文分詞器的filedtype。
業務域
Id是主鍵,因爲collection1的scheme已經有主鍵了。
<field name="id" type="string" indexed="true" stored="true" required="true" multiValued="false" />
把數據從關係數據庫中查詢並導入到索引庫中。
solr-4.9.0\dist\ solr-dataimporthandler-4.9.0.jar
複製到
Solrs\solr1\contrib\dataimporthandler\lib
下載mysql-connector-java-5.1.7-bin
Mysql數據驅動包拷貝到
Solrs\solr1\contrib\db\lib 下,沒有的目錄須要手動新建
配置dataimporthandler
在目錄\Solrs\solr1\solrhome\collection1\conf下建立data-config.xml文件。
若是是連接sqlserver 注意配置sql和mysql的jdbc驅動,在同一個文件夾下 <lib dir="../../contrib/db/lib" regex=".*\.jar" /> 默認的就使用了mysql 的驅動。
看取到的數據和生成索引的數據數量是否一致,能夠查看日誌。
看一下別人的增刪改:http://www.cnblogs.com/madyina/p/4133908.html
Solrj代碼操做solr索引 .net solrnet
添加solrj的jar包 ,
路徑 \Solrs\solr1\dist\solrj-lib 下的是solrj的依賴包
新加Javaproject,添加相應的solrj對應的包。
把\solr-4.9.0\example\lib\ext 目錄下的jar包也添加進項目
代碼實現
添加,修改索引。
注意:solr中添加修改索引必需要有主鍵,主鍵已經存在就修改,不存在就添加。
刪除索引
能夠看到有多種刪除方法。
已經成功刪除
Solrj搜索
能夠看到界面實現和代碼實現差異不大。
Solr服務器
應用
數據庫
Zookeeper 管理和維護SolrCloud集羣
1.安裝java環境
把集羣須要的文件上傳到虛擬機
Zookeeper:http://blog.csdn.net/cjfeii/article/details/24706321
Solr下載地址: http://archive.apache.org/dist/lucene/solr/4.10.3/solr-4.10.3.tgz
1.安裝centos
2.安裝java 虛擬機
3.安裝zookeeper 保證是基數節點,最少3個節點。
解壓 tar -zxf zookeeper-3.4.6.tar.gz
4.配置zookeeper
在zookeeper1文件夾下 建立data文件夾
在data文件夾下建立myid文件 寫入1. echo 1>>data/myid
以此類推,另外幾個節點也一樣配置。
建立配置文件。在conf文件夾下 zoo_sample.cfg 複製後更名 cp zoo_sample.cfg zoo.cfg,而後編輯vim zoo.cfg。編輯datadir節點dataDir=/user/local/solrcloud/zookerper1/data .
這裏注意clientport節點,同一個機器不要重複了端口號。
添加server.1節點 server.1=1912.168.80.128:2881:3881
每一個zookeeper節點都要有這個配置。
Clientport 是zookeeper對外提供服務的端口 2881 是zookeeper服務器內部通訊的端口,3881是zookeeper投票的端口,不能重複。
# The number of milliseconds of each tick
tickTime=2000
# The number of ticks that the initial
# synchronization phase can take
initLimit=10
# The number of ticks that can pass between
# sending a request and getting an acknowledgement
syncLimit=5
# the directory where the snapshot is stored.
# do not use /tmp for storage, /tmp here is just
# example sakes.
dataDir=/tmp/zookeeper
# the port at which the clients will connect
clientPort=2181
# the maximum number of client connections.
# increase this if you need to handle more clients
#maxClientCnxns=60
#
# Be sure to read the maintenance section of the
# administrator guide before turning on autopurge.
#
# http://zookeeper.apache.org/doc/current/zookeeperAdmin.html#sc_maintenance
"zoo.cfg" 28L, 922C1,1 頂端
# The number of milliseconds of each tick
tickTime=2000
# The number of ticks that the initial
# synchronization phase can take
initLimit=10
# The number of ticks that can pass between
# sending a request and getting an acknowledgement
syncLimit=5
# the directory where the snapshot is stored.
# do not use /tmp for storage, /tmp here is just
# example sakes.
dataDir=/user/local/solrcloud/zookerper1/data
# the port at which the clients will connect
clientPort=2181
# the maximum number of client connections.
# increase this if you need to handle more clients
#maxClientCnxns=60
#
# Be sure to read the maintenance section of the
# administrator guide before turning on autopurge.
#
# http://zookeeper.apache.org/doc/current/zookeeperAdmin.html#sc_maintenance
#
# The number of snapshots to retain in dataDir
#autopurge.snapRetainCount=3
# Purge task interval in hours
# Set to "0" to disable auto purge feature
#autopurge.purgeInterval=1
server.1=1912.168.80.128:2881:3881
server.2=1912.168.80.128:2882:3882
server.3=1912.168.80.128:2883:3883
"zoo.cfg" 31L, 1050C 已寫入
依次配置好zookeeper2,zookeeper3
5.啓動zookeeper
Bin文件夾下內容
建立批量啓動文件
也能夠單個啓動。
添加新建啓動文件的執行屬性。
6.查看zookeeper狀態
./zkServer.sh status
Error contacting service. It is probably not running. 錯誤 查看zookeeper.out日誌,分析錯誤緣由。
添加了 批量啓動和查看狀態的執行文件
啓動成功。
必定要注意jar包的版本
主要修改的配置文件:
1.tomcat1/conf/server.xml 若是是同一臺服務器就須要修改端口,防止衝突。單臺可使用默認設置。
2.tomcat1/webapps/solr/WEB-INF/web.xml –修改配置solrhome的位置
3.solrhome1/collection1/solrconfig.xml 主要是修改指定dist和contrib目錄和後續的插件jar包的路徑
solrhome是從solr-4.10.3包下的/example/solr 目錄複製的
tomcat 下webapps下的solr 是 solr-4.10.3下/example/solr下webapps的solr.war 解壓出來的
[root@supercentos1 download]# tar -zxf apache-tomcat-7.0.39.tar.gz安裝tomcat
[root@supercentos1 download]# mv apache-tomcat-7.0.39 /user/local/solrcloud/tomcat/tomcat1
[root@supercentos1 tomcat]# cp -r tomcat1/ tomcat2 複製出來3個tomcat
[root@supercentos1 tomcat]# cp -r tomcat1/ tomcat3
[root@supercentos1 tomcat]# cp -r tomcat1/ tomcat4
[root@supercentos1 tomcat]# vim tomcat1/conf/server.xml 修改各個tomcat端口配置
[root@supercentos1 download]# tar -zxf solr-4.10.3.tgz.tgz 解壓
複製solr-4.10.3/example/solr 複製到solrcloud下的solr文件夾下新建solrhome。
把solrhome下webapps的solr.war複製到tomcat下的webapps目錄下,解壓並刪除該war包。
[root@supercentos1 solr-4.10.3]# cp example/webapps/solr.war / user/local/solrcloud/tomcat/tomcat1/webapps/
[root@supercentos1 solr-4.10.3]# cd/user/local/solrcloud/tomcat/tomcat1/webapps/
unzip -oq solr.war-d solr
rm solr.war
解壓後刪除:
從目錄 solr-4.10.3\example\lib\ext 複製到Tomcat1\webapps\solr\WEB-INF\lib 下
cp -rf example/lib/ext/*.jar /user/local/solrcloud/tomcat/tomcat1/webapps/solr/WEB-INF/lib
依賴包有log4j,須要添加lofg4j的配置文件solr-4.9.0\example\resources 到 Tomcat 6.0-solr\webapps\solr\WEB-INF\classes(該文件夾需手動添加)。
[root@supercentos1 solr-4.10.3]# cp -rf example/resources/log4j.properties/user/local/solrcloud/tomcat/tomcat1/webapps/solr/WEB-INF/classes/
而後把tomcat1下webapps下的sorl文件夾複製到每一個tomcat目錄下。
複製相應個數的solr和tomcat, 每一個sorl都對應一個tomcat容器。
[root@supercentos1 download]# cp -r /user/local/solrcloud/tomcat/tomcat1/webapps/solr /user/local/solrcloud/tomcat/tomcat2/webapps/
修改tomcat下sorl工程web.xml文件
vim tomcat/tomcat1/webapps/solr/WEB-INF/web.xml 2,3,4也一樣的步驟修改就好了
[root@supercentos1 solrcloud]# tomcat/tomcat1/bin/startup.sh 啓動tomcat1
把solr-4.9.0 下的dist和contrib複製到 solrhome\collection1\conf 下solrconfig.xml 中配置的相應路徑中
[root@supercentos1 solr-4.10.3]# cp -rf contrib /user/local/solrcloud/solr/ 這個須要在配置文件裏配置,看是否對應
[root@supercentos1 solr-4.10.3]# cp -rf dist /user/local/solrcloud/solr/
Vim solrhome1/collection1/solrconfig.xml
主要修改solrhome下的solr.xml,關聯tomcat的ip和對應端口號。
修改tomcat下的bin目錄下的catalina.sh。關聯zookerper服務器地址和端口。
1.修改solrhome下的solr.xml配置文件
2.使用zookeeper統一管理配置文件。須要把solrhome下的collection1下的conf文件夾上傳到zookeeper。
3.執行/root/download/solr-4.10.3/example/scripts/cloud-scripts 下的
./zkcli.sh -zkhost 192.168.80.128:2181,192.168.80.128:2182,192.168.80.128:2183 -cmd upconfig -confdir /user/local/solrcloud/solr/solrhome1/collection1/conf -confname myconf
./zkcli.sh -zkhost(zookeeper服務器) 192.168.80.128:2181,192.168.80.128:2182,192.168.80.128:2183(zookeeper配置的服務器IP:clientProt) -cmd upconfig -confdir /user/local/solrcloud/solr/solrhome1/collection1/conf(管理的文件目錄) -confname myconf(zookeeper管理別名)
4.執行/zookerper1/bin/zkCli.sh 連接到zookerper1
看到文件都傳上了
5.關聯zookerper和每一臺solr。.告訴solr服務zookerper的位置
修改solr的tomcat下的bin目錄下的catalina.sh文件,加入DzkHost 指定zookerper服務器的地址:vim tomcat1/bin/catalina.sh
添加
JAVA_OPTS="-DzkHost=192.168.80.128:2181,192.168.80.128:2182,192.168.80.128:2183"
一樣的修改各個solr的tomcat服務器。
6.從新啓動tomcat ,zookerper。
7.集羣配置成功,這裏只是單片
出現這個錯誤就看下solrhome下的solr.xml的ip和端口是否正確了, catalina.sh文件是否是手抖改錯地方了,坑爹的。。最好是配完一臺後直接複製粘貼的靠譜。
http://192.168.80.128:8080/solr/admin/collections?action=CREATE&name=collection2&numShards=2&replicationFactor=2
http://192.168.80.128:8080/solr/admin/collections?action=DELETE&name=collection1
須要在每一個節點都配置下,修改solrconfig.xml,把solrconfig.xml文件上傳到zookerper。
把單機版的solrhome/collection1下的conf拷到本地下collection2_shard2_replica1 下。
上傳到zookerper 覆蓋原來的那個配置。
把dataimporthandler相關的jar包,和數據庫mysql或者sqlserver的驅動包放到相應的位置,配置solrconfig.xml。由於我這個是放到了solrhome公用的目錄下了,不用每一個solrhome都配置了,要是多服務器就須要每臺服務器都配置了。
執行/root/download/solr-4.10.3/example/scripts/cloud-scripts 下的
./zkcli.sh -zkhost 192.168.80.128:2181,192.168.80.128:2182,192.168.80.128:2183 -cmd upconfig -confdir /user/local/solrcloud/solr/solrhome1/collection2_shard2_replica1/conf -confname myconf
配置中文分詞器IkAnalyzer
重啓tomcat
String zkHost = "192.168.80.128:2181,192.168.80.128:2182,192.168.80.128:2183";// zookerper地址
CloudSolrServer cloudSolrServer = new CloudSolrServer(zkHost);
// 指定默認連接的collection
cloudSolrServer.setDefaultCollection("collection2");
/// 設置查詢條件
SolrQuery qSolrQuery = new SolrQuery();
// 跟上面同樣,省略
QueryResponse cloudResponse = cloudSolrServer.query(qSolrQuery);
// 跟單機查詢同樣,省略。。
增刪改查跟單機版的都同樣
Download 資源
/user/local/solrcloud/zookerper1,2,3
/user/local.solrcloud/tomcat/tomcat1,2,3,4
/user/local.solrcloud/solr/solr1,2,3,4