searchzin
1.0.0
一個簡單的搜尋引擎實作。
學習目的,主要是為了了解搜尋引擎的實作細節、效能權衡和結構。
這個想法是創建一個從 UI 到資料庫系統的同構應用程式。
該應用程式可以使用 docker 或 github 中發布的二進位檔案進行部署。
./searchzin -c <path-to-config>.yml
之後您可以查看http://localhost:8080
查看搜尋頁面。
可以透過預設位於/etc/searchzin/config.yml
中的設定檔進行配置,也可以透過-C key=value
形式提供設定鍵,第二種形式會覆寫第一種形式。
配置預設值:
port : 8080 # Service port
path :
log : /var/log/searchzin # Log directory
data : /var/lib/searchzin # Data directory
所有專案結構都是用golang製作的,使用gin
框架。
依賴關係使用dep
進行管理。
大部分專案工具鏈由Makefile
管理,重要目標是:
install
:安裝所需的依賴項和 git hooksreadme
:執行README.md
檔案包含lint
:執行程式碼的檢查和格式化test
:編譯並執行單元測試build
:在dist
中建立一個linux
可分發資料夾run
:使用go run
運行程式碼run-dev
:建立並執行 docker 容器release
: 建立一個發布docker映像publish
:使用VERSION
檔案的內容作為版本在 dockerhub 上發布 docker 映像publish-latest
:在 dockerhub 上發布帶有latest
標籤的 docker 映像watch
: 對檔案修改執行lint
和test
func-test
:在features
資料夾內執行功能測試此搜尋引擎有 6 個主要組件:
系統中的每個元件都有明確的職責,並且所有元件協同工作以回應查詢和文件索引請求。
它負責儲存新建立的文件並為其提供 ID。限制條件是:
id
id
生成,不會發生持久衝突ssd
還是hdd
儲存「術語」和文件的反向索引
terms
與文件集關係key
操作策略給定一個新文檔,它會理解它並保存在索引資料庫和文檔資料庫中。
解析使用者輸入並使用樹狀資料結構將其轉換為查詢計劃。
lucene
的給定一個查詢樹,在了解限制和執行環境的情況下對其進行最佳化。
制定結構化計劃後,查詢將從index
資料庫中檢索有效數據,此步驟由執行器執行。
這個查詢語言在很大程度上基於 lucene,以簡化設計並了解所做的權衡。
目前將使用的測試場景將按名稱、內容和標籤對播客進行索引。
基本用法可以在searchzin-example
中找到。
searchzin 可在 MIT 許可下使用。