我們下載的Solr包后,進(jìn)入Solr所在的目錄,我們可以看到以下幾個(gè)目錄:build、client、dist、example、lib、site、src。下面分別對其進(jìn)行介紹。

沈陽網(wǎng)站建設(shè)公司創(chuàng)新互聯(lián),沈陽網(wǎng)站設(shè)計(jì)制作,有大型網(wǎng)站制作公司豐富經(jīng)驗(yàn)。已為沈陽近1000家提供企業(yè)網(wǎng)站建設(shè)服務(wù)。企業(yè)網(wǎng)站搭建\成都外貿(mào)網(wǎng)站建設(shè)要多少錢,請找那個(gè)售后服務(wù)好的沈陽做網(wǎng)站的公司定做!
1) build:該目錄是在ant build過程中生成的,其中包含了未被打包成jar或是war的class文件以及一些文檔文件。
2) client:該目錄包含了特定語言的Solr客戶端API,使得使用其他語言的用戶能通過HTTP用XML與Solr進(jìn)行通話。現(xiàn)在該目錄里面雖然包含javascript、python、ruby三個(gè)子目錄,但是到目前為止只包含一部分的ruby的代碼,其他語言仍是空的。另外,Solr的Java客戶端稱為SolrJ,其代碼位于src/solrj目錄下面。在之后的文章中我會詳細(xì)介紹Solr客戶端的使用。
3) dist:該目錄包含build過程中產(chǎn)生的war和jar文件,以及相關(guān)的依賴文件。還記得上一篇文章中,我們在build 1.4版本的Solr源代碼后需要部署example嗎?其實(shí)就是將該目錄下面的apache-solr-1.4.war部署到Jetty上面去,并重命名為solr.war。
4) example:這個(gè)目錄實(shí)際上是Jetty的安裝目錄。其中包含了一些樣例數(shù)據(jù)和一些Solr的配置。
其中一些子目錄也比較重要,這里也對它們稍作介紹。
l example/etc:該目錄包含了Jetty的配置,在這里我們可以將Jetty的默認(rèn)端口從8983改為80端口。
l 將其中的8983端口換成80端口。注意更改端口后啟動Jetty可能會提示你沒有權(quán)限,你需要使用sudo java -jar start.jar來運(yùn)行。
l example/multicore:該目錄包含了在Solr的multicore中設(shè)置的多個(gè)home目錄。在之后的文章中我會對其進(jìn)行介紹。
l example/solr:該目錄是一個(gè)包含了默認(rèn)配置信息的Solr的home目錄。
詳見下面的“solr home說明”
l example/webapps:Jetty的webapps目錄,該目錄通常用來放置Java的Web應(yīng)用程序。在Solr中,前面提到的solr.war文件就部署在這里。
5) lib:該目錄包含了所有Solr的API所依賴的庫文件。其中包括Lucene,Apache commons utilities和用來處理XML的Stax庫。
6) site:該目錄僅僅包含了Solr的官網(wǎng)的網(wǎng)頁內(nèi)容,以及一些教程的PDF文檔。
7) src:該目錄包含了Solr項(xiàng)目的整個(gè)源代碼。這里對其各個(gè)子目錄也做相應(yīng)的介紹。
l src/java:該目錄存放的是Solr使用Java編寫的源代碼。
l src/scripts:該目錄存放的是配置Solr服務(wù)器的Unix BashShell腳本,在后面介紹多服務(wù)器配置中將會有重要的作用。
l src/solrj:前面提到過該目錄存放的是Solr的Java版本的客戶端代碼。
l src/test:該目錄存放的是測試程序的源代碼和測試文件。
l src/webapp:該目錄存放的是管理Solr的Web頁面,包括Servlet和JSP文件,其構(gòu)成了前面提到的WAR文件。管理Solr的JSP頁面在web/admin目錄下面,如果你有興趣折騰Solr可以找到相應(yīng)的JSP的頁面對其進(jìn)行設(shè)置
1.4.2 Solr home說明
所謂的Solr home目錄實(shí)際上是一個(gè)運(yùn)行的Solr實(shí)例所對應(yīng)的配置和數(shù)據(jù)(Lucene索引)。在上一篇文章中我提到過在Solr的example/solr目錄就是一個(gè)Solr用做示例的默認(rèn)配置home目錄。實(shí)際上example/multicore也是一個(gè)合法的Solr home目錄,只不過是用來做mult-core設(shè)置的。那么我們來看看example/solr這個(gè)目錄里面都有些什么。
example/solr目錄下主要有以下一些目錄和文件:
1) bin:如果你需要對Solr進(jìn)行更高級的配置,該目錄建議用來存放Solr的復(fù)制腳本。
2) conf :該目錄下面包含了各種配置文件,下面列出了兩個(gè)最為重要的配置文件。其余的.txt和.xml文件被這兩個(gè)文件所引用,如用來對文本進(jìn)行特殊的處理。
l conf/schema.xml:該文件是索引的schema,包含了域類型的定義以及相關(guān)聯(lián)的analyzer鏈。
l conf/solrconfig.xml:該文件是Solr的主配置文件。
l conf/xslt:該目錄包含了各種XSLT文件,能將Solr的查詢響應(yīng)轉(zhuǎn)換成不同的格式,如:Atom/RSS等。
3) data:包含了Lucene的二進(jìn)制索引文件。
4) lib:該目錄是可選的。用來放置附加的Java JAR文件,Solr在啟動時(shí)會自動加載該目錄下的JAR文件。這就使得用戶可以對Solr的發(fā)布版本(solr.war)進(jìn)行擴(kuò)展。如果你的擴(kuò)展并不對Solr本身進(jìn)行修改,那么就可以將你的修改部署到JAR文件中放到這里。
Solr是如何找到運(yùn)行所需要的home目錄的呢?
Solr首先檢查名為solr.solr.home的Java系統(tǒng)屬性,有幾種不同的方式來設(shè)置該Java系統(tǒng)屬性。一種不管你使用什么樣的Java應(yīng)用服務(wù)器或Servlet引擎都通用的方法是在調(diào)用Java的命令行中進(jìn)行設(shè)置。所以,你可以在啟動Jetty的時(shí)候顯式地指定Solr的home目錄java -Dsolr.solr.home=solr/ -jar start.jar。另一種通用的方法是使用JNDI,將home目錄綁定到j(luò)ava:comp/env/solr/home。并向src/webapp/web/WEB-INF/web.xml添加以下一段代碼:
1 env-entry
2 env-entry-namesolr/home/env-entry-name
3 env-entry-valuesolr//env-entry-value
4 env-entry-typejava.lang.String/env-entry-type
5 /env-entry
實(shí)際上這段XML在web.xml文件中已經(jīng)存在,你只需要把原來注釋掉的xml取消注釋,添加你所要指向的home目錄即可。因?yàn)樾薷牧藈eb.xml文件,所以你需要運(yùn)行antdist-war來重新打包之后再部署WAR文件。
最后,如果Solr的home目錄既沒有通過Java系統(tǒng)屬性指定也沒有通過JNDI指定,那么他將默認(rèn)指向solr/。
在產(chǎn)品環(huán)境中,我們必須設(shè)置Solr的home目錄而不是讓其默認(rèn)指向solr/。而且應(yīng)該使用絕對路徑,而不是相對路徑,因?yàn)槟阌锌赡軓牟煌哪夸浵旅鎲討?yīng)用服務(wù)器。
注:Jetty 是一個(gè)開源的servlet容器,它為基于Java的web內(nèi)容,例如JSP和servlet提供運(yùn)行環(huán)境。Jetty是使用Java語言編寫的,它的API以一組JAR包的形式發(fā)布。開發(fā)人員可以將Jetty容器實(shí)例化成一個(gè)對象,可以迅速為一些獨(dú)立運(yùn)行(stand-alone)的Java應(yīng)用提供網(wǎng)絡(luò)和web連接。
我們先從使用者的角度出發(fā),最先看到的當(dāng)然是servlet,因?yàn)镾olr本身是個(gè)獨(dú)立的網(wǎng)絡(luò)應(yīng)用程序,需要在Servlet容器中運(yùn)行來提供服務(wù),所以servlet是用戶接觸的最外層。我們看看org.apache.solr.servlet包。這個(gè)包很簡單,只有兩個(gè)類:SolrServlet和SolrUpdateServlet.我們很容易從類名中猜出這兩個(gè)類的用途。
SolrServlet類繼承HttpServlet類,只有四個(gè)方法:
· init()
· destroy()
· doGet()
· doPost()
SolrServlet類中除了普通的Java類對象(包括Servlet相關(guān)的)外,有四個(gè)Solr本身的類,還有一個(gè)Solr本身的異常。其中兩個(gè)類和一個(gè)異常屬于org.apache.solr.core包,兩個(gè)類屬于org.apache.solr.request包。屬于core包的有:
· Config:
· SolrCore:
屬于request包的有:
· SolrQueryResponse:
· QueryResponseWriter:
分析一下這個(gè)SolrServlet類。首先servlet會調(diào)用init()方法進(jìn)行初始化:通過Context查找java:comp/env/solr/home來確定Solr的主目錄(home),接著調(diào)用Config.setInstanceDir(home)方法設(shè)置這個(gè)實(shí)例的目錄。然后通過SolrCore.getSolrCore()來獲得一個(gè)SolrCore實(shí)例。destroy()方法將會在Servlet對象銷毀時(shí)調(diào)用,僅僅調(diào)用core.close()關(guān)閉SolrCore實(shí)例。
當(dāng)用戶請求進(jìn)來時(shí)doPost()簡單地將任務(wù)交給doGet()完成,主要的任務(wù)由doGet()完成。分析一下doGet()方法:
1) 使用SolrCore和doGet()參數(shù)request生成一個(gè)SolrServletRequest對象(注意:這個(gè)SolrServletRequest類不是公開類,位于org.apache.solr.servlet包中,繼承了SolrQueryRequestBase類,僅僅接受SolrCore和HttpServletRequest對象作為參數(shù))
2) 然后SolrCore執(zhí)行execute()方法(參數(shù)為SolrServletRequest和SolrQueryResponse)
由此可見,真正的處理核心是SolrCore的execute方法
solr-4.10.2,當(dāng)下幾個(gè)出名的分詞器IKAnalyzer已支持該版本。現(xiàn)在開發(fā)的產(chǎn)品需要使用搜索功能,lucene是首選,于是再度研究了一翻,沒有多大難度。同時(shí)也不在直接使用lucene庫,而是使用solr,大大簡化了創(chuàng)建索引與查詢索引的難度。solr這種分布式索引方式對性能的控制更加有把握,因?yàn)樗С侄嗪恕?fù)制功能,我們還可以寫代碼實(shí)現(xiàn)讀寫分離等性能擴(kuò)展功能。itJob
zookeeper配置
(1)解壓為zookeepertar -xf -C /home/myuser/zookeeper/
復(fù)制zookeeper文件夾3份,分別重名名為zookeeperA,zookeeperB,zookeeperC。并且創(chuàng)建數(shù)據(jù)快照以及日志存放文件夾,命名為zooA,zooB,zooC。(2)編輯對應(yīng)的zookeeper配置文件,復(fù)制zookeeperconf下zoo_sample.cfg為zoo.cfgcd /home/myuser/zookeeperA/conf
cp zoo_sample.cfg zoo.cfg
(3)修改zoo.cfg# 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=/home/myuser/zooA/data
# the port at which the clients will connect
clientPort=2181
# ZooKeeper server and its port no. # ZooKeeper ensemble should know about every other machine in the ensemble # specify server id by creating 'myid' file in the dataDir # use hostname instead of IP address for convenient maintenance
server.1=127.0.0.1:2888:3888
server.2=127.0.0.1:2988:3988
server.3=127.0.0.1:2088:3088
#
# Be sure to read the maintenance section of the
# administrator guide before turningtickTime:心跳時(shí)間,為了確保連接存在的,以毫秒為單位,最小超時(shí)時(shí)間為兩個(gè)心跳時(shí)間initLimit:多少個(gè)心跳時(shí)間內(nèi),允許其他server連接并初始化數(shù)據(jù),如果ZooKeeper管理的數(shù)據(jù)較大,則應(yīng)相應(yīng)增大這個(gè)值clientPort:服務(wù)的監(jiān)聽端口dataDir:用于存放內(nèi)存數(shù)據(jù)庫快照的文件夾,同時(shí)用于集群的myid文件也存在這個(gè)文件夾里(注意:一個(gè)配置文件只能包含一個(gè)dataDir字樣,即使它被注釋掉了。)dataLogDir:用于單獨(dú)設(shè)置transaction log的目錄,transaction log分離可以避免和普通log還有快照的競爭
syncLimit:多少個(gè)tickTime內(nèi),允許follower同步,如果follower落后太多,則會被丟棄。
(4)創(chuàng)建myid文件cd /home/myuser/zooA/data
sudo sh -c 'echo "1" myid'
其他文件夾類似創(chuàng)建myid文件,zookeeperB為2,zookeeperC為3(5)啟動zookeepercd /home/myuser/zookeeperA/bin
sudo sh zkServer.sh start
查看zookeeper狀態(tài)[root@weibo bin]# sh zkServer.sh status
JMX enabled by default
Using config: /home/weibo/zookeeperA/bin/../conf/zoo.cfg
Mode: follower
啟動OK,依次啟動另外兩臺zookeeper,啟動第一臺zookeeper后,你可以觀察bin下的zookeeper.out可以看到報(bào)錯(cuò),connection refused,沒有關(guān)系,zookeeper需要等待其他另個(gè)節(jié)點(diǎn)的加入,全部啟動之后就正常了。(6)客戶端連接zookeeper[root@weibo bin]# sh zkCli.sh
Connecting to localhost:2181
2013-05-10 15:00:25,363 [myid:] - INFO [main:Environment@100] - Client environment:zookeeper.version=3.4.5-1392090, builtconfigs:保存上傳的配置文件信息clusterstate.json:集群狀態(tài)jsonaliases:別名jsonlive_node:當(dāng)solr服務(wù)器啟動的時(shí)候,會注冊到這里overseer:保存shard信息overseer_elect:節(jié)點(diǎn)選舉collections:所有的collection
Solr及Tomcat安裝配置
(1)下載solr4.2,把solr-4.2.1\example\solr\collection1\conf 目錄下的配置文件上傳的zookeeper(2)上傳solr配置文件到zookeeperJava -classpath .:/home/weibo/tomcat_solr_/webapps/solr/WEB-INF/lib/* org.apache.solr.cloud.ZkCLI -cmd upconfig -zkhost 127.0.0.1:2181,127.0.0.1:2281,127.0.0.1:2381 -confdir /home/weibo/solr-config -confname weiboconfig
(3)把配置文件和目標(biāo)collection聯(lián)系起來java -classpath .:/home/weibo/tomcat_solr_/webapps/solr/WEB-INF/lib/* org.apache.solr.cloud.ZkCLI -cmd linkconfig -collection weibocollection -confname weiboconfig -zkhost 127.0.0.1:2181,127.0.0.1:2281,127.0.0.1:2381
(4)復(fù)制3個(gè)tomcat,在conf/Catalina/localhost創(chuàng)建solr.xml(如果目錄不存在,請自行創(chuàng)建),內(nèi)容如下?xml version="1.0" encoding="utf-8"?
Context docBase="/home/weibo/solr-/solr.war" debug="0" corssContext="false"
Environment name="solr/home" type="java.lang.String" value="/home/weibo/solr-/" override="true"/
/Context
crossContext不能設(shè)置為true,這里注意(5)在你的solr home目錄創(chuàng)建solr.xml?xml version="1.0" encoding="UTF-8" ?
solr persistent="true"
cores adminPath="/admin/cores" zkClientTimeout="20000" hostPort="8080"
/cores
/solr
其他tomcat對應(yīng)設(shè)置對應(yīng)的端口號(6)編輯tomcat bin/catalina.sh(Windows下catalina.bat),加入JAVA_OPTS='-DzkHost=127.0.0.1:2181,127.0.0.1:2281,127.0.0.1:2381'
這里就是solr和zookeeper交互的地方了(7)依次啟動tomcat,創(chuàng)建core及shard,訪問solr
分享題目:solr集群java代碼 solr schema
網(wǎng)頁網(wǎng)址:http://chinadenli.net/article2/ddgshic.html
成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供企業(yè)網(wǎng)站制作、做網(wǎng)站、建站公司、定制開發(fā)、Google、網(wǎng)站設(shè)計(jì)公司
聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請盡快告知,我們將會在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來源: 創(chuàng)新互聯(lián)