網路搜尋引擎對於索引大量線上資訊至關重要,可以在幾毫秒內存取這些資訊。在這個專案中,我用 Go (Golang) 建立了一個名為 RelaxSearch 的搜尋引擎。它透過與強大的搜尋和分析引擎 Elasticsearch 集成,將網頁抓取、定期資料索引和搜尋功能結合在一起。在這篇部落格中,我將帶您了解 RelaxSearch 的主要元件、架構,以及它如何有效地抓取和索引數據,以實現基於關鍵字的快速搜尋。
RelaxSearch 圍繞著兩個主要模組建構:
從頭開始建立搜尋引擎專案是了解網頁抓取、資料索引和高效搜尋技術的好方法。我想利用 Go 的效率和 Elasticsearch 強大的索引來創建一個簡單但實用的搜尋引擎,具有快速資料檢索和易於擴展的特點。
RelaxEngine 是一個用 Go 編寫的網頁抓取工具,用於導航網頁、提取和儲存內容。它會作為 cron 作業運行,因此可以定期(例如每 30 分鐘)運行一次,以保持索引更新為最新的 Web 資料。其工作原理如下:
RelaxWeb 提供 RESTful API 端點,可以輕鬆查詢並檢索 Elasticsearch 中儲存的資料。 API 接受關鍵字、分頁、日期過濾等多個參數,以 JSON 格式傳回相關內容。
以下是一些來自 RelaxSearch 的重要元件和程式碼摘錄,以說明其工作原理。
核心功能位於 main.go 檔案中,其中 RelaxEngine 使用 gocron 初始化排程器來管理 cron 作業,設定 Elasticsearch 用戶端,並開始從種子 URL 進行爬取。
func main() { cfg := config.LoadConfig() esClient := crawler.NewElasticsearchClient(cfg.ElasticsearchURL) c := crawler.NewCrawler(cfg.DepthLimit, 5) seedURL := "https://example.com/" // Replace with starting URL s := gocron.NewScheduler(time.UTC) s.Every(30).Minutes().Do(func() { go c.StartCrawling(seedURL, 0, esClient) }) s.StartBlocking() }
crawler.go 檔案處理網頁要求、提取內容並為其建立索引。使用elastic包,每個抓取的頁面都儲存在Elasticsearch中。
func (c *Crawler) StartCrawling(pageURL string, depth int, esClient *elastic.Client) { if depth > c.DepthLimit || c.isVisited(pageURL) { return } c.markVisited(pageURL) links, title, content, description, err := c.fetchAndParsePage(pageURL) if err == nil { pageData := PageData{URL: pageURL, Title: title, Content: content, Description: description} IndexPageData(esClient, pageData) } for _, link := range links { c.StartCrawling(link, depth+1, esClient) } }
在relaxweb服務中,API端點提供全文搜尋功能。端點 /search 接收請求並查詢 Elasticsearch,根據關鍵字傳回相關內容。
func searchHandler(w http.ResponseWriter, r *http.Request) { keyword := r.URL.Query().Get("keyword") results := queryElasticsearch(keyword) json.NewEncoder(w).Encode(results) }
git clone https://github.com/Ravikisha/RelaxSearch.git cd RelaxSearch
配置
使用 Elasticsearch 憑證更新 RelaxEngine 和 RelaxWeb 的 .env 檔案。
使用 Docker 運行
RelaxSearch 使用 Docker 來輕鬆設定。只要運行:
docker-compose up --build
RelaxSearch 是基本搜尋引擎的教育和實踐演示。雖然它仍然是一個原型,但該專案對於理解 Web 抓取、全文搜尋以及使用 Go 和 Elasticsearch 進行高效資料索引的基礎知識很有幫助。它為可擴展環境中的改進和實際應用開闢了途徑。
探索 GitHub 儲存庫,親自嘗試 RelaxSearch!
以上是使用 Elasticsearch 在 Go 中建立 Web 搜尋引擎的詳細內容。更多資訊請關注PHP中文網其他相關文章!