1、Solr簡述html
一、Solr是什麼?數據庫
Solr是一個Java開發的基於Lucene的開源搜索平臺,其搜索技術核心是使用倒排索引,即經過關鍵字映射到對應的文檔(value--key),與通常搜索用到的key--value不一樣。elasticsearch
Solr內的資源存儲是以文檔Document爲對象進行存儲,文檔的內容是由多個表示資源屬性的Field構成的。Solr是將文檔中的Field通過分詞後做爲索引,用二分法將關鍵字與排序號的索引進行匹配,進而查找到對應文檔,提供高性能的搜索效率。每一個文檔都經過惟一的id字段來表示該文檔。分佈式
二、爲何使用Solr?工具
因爲傳統電商多數使用傳統搜索,即傳統搜索是從靜態數據庫中篩選出符合條件的結果,這種結果每每是不可變得、靜態的。而一般電商系統中須要提供搜索功能,經過任意關鍵字搜索出匹配的結果。而這些任意的數據不多是根據數據庫的字段查詢的,因此須要利用全文搜索工具提早對數據進行分詞,而後經過分詞的結果,根據分詞搜索到對應的文檔,向用戶反饋搜索結果。而Solr就能經過倒排索引功能,技術,結合IKanalyzer中文分詞器實現這樣的搜索功能。性能
三、Solr、elasticsearch與Lucene三者聯繫與區別搜索引擎
(1)三者介紹spa
Lucene是一套信息檢索工具包,並不包含搜索引擎系統,它包含了索引結構、讀寫索引工具、相關性工具、排序等功能,所以在使用Lucene時仍須要關注搜索引擎系統,例如數據獲取、解析、分詞等方面的東西。插件
Solr是一個有HTTP接口的基於Lucene的搜索平臺,封裝了不少Lucene細節,本身的應用能夠直接利用HTTP GET/POST請求去實現搜索,進行維護修改索引。htm
Elasticsearch也是一個創建在全文搜索引擎 Apache Lucene基礎上的搜索引擎。採用的策略是分佈式實時文件存儲,並將每個字段都編入索引,使其能夠被搜索。
(2)聯繫與區別
三者聯繫:solr和elasticsearch都是基於Lucene工具包作的一些封裝。
solr和elasticsearch的區別:
2、倒排索引介紹
一、索引(index) 的定義
一個索引文件(index)包含了一連串的文檔(Documents),一個文檔(document)是由一連串fields(字段)組成,一個fields(字段)能夠被分詞成由一連串的term(單詞/字符串)。
二、倒排索引
索引(index)存儲單詞(terms)的統計數據,爲了使得基於term的檢索效率更高。倒排索引是實現「單詞-文檔矩陣」的一種具體存儲形式,經過倒排索引,能夠根據單詞快速獲取包含這個單詞的文檔列表。
(1)倒排索引組成:主要由單詞詞典和倒排文件組成
a. 單詞詞典:
單詞詞典是由文檔集合中出現過的全部單詞構成的字符串集合。首先Solr的文檔指的是表明以文本形式存在的存儲對象,除了網頁外,還包含Word,PDF,html,XML等不一樣格式的文件、甚至郵件,微博等均可以稱之爲文檔。每一個文檔有本身惟一的文檔ID。Solr通過分詞器將文檔中的Field分詞後,將重複的單詞去重,這些單詞的集合就構成了單詞詞典。每一個單詞也有惟一的單詞ID。
b. 倒排文件
倒排文件是存儲倒排列表的物理文件,存儲在磁盤中。倒排列表記載了出現過某個單詞的全部文檔的文檔列表及單詞在該文檔中出現的位置信息、出現頻率,每條記錄稱爲一個倒排項,多個倒排項構成倒排列表。
(2)倒排索引原理
首先要用分詞系統將文檔自動切分紅單詞序列。這樣每一個文檔就轉換爲由單詞序列構成的數據流,每一個不一樣的單詞有惟一的單詞編號,同時記錄下倒排列表(出現這個單詞的文檔ID,出單詞該ID的文檔出現的頻率 ,出現的位置(文檔第幾個單詞出現)),記錄每一個單詞對應的「文檔頻率信息」(在幾個文檔這中出現過),在如此處理結束後,咱們能夠獲得倒排索引。
倒排索引存儲結構以下圖所示。
總結:倒排索引存儲結構通常爲:詞項的字符串ID+詞項的字符串+詞項的文檔頻率+倒排列表(詞項的文檔ID+記錄詞項的頻率信息+記錄詞項的位置信息)。倒排索引它記錄的是詞,和詞所存在的文檔id以及倒排列表。經過這種索引結構的存儲方式,其查詢速率可想而知。