【検索実装】Amazon CloudSearchを利用してAWSに検索機能を簡単に実装しよう

2021.08.31
DX・システム開発
金昌洙
【検索実装】Amazon CloudSearchを利用してAWSに検索機能を簡単に実装しよう
SHARE ON
  • FaceBook
  • Twitter
  • LINE
  • Note

みなさんこんにちは。Wakka Inc.の日本拠点インフラエンジニアの金です。

ECサイトや自社サービスサイトに求められる機能はたくさんありますが、その中のひとつに検索機能があります。検索機能は、提示された条件に合った情報をデータベースの中から見つけ出す機能です。便利な検索機能があれば、登録された商品の中から好みのものを絞り込むことができたり、読みたい記事だけをピックアップすることができたりするため、UXが重視されるWebサイトには欠かせない機能になっています。

実はAWSには、Amazon CloudSearchというサービスを利用することで、簡単に検索機能を実装することが可能です。そこで今回はCloudSearchの基本概要や特徴、利用料金、具体的な検索機能の実装方法について解説します。

目次

●開発リソースの不足にお悩みなら●

>>>Wakka.Inc独自の海外子会社設立サービスがおすすめ!
無料でサービス資料をダウンロードできますのでぜひご覧ください。

Amazon CloudSearchとは?

『CloudSearch』とは、AWSが提供するサービスのひとつで、Webサイトやアプリケーションに検索機能を実装することができるマネージド型サービスです。ドキュメントファイルはもちろんのこと、Webページや製品情報など大規模なデータの集合体の中から欲しい情報を検索することができます。AWSに関するある程度の知識は必要ですが、エンジニアとしての高度なレベルが求められることはなく、構築をはじめたばかりの人でも利用しやすいサービスです。

CloudSearchは簡単に実装できるサービスですが、性能は非常に高いものになっています。実際に、下記のような標準機能に対応しており、すべてを簡単に利用することができます。

  • ブール型検索
  • プレスフィックス検索
  • 言語に対応したテキスト処理による全文検索
  • 範囲検索

検索機能以外には、候補の自動入力や強調表示などが挙げられます。検索機能が豊富なので、さまざまな検索内容に対応することが可能です。そのため、AWSでWebアプリケーションを運用している方は知っておいて損はないでしょう。

CloudSearchのメリットは下記の4つです。

  • オートスケーリング機能
  • 安いコスト
  • モニタリング機能
  • 高セキュリティ

では、次にそれぞれのメリットについて具体的に解説します。

オートスケーリング機能が搭載

1つ目のメリットは、オートスケーリング機能が搭載されている点です。

検索ドメインのリソースを容量に合わせて調節することができます。例えば、膨大なデータがアップロードされるときはリソースを増やし、アップロードの容量が少ないときはリソースを減らすということが可能です。容量に合わせて適切なリソースを確保し、逆にリソースを余してしまうことも少ないので、とても便利な機能といえるでしょう。

コストが安い

安いコストで導入できることがメリットのひとつです。CloudSearchは30日間無料で利用することができます。また、有料期間中でも検索のインスタンスの使用経費に合わせてコストが変動するため、必ず一定の固定費がかかるということがありません。使用した分だけの料金を支払うという形なので、低コストで運用できる可能性があります。

また、CloudSearchはセットアップ料や初期費用などが無料です。

モニタリング機能

3つ目は、モニタリング機能が搭載されている点です。

CloudSearchには、検索ドメインの自動モニタリング機能と復元機能が搭載されています。マネジメントコンソールからアクセスして、検索ドメインのステータスを監視することができたり、使用状況を確認したりすることが可能です。また、特定のドメインに関する情報を見て、障害の原因などを見つけることもできます。

セキュリティに強い

セキュリティに強いこともメリットのひとつです。CloudSearchには、アクセスポリシーを設定することができます。これにより、検索ドメインの検索や提案サービスなどに対するアクセス制御を行うことが可能です。また、送信するデータはSSLを通じて暗号化されるため、データを悪意のある第三者に読み取られる心配もありません。

CloudSearchの利用料金について

CloudSearchの料金は、検索インスタンスやデータ転送、ドキュメントバッチのアップロード、ドキュメントリクエストによって発生します。使用量に応じた料金が毎月請求されるため、支払い方法は月額払いです。

あなたの会社の使用量によって料金は大幅に異なるため、この記事で具体的な金額を提示することはできないのですが、下記の料金シミュレーターを使用することで発生する金額を予測することができます。

https://calculator.aws/#/

また、CloudSearchは30日間の利用は無料です。そのため、まずは気軽にCloudSearchの使いやすさなどを確認して契約するかどうか決めるのもの良いと思います。

CloudSearchを使って検索機能を実装する手順

CloudSearchを使用して検索機能を実装する手順について解説します。今回のチュートリアルでは、プログラミング言語にPHPを使用、またAWS SDK for PHPを使い実装していくという流れです。

AWS SDK for PHPをインストール

まずは、AWS SDK for PHPをインストールします。手順は下記の通りです。

1.Windowsの場合は、Composer-Setup.exeをダウンロードしてインストールします。下記のURLからダウンロードして、セットアップメニューに沿って作業を進めてください。
https://getcomposer.org/Composer-Setup.exe

2.Linuxにインストールする場合、composerを使用するのが一般的です。下記のコマンドを実行してComposerからインストールしてください。もし、Composerが見つからない場合は、別途インストールする必要があります。
composer require aws/aws-sdk-php

検索ドメインの作成

