title: Solr安裝配置及使用
categories: 搜索
tags: Solr
date: 2019-07-25 15:47:55
1.Solr安裝與配置
1.1什么是Solr
大多數(shù)搜索引擎應(yīng)用都必須具有某種搜索功能紫皇,問(wèn)題是搜索功能往往是巨大的資源消耗并且它們由于沉重的數(shù)據(jù)庫(kù)加載而拖垮你的應(yīng)用的性能。
這就是為什么轉(zhuǎn)移負(fù)載到一個(gè)外部的搜索服務(wù)器是一個(gè)不錯(cuò)的主意,Apache Solr是一個(gè)流行的開源搜索服務(wù)器扶欣,它通過(guò)使用類似REST的HTTP
API痴奏,這就確保你能從幾乎任何編程語(yǔ)言來(lái)使用solr劲妙。
Solr是一個(gè)開源搜索平臺(tái)掖桦,用于構(gòu)建搜索應(yīng)用程序限府。 它建立在Lucene(全文搜索引擎)之上夺颤。 Solr是企業(yè)級(jí)的,快速的和高度可擴(kuò)展的胁勺。
使用Solr構(gòu)建的應(yīng)用程序非常復(fù)雜世澜,可提供高性能。
為了在CNET網(wǎng)絡(luò)的公司網(wǎng)站上添加搜索功能姻几,Yonik Seely于2004年創(chuàng)建了Solr宜狐。并在2006年1月势告,它成為Apache軟件基金會(huì)下的一個(gè)開源項(xiàng)目。
并于2016年發(fā)布最新版本Solr 6.0抚恒,支持并行SQL查詢的執(zhí)行咱台。
Solr可以和Hadoop一起使用。由于Hadoop處理大量數(shù)據(jù)俭驮,Solr幫助我們從這么大的源中找到所需的信息回溺。不僅限于搜索,Solr也可以用于存儲(chǔ)目的混萝。
像其他NoSQL數(shù)據(jù)庫(kù)一樣遗遵,它是一種非關(guān)系數(shù)據(jù)存儲(chǔ)和處理技術(shù)。
總之逸嘀,Solr是一個(gè)可擴(kuò)展的车要,可部署,搜索/存儲(chǔ)引擎崭倘,優(yōu)化搜索大量以文本為中心的數(shù)據(jù)翼岁。
1.2 Solr安裝
安裝流程如上圖:
- 發(fā)布solr的web工程
- 加入日志依賴包
- 創(chuàng)建工作空間
- 指定solr工作空間
- 創(chuàng)建solr索引庫(kù)
首先解壓tomcat,并將tomcat放在D:\solr\apache-tomcat-8.5.23目錄下司光,在tomcat的webapps目錄下創(chuàng)建solr目錄琅坡。如下圖:
找到solr的web工程,工程在solr-5.3.1\server\solr-webapp\webapp目錄下,將該目錄下所有文件拷貝到tomcat的webapps/solr目錄下残家,如下圖
1.2.2 加入日志依賴
找到日志包榆俺,日志包在solr-5.3.1\server\lib\ext目錄下,并將所有jar包加入到tomcat的webapps/solr/WEB-INF/lib目錄下坞淮。
加入log4j.properties
將solr-5.3.1\server\resources目錄下的log4j.properties加入到tomcat的webapps/solr/WEB-INF/classes目錄下茴晋,不過(guò)classes目錄不存在,需要手動(dòng)創(chuàng)建回窘。
1.2.3 創(chuàng)建工作空間
在tomcat的webapps/solr目錄下創(chuàng)建solrhome目錄晃跺,把該目錄作為solr的工作空間,該工作空間主要用于存儲(chǔ)創(chuàng)建索引的索引文件信息毫玖。該目錄創(chuàng)建后,需要拷貝solr-5.3.1\server\solr\solr.xml到該目錄(solrhome)下凌盯,solr才能識(shí)別該目錄為solr工作空間付枫。
1.2.4 指定solr工作空間
創(chuàng)建solrhome工作空間后,需要告訴solr的web工程solrhome的路徑驰怎。打開tomcat的webapps/solr/WEB-INF下的web.xml文件阐滩,找到第40行。
把注釋去掉县忌,并將<env-entry-value>/put/your/solr/home/here</env-entry-value>的值換成solrhome的路徑
1.2.5 創(chuàng)建solr索引庫(kù)
我們?cè)趕olrhome目錄下創(chuàng)建一個(gè)文件叫collection1掂榔,該目錄用于存儲(chǔ)我們創(chuàng)建的索引信息继效。索引信息需要引入一些核心配置,對(duì)應(yīng)核心配置在solr-5.3.1\server\solr\configsets目錄下装获,我們拷貝sample_techproducts_configs目錄下的所有文件瑞信,并粘貼到collection1目錄中。
1.2.6 啟動(dòng)tomcat并關(guān)聯(lián)索引庫(kù)
啟動(dòng)tomcat穴豫,并訪問(wèn) http://localhost:8080/solr 效果如下:
此時(shí)看到左下角有一段提示: No cores available 表明沒有索引庫(kù)凡简,原因是剛才我們手動(dòng)創(chuàng)建的索引庫(kù)并未交給solr管理,需要?jiǎng)?chuàng)建對(duì)應(yīng)關(guān)聯(lián)信息精肃。
點(diǎn)擊 No cores available 彈出一個(gè)添加界面秤涩,分別填寫對(duì)應(yīng)信息,然后點(diǎn)擊 Add Core 按鈕即可司抱。
此時(shí)會(huì)出現(xiàn)collection1索引庫(kù)對(duì)應(yīng)信息
1.2.7 其他依賴工具安裝
我們點(diǎn)擊solr的管理界面的logging筐眷,發(fā)現(xiàn)有一片警告,原因是solr默認(rèn)還依賴了其他包习柠,當(dāng)然這些包可以引用也可以不引用匀谣,不影響solr使用。不過(guò)為了讓這里不出現(xiàn)警告津畸,我們還是安裝一下振定。
將solr-5.3.1目錄下的contrib和dist目錄拷貝到tomcat的webapps/solr/solrhome目錄下,并修改solrhome目錄下的的collection1/conf/solrconfig.xml,修改75行
修改前:
修改后:
其中${solr.install.dir:}指的是當(dāng)前索引所在的位置 collection1文件夾里肉拓,../表示向上一級(jí)目錄后频,這里從collection1里向上一級(jí)查找的話就正好是contrib和dist目錄。此時(shí)再次重啟tomcat暖途,黃色警告消失卑惜!
1.3 管理界面介紹
1.3.1 Dashboard
儀表盤,顯示了該Solr實(shí)例開始啟動(dòng)運(yùn)行的時(shí)間驻售、版本露久、系統(tǒng)資源、jvm等信息欺栗。
1.3.2 Logging
Solr運(yùn)行日志信息
1.3.3 Cloud
Cloud即SolrCloud毫痕,即Solr云(集群),當(dāng)使用Solr Cloud模式運(yùn)行時(shí)會(huì)顯示此菜單.
1.3.4 Core Admin
Solr Core的管理界面迟几。在這里可以添加SolrCore實(shí)例(有bug消请,不推薦使用瀏覽器界面添加SolrCore)。
1.3.5 java properties
Solr在JVM 運(yùn)行環(huán)境中的屬性信息类腮,包括類路徑臊泰、文件編碼、jvm內(nèi)存設(shè)置等信息蚜枢。
1.3.6 Tread Dump
顯示Solr Server中當(dāng)前活躍線程信息缸逃,同時(shí)也可以跟蹤線程運(yùn)行棧信息针饥。
1.3.7 Core selector
選擇一個(gè)SolrCore進(jìn)行詳細(xì)操作,如下:
1.3.7.1 dataimport
可以定義數(shù)據(jù)導(dǎo)入處理器需频,從關(guān)系數(shù)據(jù)庫(kù)將數(shù)據(jù)導(dǎo)入到Solr索引庫(kù)中丁眼。
默認(rèn)沒有配置,需要手工配置贺辰。
1.3.7.2 Document
通過(guò)/update表示更新索引户盯,solr默認(rèn)根據(jù)id(唯一約束)域來(lái)更新Document的內(nèi)容,如果根據(jù)id值搜索不到id域則會(huì)執(zhí)行添加操作饲化,如果找到則更新莽鸭。
通過(guò)此菜單可以創(chuàng)建索引、更新索引吃靠、刪除索引等操作硫眨,界面如下:
- overwrite="true" : solr在做索引的時(shí)候,如果文檔已經(jīng)存在巢块,就用xml中的文檔進(jìn)行替換
- commitWithin="1000" : solr 在做索引的時(shí)候礁阁,每隔1000(1秒)毫秒,做一次文檔提交族奢。為了方便測(cè)試也可以在Document中立即提交姥闭,</doc>后添加“<commit/>”
1.3.7.3 Analysis
通過(guò)此界面可以測(cè)試索引分析器和搜索分析器的執(zhí)行情況
1.3.7.4 Query
通過(guò)/select執(zhí)行搜索索引,必須指定“q”查詢條件方可搜索越走。
第2章 中文分析器IK Analyzer
2.1 IK Analyzer簡(jiǎn)介
IK Analyzer 是一個(gè)開源的棚品,基亍 java 語(yǔ)言開發(fā)的輕量級(jí)的中文分詞工具包。從 2006年 12 月推出 1.0 版開始廊敌, IKAnalyzer 已經(jīng)推出了 4 個(gè)大版本。最初锅纺,它是以開源項(xiàng)目Luence 為應(yīng)用主體的肋殴,結(jié)合詞典分詞和文法分析算法的中文分詞組件。從 3.0 版本開始护锤,IK 發(fā)展為面向 Java 的公用分詞組件,獨(dú)立亍 Lucene 項(xiàng)目,同時(shí)提供了對(duì) Lucene 的默認(rèn)優(yōu)化實(shí)現(xiàn)拧粪。在 2012 版本中沧侥,IK 實(shí)現(xiàn)了簡(jiǎn)單的分詞歧義排除算法,標(biāo)志著 IK 分詞器從單純的詞典分詞向模擬語(yǔ)義分詞衍化魄鸦。
2.2 IK Analyzer配置
步驟:
1宴杀、把 IKAnalyzer的依賴包添加到 webapps/solr/WEB-INF/ lib 目錄下
2、把擴(kuò)展詞典拾因、停用詞詞典旺罢、配置文件放到 solr 工程的 WEB-INF/classes 目錄下。
3绢记、修改 Solrhome 的 schema.xml 文件扁达,配置一個(gè) FieldType,使用 IKAnalyzer,可以在320行添加蠢熄。
第3章 配置域
schema.xml文件在SolrCore的conf目錄下跪解,在此配置文件中定義了Filed域以及域的類型等一些配置。在solr中域必須先定義后使用签孔。
域相當(dāng)于數(shù)據(jù)庫(kù)的表字段叉讥,用戶存放數(shù)據(jù),因此用戶根據(jù)業(yè)務(wù)需要去定義相關(guān)的Field(域)饥追,一般來(lái)說(shuō)图仓,每一種對(duì)應(yīng)著一種數(shù)據(jù),用戶對(duì)同一種數(shù)據(jù)進(jìn)行相同的操作但绕。
域的常用屬性:
· name:指定域的名稱
· type:指定域的類型
· indexed:是否索引
· stored:是否存儲(chǔ)
· required:是否必須
· multiValued:是否多值,存儲(chǔ)多個(gè)值時(shí)設(shè)置為true救崔,solr允許一個(gè)Field存儲(chǔ)多個(gè)值,比如存儲(chǔ)一個(gè)用戶的好友id(多個(gè))壁熄,商品的圖片(多個(gè)帚豪,大圖和小圖)
3.1 域
修改solrhome的schema.xml 文件 設(shè)置業(yè)務(wù)系統(tǒng) Field
3.2 復(fù)制域
<copyField source="cat" dest="text"/>
可以將多個(gè)Field復(fù)制到一個(gè)Field中,以便進(jìn)行統(tǒng)一的檢索草丧。當(dāng)創(chuàng)建索引時(shí)狸臣,solr服務(wù)器會(huì)自動(dòng)的將源域的內(nèi)容復(fù)制到目標(biāo)域中。
- source:源域
- dest:目標(biāo)域昌执,搜索時(shí)懂拾,指定目標(biāo)域?yàn)槟J(rèn)搜索域檬果,可以提高查詢效率选脊。
定義目標(biāo)域:
<field name="text" type="text_general" indexed="true" stored="false" multiValued="true"/>
目標(biāo)域必須要使用:multiValued="true"
復(fù)制域的作用在于將某一個(gè)Field中的數(shù)據(jù)復(fù)制到另一個(gè)域中.在我們項(xiàng)目中偏灿,搜索關(guān)鍵詞的時(shí)候翁垂,一般會(huì)搜索標(biāo)題沿猜、分類名稱邢疙、商家名稱、品牌名稱痕支,如果要我們搜索卧须,一般會(huì)挨個(gè)挨個(gè)匹配花嘶,就像使用SQL語(yǔ)句中的OR一樣椭员,這種效率比較低侍芝,我們可以使用復(fù)制域州叠,將多個(gè)域的數(shù)據(jù)集中到一個(gè)域中搜索咧栗。
過(guò)去SQL實(shí)現(xiàn)示例
select * from table where title like '%華為%' or category like '%華為%' or seller like '%%華為' or brand like '%華為%'
使用復(fù)制域?qū)崿F(xiàn)示例:
select * from table where keywords like '%華為%'
一般會(huì)搜索標(biāo)題楼熄、分類名稱可岂、商家名稱、品牌名稱平斩,我們可以把這幾個(gè)組合到一起去绘面,說(shuō)通俗點(diǎn)揭璃,就是講多個(gè)域的值拼接到一起瘦馍,組成一個(gè)新的域。我們項(xiàng)目中可以如下實(shí)現(xiàn):
<field name="item_keywords" type="text_ik" indexed="true"stored="false" multiValued="true"/>
<copyField source="item_title" dest="item_keywords"/>
<copyField source="item_category" dest="item_keywords"/>
<copyField source="item_seller" dest="item_keywords"/>
<copyField source="item_brand" dest="item_keywords"/>
3.3 動(dòng)態(tài)域
當(dāng)我們需要?jiǎng)討B(tài)擴(kuò)充字段時(shí)院崇,我們需要使用動(dòng)態(tài)域底瓣。對(duì)于品優(yōu)購(gòu)濒持,規(guī)格的值是不確定的柑营,所以我們需要使用動(dòng)態(tài)域來(lái)實(shí)現(xiàn)。
<dynamicField name="*_s" type="string" indexed="true" stored="true" />
name:動(dòng)態(tài)域的名稱奶赔,是一個(gè)表達(dá)式,*匹配任意字符另伍,只要域的名稱和表達(dá)式的規(guī)則能夠匹配就可以使用摆尝。
例如:搜索時(shí)查詢條件[product_i:鉆石]就可以匹配這個(gè)動(dòng)態(tài)域,可以直接使用讯检,不用單獨(dú)再定義一個(gè)product_i域人灼。
配置:
<dynamicField name="*_item_spec" type="string" indexed="true" stored="true" />
3.4 主鍵域
uniqueKey
<uniqueKey>id</uniqueKey>
相當(dāng)于主鍵,每個(gè)文檔中必須有一個(gè)id域跪呈。
3.5 fieldType(域類型)
- name:域類型的名稱
- class:指定域類型的solr類型耗绿。
- analyzer:指定分詞器。在FieldType定義的時(shí)候最重要的就是定義這個(gè)類型的數(shù)據(jù)在建立索引和進(jìn)行查詢的時(shí)候要使用的分析器analyzer究反,包括分詞和過(guò)濾精耐。
- type:index和query向胡。Index 是創(chuàng)建索引僵芹,query是查詢索引拇派。
- tokenizer:指定分詞器
- filter:指定過(guò)濾器
第4章 Spring Data Solr入門
4.1 Spring Data Solr簡(jiǎn)介
雖然支持任何編程語(yǔ)言的能力具有很大的市場(chǎng)價(jià)值,你可能感興趣的問(wèn)題是:我如何將Solr的應(yīng)用集成到Spring中?可以案站,Spring Data Solr就是為了方便Solr的開發(fā)所研制的一個(gè)框架承边,其底層是對(duì)SolrJ(官方API)的封裝
4.2 Spring Data Solr入門小Demo
4.2.1 搭建工程
創(chuàng)建maven工程 springdatasolr-demo
4.2.2 pom.xml
在src/main/resources下創(chuàng)建 spring-solr.xml
4.2.2 @Field 注解
創(chuàng)建 com.it.model 包,將品優(yōu)購(gòu)的Item實(shí)體類拷入本工程 ,屬性使用@Field注解標(biāo)識(shí) 。 如果屬性與配置文件定義的域名稱不一致窖式,需要在注解中指定域名稱萝喘。
4.2.3 增加(修改)
創(chuàng)建測(cè)試類SpringDataSolrTest.java
4.2.7 條件查詢
Criteria 用于對(duì)條件的封裝: