ウェブ検索エンジンは、膨大なオンライン情報のインデックスを作成し、ミリ秒単位でアクセスできるようにするために不可欠です。このプロジェクトでは、RelaxSearch という名前の検索エンジンを Go (Golang) で構築しました。強力な検索および分析エンジンである Elasticsearch と統合することで、Web スクレイピング、定期的なデータのインデックス作成、検索機能を組み合わせます。このブログでは、RelaxSearch の主要コンポーネント、アーキテクチャ、およびキーワードベースの高速検索のためにデータを効率的に収集してインデックスを作成する方法について説明します。
RelaxSearch は 2 つの主要モジュールを中心に構築されています:
検索エンジン プロジェクトを最初から作成することは、Web スクレイピング、データのインデックス作成、効率的な検索テクニックを理解するのに最適な方法です。 Go の効率性と Elasticsearch の強力なインデックス作成を利用して、高速なデータ取得と簡単な拡張性を備えた、シンプルだが機能的な検索エンジンを作成したいと考えていました。
RelaxEngine は、Web ページをナビゲートし、コンテンツを抽出して保存する Go で書かれた Web スクレイパーです。これは cron ジョブとして実行されるため、定期的な間隔 (例: 30 分ごと) で動作し、最新の Web データでインデックスを更新し続けることができます。仕組みは次のとおりです:
RelaxWeb は RESTful API エンドポイントを提供し、Elasticsearch に保存されているデータのクエリと取得を簡単にします。 API はキーワード、ページネーション、日付フィルタリングなどのいくつかのパラメータを受け入れ、関連するコンテンツを JSON 形式で返します。
以下は、RelaxSearch がどのように機能するかを説明するために、いくつかの重要なコンポーネントと 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 ファイルは、Web ページのリクエストを処理し、コンテンツを抽出し、インデックスを作成します。 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 中国語 Web サイトの他の関連記事を参照してください。