次は検索ドメインの作成です。今回のチュートリアルでは、検索ドメインの作成をコンソールから行っています。

1.AWSのコンソールにサインインします。まずは下記のURLにアクセスしてください。
https://aws.amazon.com/jp/?nc2=h_lg

2.画面右上にある「コンソールにサインイン」をクリックします。ログイン画面に遷移したあと、メールアドレスとパスワードを入力してログインしてください。

3.画面上部のサービス、機能、ドキュメント検索から「CloudSearch」と入力します。

4.検索結果一覧が表示されるので、サービスの中からCloudSearchを選択してください。

5. CloudSearchの画面に遷移したら、左側にある「Create a new search domain」をクリックします。

6.手順に沿ってドメイン名やインスタンスタイプなどを選択し、検索ドメインを作成してください。ちなみに、今回のチュートリアルではsearch_testという検索ドメイン名にしました。

7.作成が完了したらSDKからアクセスできるようにCloudSearchのアクセスキーとシークレットアクセスキーをcredentialファイルに追記します。下記を参考にアクセスキー情報を追記してください。

[cloudsearch]
aws_access_key_id = XXXXXXXXXXX
aws_secret_access_key = XXXXXXXXXXX

CloudSearchClientを使用して実装する

最後にCloudSearchClientを使用して検索機能を実装します。商品名と商品番号が記載されているファイルを用意して、そこから商品名と商品番号を検索するという流れです。

1. CloudSearchClientをインスタンス化してインデックスフィールドに郵便番号と住所を追加します。

'region' => Region::US_WEST_2
]);

// 商品番号のインデックスフィールドをセット
$client->defineIndexField([
'DomainName' => DOMAIN_NAME,
'IndexField' => [
'IndexFieldName' => 'itemnumber',
'IndexFieldType' => 'int'
],
]);

//住所のインデックスフィールドをセット
$client->defineIndexField([
'DomainName' => DOMAIN_NAME,
'IndexField' => [
'IndexFieldName' => 'itemname',
'IndexFieldType' => 'text',
'TextOptions' => [
'AnalysisScheme' => '_ja_default_',
'HighlightEnabled' => true,
'ReturnEnabled' => false
'SortEnabled' => true,
],
],
]);

// ドキュメントのインデックス作成を開始
$result = $client->indexDocuments([
'DomainName' => DOMAIN_NAME
]);

2.郵便番号や住所が書かれているJSON形式のファイルを準備します。

[
{
"type": "add",
"id": 1,
"fields": {
"itemnumber": "29474649",
"itemname": "商品名1"
}
},
{
"type": "add",
"id": 3750,
"fields": {
"itemnumber": "37638390",
"itemname": "商品名2"
}
}
]

2.作成したJSONファイルをアップロードします。

 'region' => Region::US_WEST_2
]);

$domainClient = $client->getDomainClient(DOMAIN_NAME, [
'credentials' => $client->getCredentials()
]);

$updateItmFile = file_get_contents('item_list.json');

$result = $domainClient-> $updateItmFile ([
'documents' => $updateItmFile,
'contentType' => 'application/json'
]);

2.次に検索をします。今回は商品名1という商品名を含む商品を検索することにしました。

'region' => Region::US_WEST_2
]);

$domainClient = $client->getDomainClient(DOMAIN_NAME, [
'credentials' => $client->getCredentials()
]);

$result = $domainClient->search([
'query' => "(term field=itemnumber '商品名1')",
'queryParser' => "structured",
'highlight' => "{itemname: {format:'text'}}",
'return' => "itemname,itemname",
'size' => 10
]);

foreach ($result['hits']['hit'] as $hit) {
printf("ID=%s, 商品コード=%s, 商品名=%s,
$hit['id'],
$hit['fields']['itemnumber'][0],
$hit['fields']['itemname'][0]
);
}

CloudSearchを利用してAWSに検索機能を実装しよう

今回は、CloudSearchを利用した検索機能の実装方法について解説しました。CloudSearchは使いやすい便利な検索サービスとなっており、AWSを使用する人であれば積極的に活用することをお勧めします。

このブログは、スタートアップや成長企業のエンジニアの方に役立つ情報を掲載しています。他にも気になることがあれば、ノウハウを記事化していきますのでご連絡ください。

また、Wakka Inc.はオフショアラボ型開発や海外開発子会社設立サービスを提供しており、サービス開発からAWSの構築、保守運用までリソース不足に悩む企業を幅広くサポートしています。詳細の説明会も開催していますので、興味のある方はまずはお気軽にお問い合わせください。

ラボ型開発のご相談はWakka.incまで

伴走型システム開発・開発リソース強化ならオフショアラボ型開発。
Wakka Inc.はラボ型開発・海外法人支援で選ばれて10年。経験豊富なコンサルタントが、初めての海外進出でも手厚くサポートします。
日本国内と海外拠点の幅広い当社グループメンバーがあなたのチームの一員に。DevOpsを前提としたチーム編成でサービスグロースを強力に後押しします。まずはサービス資料からという方はこちらから。

この記事を書いた人
金昌洙

前世は社内ネットワーク部門でインフラ担当していました。当時4Uサーバーの重さに限界を感じ、クラウド推進派に。Wakka Inc.の日本拠点にインフラエンジニアとして参画し、サーバー・ネットワーク全般を担当。最近はDocker・CI/CDなどに取り組んでいます。

  • ホーム
  • ブログ
  • 【検索実装】Amazon CloudSearchを利用してAWSに検索機能を簡単に実装しよう