1 準(zhǔn)備工作及相關(guān)介紹
solr和lucene的版本是同步更新的,最新版本是6.5.0。本案例使用4.10.3
java運(yùn)行環(huán)境 jdk1.7以上
mysql 5.x
tomcat7
sor歸檔文件地址: http://archive.apache.org/dist/lucene/solr/? 選擇你需要的版本和操作系統(tǒng)對(duì)應(yīng)的文件枉层。windows下載*.zip的文件吞琐。以solr-4.10.3.zip為例,解壓后獲得以下目錄結(jié)構(gòu):
solr的安裝需要涉及到solrhome與solrcore等基本概念。安裝配置solr其實(shí)與我們安裝sql數(shù)據(jù)庫(kù)類似只损,solrhome相當(dāng)于是一個(gè)home目錄,它下面包含了多個(gè)數(shù)據(jù)集合solrcore七咧。在mysql中跃惫,我們使用工具navicat時(shí),需要建立連接艾栋,然后再這個(gè)連接里建立數(shù)據(jù)庫(kù)爆存,在對(duì)應(yīng)的數(shù)據(jù)庫(kù)里建立數(shù)據(jù)表。solrhome在這里就可以理解為“數(shù)據(jù)庫(kù)”,solrcore理解為“數(shù)據(jù)表”蝗砾。
安裝
tomcat及java運(yùn)行環(huán)境這里不做介紹先较。我們需要將solr的war包復(fù)制到tomcat下携冤,并添加相關(guān)依賴包,相關(guān)的配置闲勺。
這里約定我的目錄結(jié)構(gòu)曾棕,solr的資源包解壓的目錄為d:\solr-4.10.3 以下簡(jiǎn)稱solr_4.10.3
tomcat的目錄為d:\dev\tomcat\tomcat7-solr ?以下簡(jiǎn)稱catalina_home
自定義的solrhome目錄為D:\develop\12-solr\solrhome 以下簡(jiǎn)稱solr_home
1 (目的:將官方資源包下的solr.war拷貝到本地tomcat下使用)拷貝solr.war
? 從solr下載的目錄solr_4.10.3\example\webapps 下solr.war到catalina_home\webapps目錄。在tomcat目錄下catalina_home\bin下點(diǎn)擊startup.bat 啟動(dòng)容器菜循。此時(shí)solr.war會(huì)被解壓出來(lái)翘地,將webapps下的solr.war刪除,保留解壓后的solr文件夾债朵。
2 添加擴(kuò)展服務(wù)包子眶,將solr_4.10.3\example\lib\ext 下的所有jar包(依賴日志包)拷貝到tomcat catalina_home\webapps\solr\WEB-INF\lib 下
3 配置文件添加修改
復(fù)制solr_4.10.3\example\resources 下log4j.properites 到catalina_home\webapps\solr\WEB-INF\classes 并修改catalina_home\webapps\solr\web.xml 指定solr/home的配置(將注釋取消并修改)如下
找到env-entry-name為solr/home,配置env-entry-value為D:\develop\12-solr\solrhome ?(solr-home的目錄按你的指定)序芦。
3 solrhome和solrcore的安裝
solrhome是solr服務(wù)運(yùn)行的主目錄,一個(gè)solrhome包含多個(gè) solrcore粤咪,一個(gè)solrcore目錄里有一個(gè)solr實(shí)例運(yùn)行和配置的文件和數(shù)據(jù)谚中,每個(gè)solrcore都可以獨(dú)立對(duì)外提供搜索和索引服務(wù)。多個(gè)solrcore是相互獨(dú)立的寥枝。在下載的資源文件中solr_4.10.3\example\solr(就是solrhome)下包含一個(gè)文件夾collection1(就是solrcore)宪塔,solrcore下包含conf,core.properties,README.txt,data(默認(rèn)的solr數(shù)據(jù)目錄,包含索引文件和tlog日志信息)囊拜。所謂solrcore和solrhome的安裝就是以上文件的拷貝和配置某筐。
由于tomcat下的solr服務(wù)中的web.xml指定了solrhome目錄(D:\develop\12-solr\solrhome)將solr_4.10.3\example\solr下的所有文件拷貝到D:\develop\12-solr\solrhome (solrhome,solrcore基本安裝完成冠跷,還差配置)南誊。
solrcore配置,solrcore/conf目錄下有個(gè)solrconfig.xml的配置文件蜜托。在該文件里主要配置lib,datadir,requestHandler(如果不配置抄囚,使用的是默認(rèn)的配置)
到此,基本的安裝就結(jié)束了橄务,重啟tomcat服務(wù)器幔托,訪問(wèn)本地服務(wù)器/solr就可以進(jìn)入solr的dashboard。
solrconfig.xml
solrcore下config里有一個(gè)文件solrconfig.xml用來(lái)配置solrcore的運(yùn)行信息蜂挪。核心包含lib,datadir,requestHandler
lib標(biāo)簽
solrcore需要添加擴(kuò)展依賴包,通過(guò)lib就可以指定依賴包的地址
例如其中的一個(gè)配置(這是solr_4.10.3\example\solr\collectioin1\conf\solrconfig.xml下的配置文件)
<lib dir="${solr.install.dir:../../..}/contrib/extraction/lib" regex=".*\.jar" />
<lib dir="${solr.install.dir:../../..}/dist/" regex="solr-cell-\d.*\.jar" />
這里lib的元素dir,regex表示要指定lib的目錄和匹配的表達(dá)式重挑。solr.install.dir表示solrcore的安裝目錄。../代表跳轉(zhuǎn)文件上一級(jí)棠涮。${solr.install.dir:../../..}其實(shí)就到了solr_4.10.3目錄谬哀,這個(gè)目錄里有contrib,bin,dist,docs,example。很明顯故爵,我們需要拷貝contrib和dist目錄到我們制定的目錄(不然依賴包找不到)玻粪。之前指定了solr_home為D:\develop\12-solr\solrhome隅津,我們將contrib和dist復(fù)制到D:\develop\12-solr\下,修改D:\develop\12-solr\solrhome\collection1\conf\solrconfig.xml
此時(shí)我們lib的dir需要修改前綴為${solr.install.dir:../..}
datadir標(biāo)簽
<dataDir>${solr.data.dir:}</dataDir> 是默認(rèn)的配置劲室,solr.data.dir:表示solrcore下伦仍。這里指定的是solrcore/data目錄,如果需要配置就指定目錄則在:后填寫路徑很洋,一般我們不修改充蓝。
requestHandler標(biāo)簽
requestHandler請(qǐng)求處理器,定義了索引和搜索的訪問(wèn)方式喉磁,例如name="/update" class="solr.UpdateRequestHandler" 其實(shí)與servlet在web.xml中定義handlerMapping一樣的谓苟。
多solrcore配置
配置多solrcore的好處。在進(jìn)行集群時(shí)协怒,必須配置多sorscore,每個(gè)sorscore之間是獨(dú)立的涝焙,都可以單獨(dú)的對(duì)外提供服務(wù),不同的業(yè)務(wù)模塊可以使用不同的sorscore來(lái)提供搜索和索引服務(wù)孕暇。
多solrcore就是將solrcore復(fù)制到solrhome下仑撞,并修改core.properties設(shè)置唯一的name。
Schema.xml
在solrcore下的conf目錄有schema.xml文件妖滔,主要配置了solrcore的一些數(shù)據(jù)信息隧哮,包括Field和FieldType的定義等信息。在solr中座舍,F(xiàn)ield和FieldType都需要先定義后使用沮翔。
Field
Field在solr中代表的意義就像是數(shù)據(jù)表里的字段。
<Field name="??" type="?" indexed="??" ?stored="??" required="??" multiValued="??" />
name:指定域名稱
Type:指定域的類型(type需要定義曲秉,使用fieldType聲明)
Indexed: 是否索引
Stored:是否存儲(chǔ)
Required:是否必須
multiValued:是否多值(例如商品中的圖片列表)
dynamicField 動(dòng)態(tài)域
<dynamicField name="" type="" indexed="" stored="" />
name:指定動(dòng)態(tài)域的命名規(guī)則采蚀,一般情況下name是匹配的例如:*_random,將匹配后綴為_random的field。
uniqueKey ?指定唯一鍵
<uniqueKey>id</uniqueKey>
其中Field的name為id的域岸浑,必須設(shè)置required=true,在一個(gè)schema.xml文件中有且僅有一個(gè)唯一鍵搏存。
copyField 復(fù)制域
就像管道一樣,從source復(fù)制到dest里
<copyField source="" dest="" />
source: 要復(fù)制的源域的域名
dest:目標(biāo)域的域名
dest所指定的目標(biāo)域矢洲,必須設(shè)置multiValued="true"
FieldType ?定義域類型
其中包含name,class,analyzer(分析器)璧眠,tokenizer(分詞器),F(xiàn)ilter(指定過(guò)濾器)
由于lucene支持英文和德語(yǔ)读虏,對(duì)于中文的拆分责静,我們需要使用第三方的jar包,ikanalyzer就是一個(gè)常用的中文分詞器盖桥≡煮Γ可以對(duì)一段中文進(jìn)行文字劃分。(ikanalyzer后續(xù)介紹)
中文分詞器ikanalyer配置
ref:?https://github.com/wks/ik-analyzer
IKAnalyzer是一個(gè)開源的揩徊,基于Java卡發(fā)的輕量級(jí)中文分詞工具包腰鬼,從06年12月推出1.0版本開始嵌赠,推出了3個(gè)大版本,最初它以Lucene為主體熄赡,集合詞典分詞和文法分析算法的中文分詞組件姜挺。新版本IKAnalyzer3.0則采用了特有的"正向迭代最細(xì)粒度切分算法",具有83萬(wàn)字/秒的高速處理彼硫。
針對(duì)Lucene全文搜索優(yōu)化的查詢分析器IKqueryParser 是值得推薦的炊豪,它引入了簡(jiǎn)單搜索表達(dá)式,采用歧義分析算法優(yōu)化查詢關(guān)鍵字的搜索排列組合拧篮,能極大提高Lucene檢索的命中率词渤。
IKAnalyzer作者林良益(linliangyi2007@gmail.com) 項(xiàng)目網(wǎng)站為http://code.google.com/p/ik-analyzer
maven工程的坐標(biāo)為
groupId:org.wltea.ik-analyzer
artifactId:ik-analyzer
version:3.2.8
下載ikanalyer? 個(gè)人選擇的IK Analyzer 2012FF_hf1.zip解壓后復(fù)制IkAanlyzer.cfg.xml,stopword.dic 到catalina_home/webapps\solr\WEB-INF\classes下。
復(fù)制IKAnalyzer2012FF_u1.jar到catalina_home\webapps\solr\WEB-INF\lib
配置FieldType 串绩,修改對(duì)應(yīng)的solrcore\conf 下的schema.xml
添加<fieldType name="text_ik" class="solr.TextField">
<analyzer class="org.wltea.analyzer.lucene.IKAnalyzer"></analyzer>
</fieldType>
在定義Field的時(shí)候就可以使用type="text_ik" 進(jìn)行中文分詞(假如定義了一個(gè)type="text_ik"的field名稱為content_ik)缺虐。重啟tomcat在solr的dashboard中,選擇solrcore赏参,展開Analysis 志笼,選擇Fieldname/FieldType 例如content_ik是type為text_ik的field。在Fileld Value(Index)里輸入中文文字把篓,然后再右側(cè)點(diǎn)擊Analyse Values就會(huì)返回輸入的中文的分詞結(jié)果。
DataImport 插件
在了解了solr相關(guān)的操作后腰涧,就開始應(yīng)用了韧掩,這里還存在一個(gè)問(wèn)題,數(shù)據(jù)庫(kù)中的數(shù)據(jù)如何映射到solr中窖铡,solr提供了dataimport插件疗锐。在我們下載的資源包路徑solr_4.10.3\dist下,拷貝solr-dataimporthandler-4.10.3.jar 到D:\develop\12-solr\contrib\dataimporthandler\lib 下(想想solrconfig.xml中的lib配置的路徑)费彼,contrib沒有dataimport需要我們手動(dòng)建立滑臊。然后拷貝數(shù)據(jù)庫(kù)(本地使用的mysql)的連接驅(qū)動(dòng)包mysql-connector-java-5.*.jar 到contrib\db\lib下(沒有文件夾就建立)。添加jar包后箍铲,需要讓solrcore引用jar包雇卷,進(jìn)入相關(guān)solrcore的conf目錄,修改solrconfig.xml 添加<lib dir="??" regex=".*\.jar" />(這里不做說(shuō)明,可參考其它的配置)
配置requestHandler
solrconfig.xml中颠猴,添加一個(gè)name="/dataimport"的requestHandler关划,可參考其它requestHandler
例如<requestHandler name="/dataimport" class="org.apache.solr.handler.dataimport.DataimportHandler" >
<lst name="defaults"><str name="config">data-config.xml</str></lst>
</requestHandler>
上面的配置指定了dataimport的配置文件data-config.xml,位于solrconfig.xml同級(jí)目錄下翘瓮。
<?xml version="1.0" encoding="UTF-8" ?>
<dataConfig>
<dataSource type="JdbcDataSource"
driver="com.mysql.jdbc.Driver"
url="jdbc:mysql://localhost:3306/solr"
user="root"
password="root"/>
<document>
<entity name="product" query="SELECT pid,name,catalog,catalog_name,price,description,picture FROM products">
<field column="pid" name="id"/>
<field column="name" name="product_name"/>
<field column="catalog" name="product_catalog"/>
</entity>
</document>
</dataConfig>
重啟tomcat訪問(wèn)solr的dashboard在相關(guān)的solrcore中點(diǎn)擊Dataimport就可以查看到界面贮折,
執(zhí)行execute就可以將數(shù)據(jù)庫(kù)的數(shù)據(jù)按照data-config.xml的配置導(dǎo)入到solr中。