定義:Sphinx是一個全文檢索引擎。數據庫
特性:服務器
- 索引和性能優異
- 易於集成SQL和XML數據源,並可以使用SphinxAPI、SphinxQL或者SphinxSE搜索接口
- 易於經過分佈式搜索進行擴展
- 高速的索引創建(在當代CPU上,峯值性能可達到10 ~ 15MB/秒)
- 高性能的搜索 (在1.2G文本,100萬條文檔上進行搜索,支持高達每秒150~250次查詢)
遇到一個相似這樣的需求:用戶能夠經過文章標題和文章搜索到一片文章的內容,而文章的標題和文章的內容分別保存在不一樣的庫,並且是跨機房的。網絡
A、直接在數據庫實現跨庫LIKE查詢數據結構
優勢:簡單操做 缺點:效率較低,會形成較大的網絡開銷分佈式
B、結合Sphinx中文分詞搜索引擎性能
優勢:效率較高,具備較高的擴展性 缺點:不負責數據存儲搜索引擎
使用Sphinx搜索引擎對數據作索引,數據一次性加載進來,而後作了因此以後保存在內存(或磁盤)。這樣用戶進行搜索的時候就只須要在Sphinx服務器上檢索數據便可。並且,Sphinx沒有MySQL的伴隨機磁盤I/O的缺陷,性能更佳。spa
Sphinx工做流程圖:代理
流程圖解釋:code
倒排索引是一種數據結構,用來存儲在全文搜索下某個單詞在一個文檔或者一組文檔中的存儲位置的映射。它是文檔檢索系統中最經常使用的數據結構。
倒排索引(Inverted Index):倒排索引是實現「單詞-文檔矩陣」的一種具體存儲形式,經過倒排索引,能夠根據單詞快速獲取包含這個單詞的文檔列表。
傳統的索引是:索引ID->文檔內容,而倒排索引是:文檔內容(分詞)->索引ID。能夠類比正向代理和反向代理的區別來理解。正向代理把內部請求代理到外部,反向代理把外部請求代理到內部。因此應該理解爲轉置索引比較合適。
倒排索引主要由兩個部分組成:「單詞詞典」和「倒排文件」。
index employeesSalariesIndex { type = plain source = employeesSalariesSource path = /home/fkereki/bin/sphinx/var/data/sphinxFilesESI charset_type = utf-8 preopen = 1 }
Sphinx 使用的索引文件獨立於 MySQL 使用的索引文件。type=plain 行表示您正在使用標準的 Sphinx 索引文件。其餘可能的索引是 distributed(當您具備在網絡的幾個節點分佈的索引文件時)和 rt(表示 real time),您能夠馬上更新這些索引。source= 行將一個數據源與一個索引相關聯。您能夠在一個索引中合併幾個數據源,可是在本示例中沒有這樣作。path= 行定義索引文件名稱及其存儲位置。
單詞詞典是倒排索引中很是重要的組成部分,它用來維護文檔集合中出現過的全部單詞的相關信息,同時用來記載某個單詞對應的倒排列表在倒排文件中的位置信息。在支持搜索時,根據用戶的查詢詞,去單詞詞典裏查詢,就可以得到相應的倒排列表,並以此做爲後續排序的基礎。
對於一個規模很大的文檔集合來講,可能包含幾十萬甚至上百萬的不一樣單詞,可否快速定位某個單詞直接影響搜索時的響應速度,因此須要高效的數據結構來對單詞詞典進行構建和查找,經常使用的數據結構包括哈希加鏈表結構和樹形詞典結構。