検索は、訪問者が目的のコンテンツをすばやく見つけるのに役立つため、Webサイトの重要な部分です。 Kentico Kontentを使用すると、外部の検索エンジンを簡単に統合できるため、複雑な検索アルゴリズムを自分で実装する必要はありません。
このブログ投稿では、KenticoKontentとAlgoliaのサンプル統合について説明します。
MVCアプローチを使用し、バックエンドにC#プログラミング言語を使用し、フロントエンドにJavaScriptを使用して、.NETCoreプラットフォームで機能を開発します。 KenticoKontentに保存されているコンテンツを検索します。この場合、コード例で検索するコンテンツタイプとしてブログ投稿を使用しますが、コードは任意のコンテンツタイプに合わせて簡単に変更できます。
アルゴリア入門
プロセスの最初のステップは、 Algoliaでアカウントを作成することです。登録が完了すると、ログインしてプロファイル内のAPIキーを見つけることができます。 AlgoliaのAPIを呼び出すときに使用する必要がある3つの基本的な情報があります。
- アプリケーションID–使用するアプリケーションを識別するため
- 検索専用APIキー–検索クエリに使用できるAPIキー(公開して表示できるため、フロントエンドで使用できます)
- 管理APIキー–インデックスを管理するため(バックエンドでのみ使用できるように非公開にする必要があります)
また、Algoliaの概念、API、および準備されたUIウィジェットを理解するために、Algoliaのドキュメントを確認することをお勧めします。
ここで、コードを実装するための3つの基本的な手順があります。
- 現在のデータにインデックスを付ける
- データが変更されたときにインデックスを作成する(Webhookを使用)
- インデックスを検索して結果を表示します(Web訪問者がクエリを送信した場合)
現在のデータにインデックスを付ける
インデックス作成ではプライベート管理APIキーが使用されるため、データはバックエンドからインデックス作成する必要があります。 Algolia.Search NuGetパッケージを使用してAlgoliaのAPIをスムーズに操作し、 Kentico Kontent Delivery .NET SDKを使用して、KenticoKontentアプリからブログ投稿データを取得します。
まず、ブログ投稿のデータを格納するBlogPostSearchModelというモデルを用意します。モデルには、インデックスを作成するテキストだけを含める必要はありません。後で結果を表示するときに使用するために、他のさまざまなデータをAlgoliaインデックスに追加できます。これにより、時間を節約でき、最初にKenticoKontentアプリケーションからデータを取得する必要がなくなります。この例では、 URLSlugフィールドを追加して、ブログ投稿へのリンクを作成できるようにします。
次に、DeliveryAPIによってContentItemタイプのオブジェクトとして返されたデータからBlogPostSearchModelオブジェクトを作成するためのメソッドを準備します。
その後、Delivery APIを使用してすべてのブログ投稿を取得するメソッドを作成し、上記のメソッドを利用してBlogPostSearchModelインスタンスのリストを作成します。 ProjectIDを使用して、ブログ投稿の取得元のプロジェクトを識別します。
これは、デモンストレーション目的で選択したKenticoKontentからデータを取得するための基本的なアプローチです。本番コードの場合、Delivery APIを介してコンテンツを受信するための推奨される方法であるため、代わりに強い型モデルのアプローチを使用することをお勧めします。
また、リッチテキストフィールドのコンテンツをサニタイズするメソッドも必要です。つまり、HTMLタグを削除し、インデックス作成中にエラーを引き起こす可能性のある特殊文字をエスケープします。
今、私たちはAlgoliaのインデックスに与えられたブログの記事をインデックスするための方法を実装することができます-両方の最初のインデックス作成と将来のデータのインデックス作成に使用します。
最後に、これらの方法を活用して、現在のブログ投稿を取得し、アルゴリアでインデックスを作成できます。
データが変更されたときにインデックスを作成する
Kentico Kontentは、新しいコンテンツを公開したり、公開されたコンテンツを編集したりするたびにシステムに通知できるWebhookをサポートしています。これを有効にするには、 ドキュメントの説明に従ってWebhookを設定し、Webhookからシステムへのメッセージを処理するMVCアクションメソッドを実装する必要があります。
このメソッドは、Webhook設定の「URLアドレス」フィールドで指定された特定のルートでのHttpPostリクエストのみを処理します。 (たとえば、「webhook」ルートを使用する場合、URLは「https:// ourdomain / webhook」である必要があります。)また、メッセージが途中で変更されていないことを確認する必要があります。メッセージと一緒に送信される署名には、base64でエンコードされたメッセージのハッシュが含まれています。したがって、最初に、期待される署名を計算するメソッドを準備する必要があります。
次に、Webhookメッセージを処理するアクションメソッドを実装できます。
検索と表示結果
フロントエンド側で検索を実行して、Algoliaのサーバーに電話をかけ、サーバーにコールバックせずに直接応答を受信できるようにします。このアプローチにより、パフォーマンスが大幅に向上します。 UIの実装を容易にするために、 既存のAlgoliaウィジェットを活用することもできます。では、どのようにUIを構築するのでしょうか。
まず、index.htmlにdivを準備する必要があります。これは、ユーザーが検索クエリや、ページング、統計、検索結果などの他のUIパーツを入力できる入力フィールドのコンテナーとして機能します。
これで、適切なコンテナーに結果と追加のUI要素を表示するJavaScriptを追加できます。
結果の特定のアイテムのレイアウトは、テンプレートによって定義されます。この例では、テンプレートは、IDが「hit-template」の
まとめ
このウォークスルーでは、Kentico KontentをAlgoliaと統合して、Webサイトのコンテンツを簡単に検索できることを示しました。この機能は、ユーザーエクスペリエンスの向上に役立ちます。
アルゴリア検索を試してみませんか?