Solr是什么
Solr是apache的頂級(jí)開源項(xiàng)目管行,它是使用java開發(fā) 厨埋,基于lucene的全文檢索服務(wù)器。
Solr比lucene提供了更多的查詢語(yǔ)句捐顷,而且它可擴(kuò)展荡陷、可配置,同時(shí)它對(duì)lucene的性能進(jìn)行了優(yōu)化
Solr是如何實(shí)現(xiàn)全文檢索的
- 索引流程:solr客戶端(瀏覽器迅涮、java程序)可以向solr服務(wù)端發(fā)送POST請(qǐng)求亲善,請(qǐng)求內(nèi)容是包含F(xiàn)ield等 信息的一個(gè)xml文檔,通過該文檔逗柴,solr實(shí)現(xiàn)對(duì)索引的維護(hù)(增刪改)。
- 搜索流程:solr客戶端(瀏覽器顿肺、java程序)可以向solr服務(wù)端發(fā)送GET請(qǐng)求戏溺,solr服務(wù)器返回一個(gè)xml 文檔渣蜗。
Solr 和lucene 的區(qū)別
Lucene是一個(gè)全文檢索引擎工具包,它只是一個(gè)jar包旷祸,不能獨(dú)立運(yùn)行耕拷,對(duì)外提供服務(wù)。
Solr是一個(gè)全文檢索服務(wù)器托享,它可以單獨(dú)運(yùn)行在servlet容器骚烧,可以單獨(dú)對(duì)外提供搜索和索引功能。
Solr比lucene在開發(fā)全文檢索功能時(shí)闰围,更快捷赃绊、更方便。
Solr安裝配置
下載Solr
http://archive.apache.org/dist/lucene/solr/
solr 常用命令
solr 命令所在位置
已下載solr文件夾bin下面
啟動(dòng)solr
./solr restart 重啟項(xiàng)目
./solr start 啟動(dòng)
./solr start -p 8984 指定端口啟動(dòng)
./solr restart -m 2g -force 指定占用多大內(nèi)存
在瀏覽器輸入:http://127.0.0.1:8983/solr 即可
創(chuàng)建solr core
./solr create -c newcore(core名稱) -force 刷新網(wǎng)頁(yè)可以查看新建的core
刪除core
./solr delete -c newcore12(core名稱)
刪除core里面所有的數(shù)據(jù)
post -c abc(core名稱) -d "<delete><query>*:*</query></delete>"
停止solr
./solr stop -all
查看solr狀態(tài)
./solr staus
幫助
./solr help
目錄結(jié)構(gòu)
3.3.1 Solr的安裝部署
- 第一步:安裝tomcat
- 第二步 將solr.war包羡榴,拷貝到tomcat的webapps目錄下
- 第三步:解壓縮war包解壓縮之后碧查,將war包刪掉
- 第四步:添加solr的擴(kuò)展服務(wù)包
將以上jar包,添加到以下目錄
- 第五步:添加log4j.properties 拷貝example》resources 到solr 的Web-INf>classes
- 第六步:在web.xml中指定solrhome的目錄
Solrcore的安裝
Solrcore和solrhome
Solrhome是solr服務(wù)運(yùn)行的主目錄校仑,一個(gè)solrhome目錄里面包含多個(gè)solrcore目錄忠售,一個(gè)solrcore目錄里面了一個(gè)solr實(shí)例運(yùn)行時(shí)所需要的配置文件和數(shù)據(jù)文件。
每一個(gè)solrcore都可以單獨(dú)對(duì)外提供搜索和索引服務(wù)迄沫。
多個(gè)solrcore之間沒有關(guān)系稻扬。
Solrcore和solrhome的目錄結(jié)構(gòu)
Solrhome的目錄結(jié)構(gòu)
Solrcore目錄
Solrcore的安裝
安裝solrcore需要先安裝solrhome
將以下目錄的文件進(jìn)行拷貝 到solrhome 文件夾下面
這樣solrhome和solrcore就安裝成功了。
Solrcore配置
在solrcore的conf目錄下羊瘩,有一個(gè)solrconfig.xml的配置文件泰佳,該配置文件,配置來solrcor的運(yùn)行信息
在該文件中困后,主要配置三個(gè)標(biāo)簽:lib標(biāo)簽乐纸、datadir標(biāo)簽、requestHandler標(biāo)簽
如果對(duì)該文件不進(jìn)行配置也可以摇予,即使用默認(rèn)的配置項(xiàng)汽绢。
Lib 標(biāo)簽
- Solrcore需要添加一個(gè)擴(kuò)展依賴包,通過lib標(biāo)簽來指定依賴包的地址
- solr.install.dir:表示solrcore的安裝目錄
將以下目錄的文件進(jìn)行拷貝
復(fù)制到以下目錄
修改lib標(biāo)簽
####### datadir標(biāo)簽
每個(gè)SolrCore都有自己的索引文件目錄 侧戴,默認(rèn)在SolrCore目錄下的data中宁昭。
如果不想使用默認(rèn)的目錄也可以通過solrConfig.xml更改索引目錄 ,如下:
####### requestHandler標(biāo)簽
requestHandler請(qǐng)求處理器酗宋,定義了索引和搜索的訪問方式积仗。
通過/update維護(hù)索引,可以完成索引的添加蜕猫、修改寂曹、刪除操作。
<requestHandler name="/update" class="solr.UpdateRequestHandler">-
通過/select搜索索引。
<requestHandler name="/select" class="solr.SearchHandler"><lst name="defaults">
<str name="echoParams">explicit</str>
<int name="rows">10</int>
<str name="wt">json</str>
<str name="df">text</str>
</lst>
solr 界面介紹
Dashboard
儀表盤隆圆,顯示了該Solr實(shí)例開始啟動(dòng)運(yùn)行的時(shí)間漱挚、版本、系統(tǒng)資源渺氧、jvm等信息旨涝。
Logging
Solr運(yùn)行日志信息
Cloud
Cloud即SolrCloud,即Solr云(集群)侣背,當(dāng)使用Solr Cloud模式運(yùn)行時(shí)會(huì)顯示此菜單.
Core Admin
Solr Core的管理界面白华。在這里可以添加SolrCore實(shí)例。
java properties
Solr在JVM 運(yùn)行環(huán)境中的屬性信息贩耐,包括類路徑弧腥、文件編碼、jvm內(nèi)存設(shè)置等信息憔杨。
Tread Dump
顯示Solr Server中當(dāng)前活躍線程信息鸟赫,同時(shí)也可以跟蹤線程運(yùn)行棧信息。
Core selector
選擇一個(gè)SolrCore進(jìn)行詳細(xì)操作
Analysis
通過此界面可以測(cè)試索引分析器和搜索分析器的執(zhí)行情況消别。
注:solr中抛蚤,分析器是綁定在域的類型中的。
dataimport
可以定義數(shù)據(jù)導(dǎo)入處理器寻狂,從關(guān)系數(shù)據(jù)庫(kù)將數(shù)據(jù)導(dǎo)入到Solr索引庫(kù)中岁经。
默認(rèn)沒有配置,需要手工配置蛇券。
Document
通過/update表示更新索引缀壤,solr默認(rèn)根據(jù)id(唯一約束)域來更新Document的內(nèi)容,如果根據(jù)id值搜索不到id域則會(huì)執(zhí)行添加操作纠亚,如果找到則更新塘慕。
通過此菜單可以創(chuàng)建索引、更新索引蒂胞、刪除索引等操作
overwrite="true" : solr在做索引的時(shí)候图呢,如果文檔已經(jīng)存在,就用xml中的文檔進(jìn)行替換
commitWithin="1000" : solr 在做索引的時(shí)候骗随,每個(gè)1000(1秒)毫秒蛤织,做一次文檔提交。為了方便測(cè)試也可以在Document中立即提交鸿染,</doc>后添加“<commit/>”
Query
通過/select執(zhí)行搜索索引指蚜,必須指定“q”查詢條件方可搜索
多solrcore的配置
配置多solrcore的好處:
- 在進(jìn)行solrcloud的時(shí)候,必須配置多solrcore .
- 每個(gè)solrcore之間是獨(dú)立的涨椒,都可以單獨(dú)對(duì)外提供服務(wù)摊鸡。不同的業(yè)務(wù)模塊可以使用不同的solrcore來提供搜索和索引服務(wù)绽媒。
添加solrcore
- 第一步:復(fù)制solrhome下的collection1目錄到本目錄下,修改名稱為collection2
- 第二步:修改solrcore目錄下的core.properties
- 第三步:重啟tomcat
使用命令
./bin/solr create -c logsys_clinic_analyes -force
http://blog.csdn.net/matthewei6/article/details/50620600
solr 重啟
./solr restart -m 2g -force
Solr的基本使用
Schema.xml
在schema.xml文件中柱宦,主要配置了solrcore的一些數(shù)據(jù)信息些椒,包括Field和FieldType的定義等信息,在solr中掸刊,F(xiàn)ield和FieldType都需要先定義后使用。
Filed
<field name="id" type="string" indexed="true" stored="true" required="true" multiValued="false" />
Name:指定域的名稱
Type:指定域的類型
Indexed:是否索引
Stored:是否存儲(chǔ)
Required:是否必須
multiValued:是否多值赢乓,比如商品信息中忧侧,一個(gè)商品有多張圖片,一個(gè)Field像存儲(chǔ)多個(gè)值的話牌芋,必須將multiValued設(shè)置為true蚓炬。
dynamicField
動(dòng)態(tài)域
<dynamicField name="*_i" type="int" indexed="true" stored="true"/>
Name:指定動(dòng)態(tài)域的命名規(guī)則
uniqueKey
指定唯一鍵
<uniqueKey>id</uniqueKey>
其中的id是在Field標(biāo)簽中已經(jīng)定義好的域名,而且該域要設(shè)置為required為true躺屁。
一個(gè)schema.xml文件中必須有且僅有一個(gè)唯一鍵
copyField
復(fù)制域
<copyField source="product_name" dest="product_keywords" />
Source:要復(fù)制的源域的域名
Dest:目標(biāo)域的域名
由dest指的的目標(biāo)域肯夏,必須設(shè)置multiValued為true。
FieldType
定義域的類型
<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>
Name:指定域類型的名稱
Class:指定該域類型對(duì)應(yīng)的solr的類型
Analyzer:指定分析器
Type:index犀暑、query驯击,分別指定搜索和索引時(shí)的分析器
Tokenizer:指定分詞器
Filter:指定過濾器
中文分詞
使用ikanalyzer進(jìn)行中文分詞
- 第一步 將ikanalyzer的jar包拷貝到以下目錄
- 第二步:將ikanalyzer的擴(kuò)展詞庫(kù)的配置文件拷貝到 目錄
-
第三步:配置FieldType
<fieldType name="text_ik" class="solr.TextField">
<analyzer type="index" useSmart="false"
class="org.wltea.analyzer.lucene.IKAnalyzer" />
<analyzer type="query" useSmart="true"
class="org.wltea.analyzer.lucene.IKAnalyzer" />
</fieldType> 第四步:配置使用中文分詞的Field
<field name="product_name" type="text_ik" indexed="true" stored="true" multiValued="false" />第五步:重啟tomcat
Dataimport
該插件可以將數(shù)據(jù)庫(kù)中指定的sql語(yǔ)句的結(jié)果導(dǎo)入到solr索引庫(kù)中。
- 第一步:添加jar包
- Dataimport的jar包 復(fù)制以下目錄的jar包
添加到以下目錄
修改solrconfig.xml文件耐亏,添加lib標(biāo)簽
`<lib dir="${solr.install.dir:../..}/contrib/dataimporthandler/lib" regex=".*\.jar" />`
* MySQL數(shù)據(jù)庫(kù)驅(qū)動(dòng)包
將mysql的驅(qū)動(dòng)包徊都,復(fù)制到以下目錄
修改solrconfig.xml文件,添加lib標(biāo)簽
`<lib dir="${solr.install.dir:../..}/contrib/db/lib" regex=".*\.jar" />`
-
第二步:配置requestHandler
在solrconfig.xml中广辰,添加一個(gè)dataimport的requestHandler
<requestHandler name="/dataimport" class="org.apache.solr.handler.dataimport.DataImportHandler">
<lst name="defaults">
<str name="config">data-config.xml</str>
</lst></requestHandler>
第三步:創(chuàng)建data-config.xml
在solrconfig.xml同級(jí)目錄下暇矫,創(chuàng)建data-config.xml第四步: 重啟tomcat
2016.12.19