一文了解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
- 新手程式設計師該如何準備面試?【備戰春招/秋招系列】程式設計師面試
- 為三角學做好準備
- 為限制和連續做好準備
- 【備戰春招/秋招系列】初出茅廬的程式設計師該如何準備面試?程式設計師面試
- 秋招還有 1 個月到達戰場,請做好準備 !
- Fedora 31 已經為 Python 3.8 做好了準備Python
- 美國白宮:為人工智慧的未來做好準備人工智慧
- 為複合函式和反函式做好準備函式
- 【備戰春招/秋招系列】Java程式設計師必備書單Java程式設計師
- 我是如何準備阿里的社招面試,給準備java社招的朋友的一個建議!阿里面試Java
- 300道Python面試題,備戰春招!Python面試題
- 聚焦亞洲:為後疫情時代做好準備(附下載)
- 華為2019春招筆試題筆試
- 擁抱數字化積極轉型,你做好準備了嗎?
- 從零開始準備的前端春招實習(已拿頭條阿里騰訊提前批offer)前端阿里
- 全球GDP縮減航空業如何為信貸疲軟做好準備?
- 雲平臺參與者為工業5G做好準備
- 為什麼 Flutter 已經為企業應用程式開發做好了準備Flutter
- 【備戰春招/秋招系列】程式設計師的簡歷就該這樣寫程式設計師
- 如何準備校招技術面試面試
- 備戰2022春招,這十道題必回!
- 大學生想進入IT行業,這7項準備你做好了嗎?行業
- 聽說你們春節要出去玩?我要學好Flutter為升職加薪做準備了!Flutter
- 企業需要提前為2020年6個趨勢的資料和分析做好準備
- 面試官問:你對laravel 框架了解多少,為什麼說是優雅的框架?面試Laravel框架
- 春招苦短,我用百道 Python 面試題備戰Python面試題
- 春招苦短,我用百道Python面試題備戰Python面試題
- AI未來可期,企業如何做好準備?AI
- 裁員了,很嚴重,大家做好準備吧!
- 面對SQL Azure DBA該做好哪些準備?URSQL
- 程式設計師想月薪過萬?這些面試準備你做好了嗎?程式設計師面試
- 專為Python初學者準備的IDE你用過嗎?PythonIDE
- 渣本的春招修仙之路
- Esri總裁用96頁PPT告訴你GIS的未來將如何發展,而我們又要為此做好哪些準備