検索エンジンの作り方

検索エンジンは、私たちが人生で当たり前のように感じているものの一つです。何かを探している時、検索エンジンに単語やフレーズを入れると、まるで魔法のように一致する結果のリストが表示されます。今では日常的なことなので、魔法のようには感じられないかもしれません。しかし、アルタビスタの時代を覚えている方なら、今の私たちの状況がいかに便利なのかをご理解いただけるでしょう。

「検索エンジン」と言えば、Google(または一部の方はBing)のような人気のあるウェブ検索エンジンやを思い浮かべやすいでしょう。しかし、検索エンジンの用途は、単にウェブを検索するだけではありません。UberやTinderのような人気のアプリには、自社プラットフォーム専用の位置情報やその他の特性を使用して、ユーザーをドライバーや交際相手と照合する強力な検索エンジンが含まれています。これは、ストリーミングアプリ、学術サイト、さらにはイントラネットでも同じです。実際、主要なWebサイトのナビゲーションバーを見ると、ほとんどの場合、その特定のサイトから必要な内容を見つけるために役立つ検索バーが表示されます。

検索エンジンに適用できるユースケースは膨大な数にのぼり、おそらくそれがこの記事を読む理由でもあるでしょう。この記事をご覧の方は、初めて検索エンジンを作ろうとしている開発者の方かもしれません。あるいは、検索拡張生成で生成AIのエクスペリエンスを強化できることに気がついており、さらに詳しい情報を知りたいと思っている方かもしれません。できるだけわかりやすくするために、このガイドは次の3つのセクションに分かれています:

  • 検索エンジンの定義とコンセプト

  • 独自の検索エンジンの構築

  • Elasticで検索エンジンの構築が簡単に

この記事を読むことで、Elasticsearch Platformによって機能するウェブサーバー、データインジェスト、インデックスを備えた検索エンジンの構築方法がわかります。

検索エンジンの定義とコンセプト

検索エンジンを図書館の司書であると考えてみましょう。司書は、利用者が探している情報を見つける手伝いをしてくれる存在です。解決したい問題や、答えを探している問題を伝えれば、それに応じて最も役に立つと思われる本や資料を案内してくれるというわけです。案内してくれる本や資料が必ずしも的を得ているわけではありませんが、運良くぴったりの本に巡り会うことを期待してやみくもに本を開いて回るよりはずっと効率的です。

検索エンジンを構成する要素としては主に、Webサーバー、データインジェスト、インデックス、結果ページの4つがあります。検索エンジンを作る前に、それぞれがどのような役割を果たしているかを把握しておきましょう。

Webサーバー

検索エンジンが図書館司書だとすると、Webサーバーは図書館そのものです。ユーザーに対して有意義な結果を返すために必要なデータのすべてが、ここに格納されます。Webサーバーは通常、スケーラビリティ、アクセス性、セキュリティ、パフォーマンスの観点から、クラウドベースのものが使われます。Web検索エンジンの場合、WebサーバーにはHTMLページ、画像、動画など、さまざまなWebサイトで利用するアセットが置かれます。また、SNSサイトの場合には、タイトル、ディスクリプション、メタデータなど、そのプラットフォームのコンテンツに必要な情報が置かれます。

データインジェスト

図書館がさまざまな本を厳選・収集する必要があるのと同様に、検索エンジンもどこかからデータを収集する必要があります。だからこそ、データインジェストは検索エンジン構築において非常に重要な部分となります。ウェブ検索エンジンの場合、このデータインジェストはウェブクローラーを使って行われます。クローラーは高度なアルゴリズムを使ってWebサイトをスキャンし、コンテンツの内容や場所を特定します。

APIを介して他のサービスと統合するのも、一種のデータインジェストです。APIを介して他のサービスと統合すると、データをどこから取得するかを選べるようになるため、検索エンジンが特定のデータを見つける精度が大幅に高まります。たとえば、動画の検索エンジンを作るのであれば、YouTube、Netflix、Disney+など複数のプロバイダーからの結果を表示することが考えられます。

同じように、コネクターでも、各種のデータソースから情報を取得できます。コネクターは多くの場合、特定のデータベース、アプリケーション、またはAPIに接続できるように事前に構築されたモジュールやコードスニペットです。コネクターを使えば、手を広げすぎることなく大きな柔軟性が得られます。

インデックス

図書館と同じように、コンテンツのインデックス(目録)を作成しておく必要があります。インデックスがなければ、何がどこにあるかがわからなくなるからです。インデックスは、データソースから得た情報を整理して格納し、効率良く取得できるようにする役割を担います。検索エンジンが効果的に機能するためには、コンテンツをすばやく特定し、順位付けし、提供できる必要があります。

インデックスするデータは膨大な量になる可能性が高いため、単にソースからインデックスをそのままコピーするわけにはいきません。そこで、インデックスでは、コンテンツを処理したうえで、次のような主要素に分解する必要があります。

  • キーワード:ページ内で見つかった単語やフレーズ

  • 埋め込みテキストデータを表す多次元ベクトル

  • メタデータ:タイトル、説明文、その他ページに埋め込まれた構造化データ

  • コンテンツ分析:ページのトピック、要素、および全体的な意味の理解

  • バックリンク:コンテンツへの他のWebサイトからのリンク

検索エンジンの結果ページ(SERP)

このパズルの最後のピースは、実際に検索結果をユーザーに表示することです。検索エンジンの結果ページは、サーバー、データインジェスト、インデックスに関するこれまでの作業のすべてを受けて、検索結果をユーザーにとって使いやすい形の一覧にまとめたものです。

SERPの見た目は検索エンジンごとに違いますが、タイトル、リンク、ディスクリプションが表示されるほか、何らかの形のページネーションを設けてあるのが一般的です。このほか、頻繁に使うパラメーターを基に検索結果を絞り込めるように、さらに高度なフィルタリングとファセットの機能を用意することもあります。しかし、重要なのは、検索結果が明確に表示され、ユーザーにとって最善かつ最も関連性の高い選択肢が見つけやすくなっていることです。

検索の関連性、ユーザーの意図を理解していることを示すことで信頼を育み、確実に正しい道にたどり着くようにします。これにより最終的には、顧客が望む情報にシームレスに導かれ、忠誠心を築き、長期的なエンゲージメントを生み出します。

Elasticで独自の検索エンジンを開発する

検索エンジンの主な要素について理解が深まったところで、今度は検索エンジンを開発するプロセスと、その際に直面する可能性が考えられる問題を見ていきましょう。

まずは、検索エンジンのスケールを検討する必要があります。とにかく優れたものを作りたい、新たなGoogleを目指したいという誘惑に駆られるかもしれませんが、数十億ものWebページをクローリングするには、インフラも演算能力も膨大な量が必要になります。データを格納するための容量については言うまでもありません。

また、開発を始めるにあたっては、自分が現在持っている知識とスキルセットを念頭に置くことも必要です。データソースをよく理解しているほど、開発する検索エンジンにそのソースを活用しやすくなるものです。それと同じく、できるだけ自分が経験済みの技術スタックを活用するようにしましょう。Pythonが得意なら、検索エンジンの開発にもPythonを使うことを検討してください。

ステップ1:検索の要件を決める

検索エンジン開発の第一歩が、検索エンジンでどんな問題を解決するかを決めることです。この決定は、データソースからインデックス、結果の表示方法に至るまで、今後開発するあらゆる要素に影響を及ぼします。そのため、検索エンジンの想定ユーザーを検討するとともに、以下の質問について自分なりの答えを考えておく必要があります。

  • ユーザーはなぜこの情報/コンテンツを探しているのか?

  • 関連性が高いと判断するうえで必要な情報は何か?

  • ある結果が他の結果よりも良いと判断する方法をどうするか?

  • 検索結果をできるだけ使いやすくするには、結果をどのように表示すれば良いか?

これらの質問について答えが固まれば、どのデータソースを使うか、検索エンジンの結果ページに画像を入れるかどうかなど、開発プロセス全体を通じて下す重要な決断の精度が大きく高まるはずです。頭の中にある答えが明確であればあるほど、ユーザーのニーズと期待に応えられる可能性も高くなります。

ステップ2:Webをクローリングしてデータを集める

検索エンジンの要件が決まったら、次は必要なデータを取り込む作業です。統合機能やコネクターを使用する予定の場合には、対応するデータソースに対するアクセス権を取得したうえで、インデックスする際に必要なタイミングでいつでもそのデータにアクセスできるようにする必要があります。データソースが自分のものであれば、この点が問題になることはありません。これに対して、外部のデータソースの場合には、常にある程度のリスクが付きまとうことを忘れないようにしましょう。データソースの所有者がアクセス権を取り消したり、データを変更したりする事態が起こると、それが原因となって将来的に問題が発生するおそれがあります。この点は、データの更新スケジュールを設定することにより対応できることもありますが、データの構造やアーキテクチャーに変更があった場合には、依然として問題が起こる可能性が残ります。

ウェブ検索エンジンを作成する場合、インデックスしたいデータを取得するためにウェブクローラーを使う必要があります。この作業にかかる時間は、検索エンジンの範囲によって全く異なります。理論上は自分でクローラーを作ることもできますが、それにはかなりの作業が必要です。代わりに、既存のツールであるElastic ウェブクローラーを使う方がはるかに速く簡単です。これにより、好きなWebサイトをスキャンでき、自動再クロールをスケジュールできるため、検索エンジンを常に最新の状態に保てます。

ステップ3:収集した情報を格納する

クローラー、API、コネクターのどれを使用しても構いません。いずれの場合も、収集した情報を格納する場所が必要です。しかし、急いで古いデータベースを選んではいけません。データ量と増加、パフォーマンス要件、データ構造、拡張性、信頼性、セキュリティ、分析などを考慮する必要があります。また、このデータを短期的にも長期的に格納するコストも考慮する必要があります。

