絶品ゆどうふのタレ

ふと気づいたことを綴るだけのメモ

AWS Summit 2015 - Day1 - Amazon CloudSearch Deep Dive

  • AWS 篠原さん

SnapDish事例

  • ランチセッション

    • ランチといえば
    • お弁当どうしよう
  • CloudSearchで検索を入れてる

そもそもどういうさーびす?

  • フルマネージドな検索エンジン

    • 多言語対応 34言語
    • ハイライト、サジェスト、地理など
  • AWSの中ではマイナー

  • Amazonで買い物すると。。。検索の下でA9というのが出る

  • スタンフォードA9.com
    • そこで作ってる

どう使う?どういうもの?

  • 南北線の検索をしたい

    • 海外で発表したら、東京都地下鉄やばいという話になった
  • 検索ドメインの作成

    • 南北
  • JSONで駅のコード、駅名などのデータファイルを作成(SDF)
  • upload
  • すると、勝手にスキーマ定義
    • フィールド指定にDynamic Fieldも使える
  • プルダウンで選ぶだけで、日本語でのトークナイズができる

  • あとはもう、検索すれば出る

    • OR検索とかも出来る
  • 形態素解析

    • 辞書のカスタマイズが可能
    • データファイルを作って、定期的に辞書に取り込んだり
  • シノニム・類義語

    • これらもWebやCLIから登録できる
  • Bi-gram Index

    • 言語をMultiple Languageにセットすれば使える
    • 2文字ずつで切るとノイズが発生
      • 東京都と京都
  • 形態素解析とBi-gramを組み合わせて使う

    • SourceField
    • 両方でor検索的にして、形態素解析側を優先する
  • ソート順はTF-IDF

    • ドキュメントにその言葉がいっぱい出てくるなら、高スコアにする
  • 様々なexpression

    • 結果の重みづけ、調整ができる
  • A/Bテスト機能

    • 重み付けを変えた場合の結果を比較する機能
  • 複数の方の組み合わせ

  • よみがなをベースとしたSuggestion

  • 可用性、IAMによる管理

    • AWS Security Blogにもいい例がある

Inside Amazon CloudSearch

  • フルマネージド

    • Auto Pertitioning
    • Auto Scaling
  • 中身がどうなっているのか?

Indexing

  • 中身はELBがいて、その裏にEC2が並んでる状態
  • データを保存する場合に、どれかのノードに送られる
  • そのノードが、ひとまずレスポンスを受け取った上で、DynamoにUpload。その後は非同期処理
  • 定期的にS3/Dynamoにポーリングして、担当の処理があれば処理・Indexを作る

Query

  • 受け付けるところまでは同じ
  • 一般的なEC2の場合と同じAutoScalingが動いている
  • クエリの量が増えると、それによって増える

AutoPertitioning

  • データ容量の増加にどうやって対応してるか
  • 最初はスケールアップ

    • なので、ダウンタイムはないが切り替わり中はIndexingが反映されないことがある
  • 1ノードでまかないきれなくなったら、スケールアウト

  • パーティション分割処理はHadoop(EMR)

  • 検索ドメインの変更など

    • 同様にEMRで

初期のデータを投入する場合

  • 予め大きいインスタンスをたくさん並べると、短時間でIndexing処理できる
  • インスタンスタイプのデータ量の目安
    • データのタイプに依って圧縮率が変わるので、どうしても差が出る

大量のリクエストに備えて事前対応

導入事例

  • schoo

    • 爆速で導入
    • リリースまで1週間
  • nanapi

    • デフォルトのまま使ってる
    • それでもいい感じに検索できている
  • Chatwork

    • 日本最大級の利用例
    • 5億件以上のデータ
    • 運用はほぼメンテナンスフリー
    • CloudSearchにして速度はかなり改善した

更に知りたい方に

  • DocValues
  • CloudSearch SAのビデオ
    • たとえば、普通のqとfq(filter query)の性能差とか