一、Solr介紹
? ? 1.簡介:Solr是基于Lucene的面向企業(yè)搜索的web應用悲立,Sole是一個獨立的企業(yè)級搜索應用服務器鹿寨,高性能,采用java5開發(fā)薪夕,Solr是由兩個部分構成:Solr的web服務和Solr的索引庫
? ? 2.Lucene:Lucene是一個高效的脚草,基于java的全文檢索庫
? ? 3.全文檢索的概念:全文數據庫是全文檢索系統(tǒng)的主要構成部分。所謂全文數據庫是將一個完整的信息源的全部內容轉化為計算機可以識別原献、處理的信息單元而形成的數據集合馏慨。全文數據庫不僅存儲了信息,而且還有對全文數據進行詞姑隅、字写隶、段落等更深層次的編輯、加工的功能讲仰,而且所有全文數據庫無一不是海量信息數據庫慕趴。
二、在Centos上安裝Solr單機版
????1.安裝環(huán)境鄙陡,JDK冕房、tomcat的配置
????2.解壓solr的安裝包
????3.進入解壓好的solr,進入example/webapps柔吼,將solr.war拷貝到tomcat的webapp
????4.啟動tomcat毒费,會自動將war包解壓
????5.添加服務中所依賴的jar包,注意要先把tomcat/webapp下的solr.war刪除
????????這時solr的服務已經安裝完畢了
接下來安裝索引庫
????1.創(chuàng)建索引庫愈魏,將solr解壓目錄下的/example/solr拷貝到索引庫中
????2.在solr的服務中配置索引庫
????3.測試訪問
三觅玻、Solr管理界面介紹
????Dashboard:儀表盤,訪問http://solr服務器Ip:端口/solr服務主目錄培漏,可以看到
????Logging:日志溪厘,顯示solr運行出現(xiàn)的異常或錯誤牌柄、警告等各種信息
????Core??? Admin:(core管理)核心管理
????????主要有Add?? Core(添加核心)畸悬,Unload(卸載核心),Rename(重命名核心),Reload(重新加載核心),Optimize(優(yōu)化索引庫)
????????Add Core是添加core:主要是在instanceDir對應的文件夾里生成一個core.properties文件
????????name:給 core 起的名字珊佣;
????????instanceDir:與我們在配置solr 到 tomcat 里時的 solr_home 里新建的 core 文件夾名一致蹋宦;?
????????dataDir:確認 AddCore 時,會在 new_core 目錄下生成名為 data的文件夾? config:new_core 下的 conf 下的config 配置文件(solrconfig.xml)?
????????schema: new_core 下的 conf 下的 schema 文件(schema.xml)
????Java????Properties:可以查看到java相關的一些屬性的信息
? ??Thread? Dump:查看每個線程的詳細信息咒锻,以及狀態(tài)信息
Core Selecter(core選擇器):選擇solrCore
? ??Overview:包含基本統(tǒng)計如當前文檔數冷冗;和實例信息如當前核心的配置目錄
? ??Analysis:檢驗分詞效果
? ??Documents :(索引文檔)索引的相關操作,如:增加惑艇,修改蒿辙,刪除等
????????在如下頁面拇泛,選擇/update ,文檔格式選擇 json 思灌,然后 submit 提交俺叭。這樣 索引就增 加上了。修改與增加一樣泰偿,都是/update ,刪除為/delete 熄守。 成功之后,我們去 query 里查詢數據 就能查到我們剛添加的數據.
? ??Files:solr_home 下的 core 下的 conf 下的相關文件,可單擊查看里面的內容
? ??Ping:查看當前核心庫還是否工作的以及響應時間
Plugins /stats:Solr 自帶的一些插件以及我們安裝的插件的信息以及統(tǒng)計
? ??Query:查詢的結果要顯示哪個字段,就得將schema.xml 文件配置字段時的 stored 屬性設為true
? ??Request-Handler(qt): 請求處理器(不重要,并非詳細就重要)
????????q: 查詢字符串(必須的)甜奄。:表示查詢所有柠横;keyword:尚學堂 表示按關鍵字“尚學堂” 查詢?
????????fq: filter query 過濾查詢窃款。使用 Filter Query 可以充分利用 Filter Query Cache课兄,提高檢索 性能。作用:在 q 查詢符合結果中同時是 fq 查詢符合的(類似求交集)晨继,例如: q=mm&fq=date_time:[20081001 TO 20091031]烟阐,找關鍵字 mm,并且 date_time 是 20081001 到 20091031 之間的紊扬。?
????????sort: 排序蜒茄。格式如下:字段名 排序方式;如 id desc 表示按 id 字段降序排列查詢結果餐屎。?
????????start,rows:表示查回結果從第幾條數據開始顯示檀葛,共顯示多少條。?
????????fl: field list腹缩。指定查詢結果返回哪些字段屿聋。多個時以空格“ ”或逗號“,”分隔。不指 定時藏鹊,默認全返回润讥。?
????????df: default field 默認的查詢字段,一般默認指定盘寡。?
????????Raw Query Parameters:? 原始查詢參數的
????????wt: write type楚殿。指定查詢輸出結果格式,我們常用的有 json 格式與 xml 格式竿痰。在 solrconfig.xml 中定義了查詢輸出格式:xml脆粥、json、python影涉、ruby变隔、php、csv常潮。?
????????indent: 返回的結果是否縮進弟胀,默認關閉,用 indent=true | on 開啟,一般調試 json,php,phps,ruby 輸出才有必要用這個參數孵户。?
????????debugQuery: 設置返回結果是否顯示 Debug 信息萧朝。?
????????hl: high light 高亮。hl=true 表示啟用高亮? ? ?
????????hl.fl : 用空格或逗號隔開的字段列表(指定高亮的字段)夏哭。要啟用某個字段的 highlight 功能检柬,就得保證該字段在 schema 中是 stored。? ? ?
????????hl.simple.pre: 設置高亮顯示的 html 標記的開始標記 hl.simple.post:設置高亮顯示的 html 標記的結束標記? ?
????????hl.requireFieldMatch: 如果置為 true竖配,除非該字段的查詢結果不為空才會被高亮何址。它 的默認值是 false,意味 著它可能匹配某個字段卻高亮一個不同的字段进胯。如果 hl.fl 使用了通 配符用爪,那么就要啟用該參數。盡管如此胁镐,如果你的查詢是 all 字段(可能是使用 copy-field 指 令)偎血,那么還是把它設為 false,這樣搜索結果能表明哪個字段的查詢文本未被找到? ? ?
????????hl.usePhraseHighlighter:如果一個查詢中含有短語(引號框起來的)那么會保證一 定要完全匹配短語的才會被高亮盯漂。? ? ?
????????hl.highlightMultiTerm:如果使用通配符和模糊搜索颇玷,那么會確保與通配符匹配的 term 會高亮。默認為 false就缆,同時
????????hl.usePhraseHighlighter 要為 true帖渠。?
????????facet:分組統(tǒng)計,在搜索關鍵字的同時,能夠按照 Facet 的字段進行分組并統(tǒng)計竭宰。? ? ?
????????facet.query:Facet Query 利用類似于 filter query 的語法提供了更為靈活的 Facet.通 過 facet.query 參數空郊,可以對任意字段進行篩選。? ? ?
????????facet.field:需要分組統(tǒng)計的字段羞延,可以多個渣淳。? ? ?
????????facet.prefix:表示Facet 字段值的前綴。比如 facet.field=cpu&facet.prefix=Intel伴箩, 那么對 cpu 字段進行 Facet 查詢入愧,返回的 cpu 都是以 Intel 開頭的, AMD 開頭的 cpu 型號將 不會被統(tǒng)計在內嗤谚。?
????????spatial: spellcheck: 拼寫檢查
????Replication:顯示你當前 Core 的副本棺蛛,并提供disable/enable 功能
? ??Schema:展示該 Core 的shema.xml 文件中的內容
三、Solr索引庫目錄結構
????1.Solr.xml:配置solr集群
????2.collection1:索引庫巩步,solr core
????3.core.properties:設置索引庫的名稱
????4.data:存放索引
????5.conf:索引庫的配置目錄
????????5.1schema.xml:配置字段以及字段類型
Solr索引庫—schema.xml詳解
? ? ? ??schema.xml:是用來定義索引數據中的域的旁赊,包括域名稱,域類型椅野,域是否索引终畅,分詞籍胯,是否存儲等等
????<field>:定義“域”,(關系型數據庫的字段)
????<fieldType name="string" class="solr.StrField" sortMissingLast="true" /> Name:域類型的名稱离福,
????<copyField>:復制域杖狼,可實現(xiàn)更新和查詢分離(也可實現(xiàn)多個查詢域合一查詢)
????<copyField source="item_title" dest="item_keywords"/>
????????Source:源域
????????Dest:目標域
四、Solr的索引機制
????Solr的索引機制分為:正排索引(正向索引)和倒排索引(反向索引)
????????正排索引:是以文檔的ID為關鍵字妖爷,索引文檔中每個字的位置信息蝶涩,查找時掃描索引中每個文檔中字的信息知道找出所有包含查詢關鍵字的文檔,檢索效率低
????????倒排索引:對數據進行分析絮识,抽取出數據中詞條绿聘,以詞條作為key,對應數據的存儲位置作為value次舌,實現(xiàn)索引的存儲熄攘,這種索引稱為倒排索引
????????當Solr存儲文檔時,solr會首先對文檔數據進行分詞垃它,創(chuàng)建索引庫和文檔數據庫
????????分詞是指:將一段字符文本按照一定的規(guī)則分成若干個單詞
或者參考:插畫理解Elasticsearch(原標題:終于有人把Elasticsearch原理講透了O势痢)
五烹看、配置中文分詞器IK Analyzer
????當我們在solr中存儲中文信息時国拇,IK Analyzer 會智能對中文字、詞惯殊、組進行分詞反向索引酱吝,由于Solr的開發(fā)者是歪果仁,所以需要另外的中文分詞插件
????????1.下載中文分詞器并解壓
????????2.在solr服務的WEB-INF目錄下創(chuàng)建classes目錄(默認是沒有的)土思,并將中文分詞器的配置文件拷貝到classes目錄
????????3.依賴的jar包放到solr/WEB-INF/lib/目錄下
????????4.在/usr/local/solrhome/solr/collertion1/conf/schema.xml中配置中文分詞器
使用插件后的中文分詞
六务热、SolrJ
????1.簡介:SolrJ是訪問Solr服務的Java客戶端,提供索引和搜索的請求方法己儒,SolrJ通常嵌入在業(yè)務系統(tǒng)中崎岂,通過solr的API接口操作和Solr服務,單獨使用時還需要導入commons-logging
????通過SolrJ向索引庫中添加文檔
????????1.創(chuàng)建maven項目闪湾,在pom.xml中添加SolrJ的依賴
????????2.編寫測試類冲甘,創(chuàng)建solrj的連接對象,創(chuàng)建solr的文檔對象途样,將文檔添加到solr的索引庫中
????????3.提交事務江醇,查看solrCore
? ??通過SolrJ查詢索引庫中的文檔
????????1.創(chuàng)建solrj的連接對象
????????2.創(chuàng)建查詢條件
????????3.設置分頁條件
????????4.執(zhí)行查詢,獲取查詢結果
????????5.遍歷結果,執(zhí)行測試
????通過SolrJ刪除索引庫中的文檔
????????1.編寫測試類何暇,創(chuàng)建連接對象
????????2.設置刪除格式
????????3.事務提交陶夜,查看solrCore