Amazon CloudSearch で検索機能を実現 – 実装編

はじめに

前回、CloudSearch の環境を作ったので、今回は実際にアプリケーション側から利用してみたいと思います。
検索キーワードを入力して、結果を受け取って表示することを目指します。
言語は Ruby を使用します。

実装

それでは早速実装してみましょう。

1. Endpoint の確認
検索に使用するエンドポイントを確認しましょう。
エンドポイントは CloudSearch のダッシュボード上に記載されています。

2. Gem のインストール
AWS公式から提供されているSDKがありますので、そちらを利用します。
今回は Ruby ですが、各言語で提供されていますので、別の言語を使用する場合は言語にあったSDKを利用してください。
https://aws.amazon.com/jp/tools/#sdk

Ruby の場合は Gem でインストールします。

gem intall aws-sdk

Ruby on Rails で使用する場合は Gemfile に以下を追加して bundle install しましょう。

gem 'aws-sdk', '~> 2'

 

3. コーディング
準備が整ったので、コードを書きましょう。

cloudsearch_sample.rb

require 'aws-sdk'
# 検索条件となるキーワードを入力
puts 'Input search keyword:'
keyword = gets
# クライアントの生成(<your endpoint>には、確認したエンドポイントを入れてください)
client = Aws::CloudSearchDomain::Client.new(endpoint: "http://<your endpoint>")
size = 100
start = 0
loop do 
result = client.search(query: keyword, start: start, size: size)
puts "該当件数: #{result.hits.found}件" if start == 0
# 結果を表示
result.hits.hit.each do |hit|
puts "「#{hit.fields['book_name'].first}」 #{hit.fields['author_name'].first}著"
end
# 結果件数を超えたら終了
break if result.hits.found <= start + size
start += size
end 

全件取得するために100件ずつループで取得して結果を表示するようにしています。

動かしてみる

以上で検索はできるようになったはずです。
早速動かしてみましょう。

前段で作成した Ruby ファイルを実行すると、検索キーワードを求められます。
適当な条件を入れて検索してみると・・・

問題なく検索できていそうですね。
太宰で検索して一番に坂口安吾の著書が返ってくるのは気になるところではありますが、恐らく作品名にマッチしたのが優先されているのでしょう。
このあたりは状況に応じて CloudSearch 側でカスタマイズが必要になる部分かと思います。

今回の例では、作品名と著者しか表示していませんが、他にも様々な情報が結果として返ってきますので、ぜひ色々試してみてください。

おわりに

本来であれば、検索はリッチであればあるほど、時間をかけて作りこまないといけない部分ではありますが、CloudSearch と SDK を利用することで、少ないコード量で簡単に実装できてしまいました。
このように、高度な技術を手軽に利用できるというのは AWS の大きなメリットです。

APN Consulting Partner
スーパーソフトウエアはAWSパートナーネットワーク(APN)のコンサルティングパートナーです。