一文了解Solr框架!為你的春招做好準備!
Table of Contents generated with DocToc
solr原理
索引
Solr/Lucene採用的是一種反向索引(倒排索引),所謂反向索引:就是從關鍵字到文件的對映過程,儲存這種對映這種資訊的索引稱為反向索引
- 左邊儲存的是字串序列
- 右邊是字串的文件(Document)編號連結串列,稱為倒排表(Posting List)
索引建立
一、把原始文件交給分片語件(Tokenizer)
- 將文件分成一個一個單獨的單詞
- 去除標點符號
- 去除停詞(stop word)
二、詞彙單元(Token)傳給語言處理元件(Linguistic Processor)
- 變為小寫(Lowercase)。
- 將單詞縮減為詞根形式,如”cars”到”car”等。這種操作稱為:stemming。
- 將單詞轉變為詞根形式,如”drove”到”drive”等。這種操作稱為:lemmatization
三、 得到的詞(Term)傳遞給索引元件(Indexer)
- 利用得到的詞(Term)建立一個字典
- 對字典按字母順序排序
- 合併相同的詞(Term)成為文件倒排(Posting List)連結串列
搜尋步驟
- 對查詢內容進行詞法分析、語法分析、語言處理
- 搜尋索引,得到符合語法樹的文件集合
- 根據查詢語句與文件的相關性,對結果進行排序
空間搜尋原理
空間搜尋,又名Spatial Search(Spatial Query),基於空間搜尋技術,可以做到:
- 對Point(經緯度)和其他的幾何圖形建索引
- 根據距離排序
- 根據矩形,圓形或者其他的幾何形狀過濾搜尋結果
在Solr中,空間搜尋主要基於GeoHash來實現:
GeoHash演算法
通過GeoHash演算法,可以將經緯度的二維座標變成一個可排序、可比較的的字串編碼。
在編碼中的每個字元代表一個區域,並且前面的字元是後面字元的父區域。其演算法的過程如下:
根據經緯度計算GeoHash二進位制編碼
地球緯度區間是[-90,90], 如某緯度是39.92324,可以通過下面演算法對39.92324進行逼近編碼:
- 區間[-90,90]進行二分為[-90,0),[0,90],稱為左右區間,可以確定39.92324屬於右區間[0,90],給標記為1;
- 接著將區間[0,90]進行二分為 [0,45),[45,90],可以確定39.92324屬於左區間 [0,45),給標記為0;
- 遞迴上述過程39.92324總是屬於某個區間[a,b]。隨著每次迭代區間[a,b]總在縮小,並越來越逼近39.928167;
- 如果給定的緯度(39.92324)屬於左區間,則記錄0,如果屬於右區間則記錄1,這樣隨著演算法的進行會產生一個序列1011 1000 1100 0111 1001,序列的長度跟給定的區間劃分次數有關。
同理,地球經度區間是[-180,180],對經度116.3906進行編碼的過程也類似:
相關文章
- 一文理解Tomcat!為你的春招做好準備!Tomcat
- 萬字長文帶你深入理解Kafka!為春招面試做好準備!Kafka面試
- 萬字常人帶你深入理解Zookeeper!為你的春招做好準備!
- 萬字長文帶你深入理解netty!為你的春招做好準備!Netty
- JAVA後端秋招/春招準備方向Java後端
- 你的備庫做好準備了嗎
- 為WebSphere sMash做好準備Web
- 新手程式設計師該如何準備面試?【備戰春招/秋招系列】程式設計師面試
- 【準備工作—你做好了嗎?】
- 【備戰春招/秋招系列】初出茅廬的程式設計師該如何準備面試?程式設計師面試
- 寫程式碼前的準備,你做好了嗎?
- 為現代 JavaScript 開發做好準備JavaScript
- 為現代JavaScript開發做好準備JavaScript
- 美國白宮:為人工智慧的未來做好準備人工智慧
- 你為Windows Server 2003終止支援做好準備了嗎?WindowsServer
- 【備戰春招/秋招系列】Java程式設計師必備書單Java程式設計師
- Fedora 31 已經為 Python 3.8 做好了準備Python
- 從零開始準備的前端春招實習(已拿頭條阿里騰訊提前批offer)前端阿里
- 300道Python面試題,備戰春招!Python面試題
- tastphp,為現代化的 phper 準備的 PHP 框架ASTPHP框架
- 為開發者準備的 11 個新鮮方便的框架框架
- 為開發者準備的 10 個新鮮的前端框架前端框架
- JavaScript入門篇--請做好準備JavaScript
- 我是如何準備阿里的社招面試,給準備java社招的朋友的一個建議!阿里面試Java
- Linux動態:企業應該為Xen做好準備(轉)Linux
- 【備戰春招/秋招系列】程式設計師的簡歷就該這樣寫程式設計師
- java春招面經:BAT對開發者需要什麼要求,這些標準你達到了嗎?JavaBAT
- 為迎接可穿戴裝置需做好準備的六大行業行業
- 雲平臺參與者為工業5G做好準備
- 評論:企業應為Xenx虛擬技術做好準備(轉)
- 如何準備校招技術面試面試
- 春招苦短,我用百道 Python 面試題備戰Python面試題
- 春招苦短,我用百道Python面試題備戰Python面試題
- 為什麼 Flutter 已經為企業應用程式開發做好了準備Flutter
- 面試官問:你對laravel 框架了解多少,為什麼說是優雅的框架?面試Laravel框架
- Android 8.1 開發者預覽版 —— 為 ML 機器學習做好準備的 Oreo 升級版Android機器學習
- 雲技術時代做好安全防範準備
- 春招面試(馭勢科技)面試