ホームページ  >  記事  >  バックエンド開発  >  Elasticsearch を使用して Go で Web 検索エンジンを構築する

Elasticsearch を使用して Go で Web 検索エンジンを構築する

Susan Sarandon
Susan Sarandonオリジナル
2024-11-05 10:33:02422ブラウズ

ウェブ検索エンジンは、膨大なオンライン情報のインデックスを作成し、ミリ秒単位でアクセスできるようにするために不可欠です。このプロジェクトでは、RelaxSearch という名前の検索エンジンを Go (Golang) で構築しました。強力な検索および分析エンジンである Elasticsearch と統合することで、Web スクレイピング、定期的なデータのインデックス作成、検索機能を組み合わせます。このブログでは、RelaxSearch の主要コンポーネント、アーキテクチャ、およびキーワードベースの高速検索のためにデータを効率的に収集してインデックスを作成する方法について説明します。

リラックスサーチの概要

RelaxSearch は 2 つの主要モジュールを中心に構築されています:

  1. RelaxEngine: cron ジョブを利用した Web スクレイパー。指定された Web サイトを定期的にクロールし、コンテンツを抽出し、Elasticsearch でインデックスを作成します。
  2. RelaxWeb: ユーザーがインデックス付きデータを検索できるようにする RESTful API サーバー。ページネーション、フィルタリング、コンテンツの強調表示を提供して、ユーザーフレンドリーな応答を提供します。

プロジェクトの動機

検索エンジン プロジェクトを最初から作成することは、Web スクレイピング、データのインデックス作成、効率的な検索テクニックを理解するのに最適な方法です。 Go の効率性と Elasticsearch の強力なインデックス作成を利用して、高速なデータ取得と簡単な拡張性を備えた、シンプルだが機能的な検索エンジンを作成したいと考えていました。

主な特長

  • 自動クロール: cron ジョブを使用すると、RelaxEngine を定期的に実行し、データをスクレイピングして Elasticsearch に保存できます。
  • 全文検索: RelaxWeb は全文検索機能を提供し、キーワードによってコンテンツにインデックスを付け、高速な検索を可能にします。
  • REST API: ページネーション、日付フィルター、コンテンツのハイライトのパラメーターを備えた RESTful API を通じてアクセスできます。
  • データ ストレージ: インデックス付きコンテンツは Elasticsearch に保存され、スケーラブルで応答性の高いクエリが可能になります。

RelaxSearch のアーキテクチャ

1. RelaxEngine (Web スクレイパーおよびインデクサー)

RelaxEngine は、Web ページをナビゲートし、コンテンツを抽出して保存する Go で書かれた Web スクレイパーです。これは cron ジョブとして実行されるため、定期的な間隔 (例: 30 分ごと) で動作し、最新の Web データでインデックスを更新し続けることができます。仕組みは次のとおりです:

  • シード URL: RelaxEngine は、指定されたシード URL からスクレイピングを開始し、設定可能な深さまでサイト内のリンクをたどります。
  • コンテンツ解析: ページごとに、タイトル、説明、キーワードを抽出し、有益なデータセットを構築します。
  • Elasticsearch でのインデックス作成: スクレイピングされたコンテンツは Elasticsearch でインデックス付けされ、全文検索の準備が整います。各ページのデータは、一意の識別子、タイトル、説明、その他のメタデータとともに保存されます。

2. RelaxWeb(検索API)

RelaxWeb は RESTful API エンドポイントを提供し、Elasticsearch に保存されているデータのクエリと取得を簡単にします。 API はキーワード、ページネーション、日付フィルタリングなどのいくつかのパラメータを受け入れ、関連するコンテンツを JSON 形式で返します。

  • API エンドポイント: /search
  • クエリパラメータ:
    • キーワード: 主な検索語。
    • 開始元とサイズ: ページネーション制御。
    • dateRangeStart および dateRangeEnd: データのタイムスタンプに基づいて結果をフィルターします。

Building a Web Search Engine in Go with Elasticsearch

主要なコンポーネントとコード スニペット

以下は、RelaxSearch がどのように機能するかを説明するために、いくつかの重要なコンポーネントと RelaxSearch からのコードの抜粋です。

RelaxEngine のメイン Go コード

コア機能は 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 コードを検索

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)
}

RelaxSearch のセットアップ

  1. リポジトリのクローンを作成します
   git clone https://github.com/Ravikisha/RelaxSearch.git
   cd RelaxSearch
  1. 構成

    Elasticsearch 認証情報を使用して、RelaxEngine と RelaxWeb の両方の .env ファイルを更新します。

  2. Docker で実行

    RelaxSearch は Docker を使用してセットアップを簡単にします。次を実行するだけです:

   docker-compose up --build

Building a Web Search Engine in Go with Elasticsearch

Building a Web Search Engine in Go with Elasticsearch

Building a Web Search Engine in Go with Elasticsearch

課題と改善点

  • スケーラビリティ: Elasticsearch は拡張性に優れていますが、多数のリンクによる大規模なスクレイピングを処理するには、大規模なデプロイメント向けの最適化が必要です。
  • 堅牢なエラー処理: エラー処理と再試行メカニズムを強化すると、復元力が向上します。

結論

RelaxSearch は、基本的な検索エンジンの教育的かつ実践的なデモンストレーションです。このプロジェクトはまだプロトタイプですが、Web スクレイピング、全文検索、Go と Elasticsearch を使用した効率的なデータ インデックス作成の基礎を理解するのに役立ちました。これにより、スケーラブルな環境での改善と実際のアプリケーションへの道が開かれます。

GitHub リポジトリを探索して、RelaxSearch を自分で試してみてください!

以上がElasticsearch を使用して Go で Web 検索エンジンを構築するの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。