既に書いたとおり、ご自身のスキルセットを考慮に入れることも有用です。たとえば、これまでの開発のほとんどにElasticsearchを使っていたのであれば、今はそれが最善の選択肢になるでしょう。しかし、何か別種のデータベースに慣れているのであれば、上に挙げた要素を基に判断していく必要があります。

手順4:ページのインデキシング

次は、収集と格納を済ませたデータをインデックスする作業です。ユーザーのクエリに対して最も関連性の高い結果を返すためには、この作業が欠かせません。幸い、Elastic Web Crawlerなら、インデックスの機能が含まれているので、簡単に終わります。もっとも、インデックス構造を構成するにあたり、データの粒度、属性インデックス、データ圧縮などの要素を検討することは依然として必要です。

この段階では、ある程度の試行錯誤が必要になると思われます。その試行錯誤をどのように進めていくにしても、ユーザーの以下のような活動に役立つかどうかは常に意識するようにしてください。

  • 関連性の高い情報のすばやい特定

  • 検索の絞り込み、結果のフィルタリング

  • 関連コンテンツの発見

すぐに使える検索UIを使用すると、検索エンジンのUIをすばやく稼働させることができるため、これらすべてがはるかに簡単になります。これにより、検索エンジンをテストしたり、インデキシングを確認したり、検索エンジンを改善するための微調整や変更を加えたりすることができます。これには、フィルタリングやソート、ページネーション、入力時の検索などが含まれます。

ステップ5:検索結果を最適化する

検索エンジンを構築する際の最終的な目標は、最も有用で関連性の高い結果を提供することです。しかし、それがすぐにできることはまずありません。代わりに、その目標の達成に近づくために、常に検索エンジンを改良する必要があります。キーワードマッチング、ベクトルデータベース、ハイブリッド検索手法、関連性スコアリング、リンク分析、同義語などはすべて大きな改善につながります。

このほか、検索性能の向上に向けて機械学習やAIの利用に目を向けてみるのも効果的です。機械学習やAIを使えば、検索エンジンの性能を格段に高めることができます。検索エンジンがユーザーの振る舞いから学習し、高度なパーソナライゼーションを施せるようになるからです。ユーザーの意図やトーンを深く理解することまで可能になることもあります。もっとも、機械学習やAIを利用する場合には、それに付随する課題にも対処が必要になります。検索エンジンにバイアスが入り込まないようにしたり、プライバシーとセキュリティに関する対策を真剣に考える必要もあります。

検索エンジンの開発を簡単に

初めての検索エンジンを構築するのは大変な作業のように思えるかもしれませんが、これらの手順によって、それが実際には非常に達成可能であることがわかれば幸いです。そして、Elasticはあらゆる段階でのプロセスのお手伝いをします。ウェブクローラーのようなツールでデータのインジェストを簡素化し拡張性があり柔軟なアーキテクチャでインデキシングを強化し、機械学習機能で関連性を高めます。

Webサイト検索を開発するにしろ、何かに特化した検索エンジンを開発するにしろ、Elasticsearchなら効率的でユーザーフレンドリーな検索エクスペリエンスをゼロから作り上げるために必要なツールが揃っています。

次にやるべきこと

準備ができたら、ビジネスに優れた検索エクスペリエンスをもたらすための次の4つのステップに進みましょう。

  1. 無料トライアルを開始してElasticがビジネスにどのように役立つのかを実感してください。

  2. ソリューションのツアーを参考に、Elasticsearchプラットフォームの仕組みと、ソリューションがニーズにフィットする仕組みを確認してください。

  3. 45分間のウェビナーで、Elasticsearchクラスターのセットアップ方法と、データの収集・インジェストを開始する方法を学習しましょう。

  4. 興味を持ってくれそうな方とこの記事を共有してください。メール、LinkedIn、Twitter、Facebookで共有できます。

本記事に記述されているあらゆる機能ないし性能のリリースおよびタイミングは、Elasticの単独裁量に委ねられます。現時点で提供されていないあらゆる機能ないし性能は、すみやかに提供されない可能性、または一切の提供が行われない可能性があります。

このブログ記事では、それぞれのオーナーが所有・運用するサードパーティの生成AIツールを使用したり、参照している可能性があります。Elasticはこれらのサードパーティのツールについていかなる権限も持たず、これらのコンテンツ、運用、使用、またはこれらのツールの使用により生じた損失や損害について、一切の責任も義務も負いません。個人情報または秘密/機密情報についてAIツールを使用する場合は、十分に注意してください。提供したあらゆるデータはAIの訓練やその他の目的に使用される可能性があります。提供した情報の安全や機密性が確保される保証はありません。生成AIツールを使用する前に、プライバシー取り扱い方針や利用条件を十分に理解しておく必要があります。

Elastic、Elasticsearch、ESRE、Elasticsearch Relevance Engine、および関連するマークは、米国およびその他の国におけるElasticsearch N.V.の商標、ロゴ、または登録商標です。他のすべての会社名および製品名は、各所有者の商標、ロゴ、登録商標です。