はじめに
前回は、Amazon CloudSearchの環境構築を行いました。
今回は実際にアプリケーション側から利用してみたいと思います。
検索キーワードを入力し、結果を受け取って表示することを目指します。
言語はRubyを使用します。
実装
それでは早速実装していきましょう。
1. Endpoint の確認
検索に使用するエンドポイントを確認しましょう。
エンドポイントはCloudSearchのダッシュボード上に記載されています。
2. Gem のインストール
AWS公式から提供されているSDKがありますので、そちらを利用します。
今回はRubyですが、各言語で提供されています。別の言語を使用する場合は言語にあったSDKをご利用ください。
https://aws.amazon.com/jp/tools/#sdk
Rubyの場合はGemでインストールします。
[code]
gem intall aws-sdk
[/code]
Ruby on Railsで使用する場合は、Gemfileに以下を追加してbundle installしましょう。
[code]
gem 'aws-sdk', '~> 2'
[/code]
3. コーディング
準備が整ったので、コードを書きましょう。
cloudsearch_sample.rb
[code language="ruby"]
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
[/code]
全件取得するために、100件ずつループで取得して結果を表示するようにしています。
動かしてみる
以上で検索ができるようになったはずです。
早速動かしてみましょう。
前段で作成した Ruby ファイルを実行すると、検索キーワードを求められます。
適当な条件を入れて検索してみると…。
問題なく検索できていそうですね。
太宰で検索して一番に坂口安吾の著書が返ってくるのは気になるところではありますが、恐らく作品名にマッチしたものが優先されているのでしょう。
このあたりは状況に応じてCloudSearch側でカスタマイズが必要になる部分かと思います。
今回の例では作品名と著者しか表示していませんが、他にも様々な情報を結果として返すことが可能です。
ぜひご色々と試してみてください。
おわりに
本来、検索周りはリッチであればあるほど、時間をかけて作りこまないといけない部分です。
しかし、CloudSearchとSDKを利用することで、少ないコード量で簡単に実装できてしまいました。
このように高度な技術を手軽に利用できるというのがAWSの大きなメリットの一つです。