Successfully reported this slideshow.
We use your LinkedIn profile and activity data to personalize ads and to show you more relevant ads. You can change your ad preferences anytime.

第15回 Solr勉強会 #SolrJP Amazon CloudSearch Deep Dive

14,964 views

Published on

第15回 Solr勉強会 #SolrJP
Amazon CloudSearch Deep Dive

Published in: Technology

第15回 Solr勉強会 #SolrJP Amazon CloudSearch Deep Dive

  1. 1. Amazon CloudSearch Deep Dive 2014年年12⽉月8⽇日 第15回 Solr勉強会 #SolrJP アマゾンデータサービスジャパン株式会社 篠原英治
  2. 2. Amazon CloudSearch Deep Dive ! Agenda • Who am I • Amazon CloudSearch Overview • Amazon CloudSearch Update • Inside Amazon CloudSearch • Amazon CloudSearch Pro Tips • Wrap up
  3. 3. Amazon CloudSearch Deep Dive ! Agenda • Who am I • Amazon CloudSearch Overview • Amazon CloudSearch Update • Inside Amazon CloudSearch • Amazon CloudSearch Pro Tips • Wrap up
  4. 4. Who am I ! Name: 篠原 英治 / Eiji Shinohara ! Role: AWS Solution Architect for Japanese Startups Amazon CloudSearch Subject Matter Expert ! Twitter: @shinodogg ! Blog: http://shinodogg.com
  5. 5. Who am I ! schoo web-‐‑‒campus(schoo.jp)で先⽣生やりました
  6. 6. Amazon CloudSearch Deep Dive ! AWSの授業を検索索して探して受講できます!
  7. 7. Amazon CloudSearch Deep Dive ! 実はこの検索索機能、Amazon CloudSearchで動いています!
  8. 8. Amazon CloudSearch Deep Dive ! しかも超短期間(1週間)で導⼊入!! (勿論論schooのエンジニアの皆さんの技術⼒力力⾼高いからですが!) http://www.slideshare.net/hiromitsuito71/20141017-‐‑‒cloud-‐‑‒searchschoo
  9. 9. Amazon CloudSearch Deep Dive ! CloudSearchは⽇日本でも様々なところで使われています!
  10. 10. Who am I ! Amazon CloudSearchを⽇日本に広める&⽇日本からのフィー ドバックをUSの開発者たちに伝える仕事をしています
  11. 11. Amazon(A9) が Gold Sponsor をした 『Lucene/Solr Revolution 2014』に参加してきました ! レポートブログ書いたのでよろしければご覧ください! http://shinodogg.com/?p=6163
  12. 12. Amazon CloudSearch Deep Dive ! Agenda • Who am I • Amazon CloudSearch Overview • Amazon CloudSearch Update • Inside Amazon CloudSearch • Amazon CloudSearch Pro Tips • Wrap up
  13. 13. Amazon?A9? ! Amazonで商品検索索すると下の⽅方に、、
  14. 14. Amazon CloudSearch Overview ! Amazon CloudSearch は A9 で作っています
  15. 15. Amazon CloudSearch Overview ! Amazon CloudSearch • A9 internal engine ! Apache Lucene/Solr – 2014年年3⽉月のリリースでLucene/Solrベースになりました ☺ • Take advantage of Solr features, especially languages – 特に⾔言語周り – CloudSearchの⽇日本語のサポートはSolrベースになってから • Easier to get started for new engineers – プロプライエタリなものより馴染みのあるもの • Apache Software Foundation project, with a defined process to contribute. No need to fork. – こちらは後ほどもう少し詳しく
  16. 16. Amazon CloudSearch Overview ! Amazon CloudSearch in Amazon • Amazonの中でも様々なところで使われています。その中の⼀一部をご紹介 amazon smile : Support Local Charities/10s of millions of products https://smile.amazon.com/
  17. 17. Amazon CloudSearch Overview ! Amazon CloudSearch in Amazon • Amazonの中でも様々なところで使われています。その中の⼀一部をご紹介 goodreads : 30 million members/900 million books/34 million reviews https://www.goodreads.com/
  18. 18. ! Amazon CloudSearch § フルマネージドなクラウド型検索索エンジン § 検索索ソリューションが容易易に導⼊入可能 § 2014年年11⽉月現在 34 の⾔言語をサポート § 豊富な検索索機能 • ハイライト表⽰示 • サジェスト(AutoComplete) • 地理理空間検索索
  19. 19. CloudSearch Feature ! Per-‐‑‒Field Language Control ※ “Multiple Languages”はCJKの場合Bi-‐‑‒gramによるインデクシング
  20. 20. ! Highlighting CloudSearch Feature /searchq=iron+manhighlight.plot={format:text} hit: [{ id: tt1228705, fields: { title: Iron Man 2” }, highlights: { plot: Tony Stark has declared himself *Iron* *Man* and installed world... } },...
  21. 21. ! Suggestions CloudSearch Feature ※ ⽇日本語は読みでもサジェストもできます /suggest?q=irsuggester=title_̲sug suggest: {query: iro, found: 5, suggestions: [ {“suggestion”: “Iron Man”,…id: tt0371746}, {suggestion: Iron Man 2”,…id”:tt1228705}, ...
  22. 22. CloudSearch Feature ! Geo-‐‑‒Spatial support • Latitude-‐‑‒Longitude data types • 範囲/バウンディングボックス検索索 • Distance sort • 球⾯面上の距離離(haversin) • near me 等
  23. 23. CloudSearch Feature ! Enhanced Availability • Multi Availability-‐‑‒Zone
  24. 24. • Term Boosting CloudSearch Feature – (or 'man' 'woman')q.parser=structured When a Man Loves a Woman Wonder Woman The Woman in Black” ... – (or (term boost=5 'manʼ’) 'woman')q.parser=structured The Lawnmower Man Dead Man Repo Man” ...
  25. 25. 例例えばサクっと東京メトロ南北北線の駅名検索索を⽴立立ち上げたい
  26. 26. CloudSearchの利利⽤用イメージ ! ドメインの作成
  27. 27. CloudSearchの利利⽤用イメージ ! データ投⼊入(東京メトロ南北北線の駅名&路路線)
  28. 28. CloudSearchの利利⽤用イメージ ! フィールドの定義
  29. 29. CloudSearchの利利⽤用イメージ ! “JR⼭山⼿手線”
  30. 30. CloudSearchの利利⽤用イメージ ! “⿇麻布” or “⼀一丁⽬目”
  31. 31. Lucne/Solrベースの検索索エンジン ! ⼤大量量のドキュメントから特定の⽂文字列列を検索索 § grepのように最初から1つ1つ探すのは⾮非常に時間がかかる § 素早く引き当てられるよう予めインデックスを作っておく § 転置インデックス § TF-‐‑‒IDFによるスコアリング § 複数のクエリパーサをサポート
  32. 32. CloudSearch – 様々なデータ形式をサポート ! データの形式 Literal Double Date Signed IntegerText
  33. 33. Ranking and Relevance(順位と適合性) ! スコア(_̲score)によるソート
  34. 34. Ranking and Relevance(順位と適合性) ! A/Bテスト • マネージメントコンソールで⽐比較しながら調整
  35. 35. Apache Lucene/Solrへのコントリビューション Expressions ! Build arbitrary scoring functions using Javascript-‐‑‒like syntax. ! Can refer to other fields and/or other expressions. ! Are compiled at runtime. ! To be added in Solr: SOLR-‐‑‒5707 // compile an expression: Expression expr = JavascriptCompiler.compile(sqrt(_̲score) + ln(popularity)); // we use SimpleBindings: which just maps variables to SortField instances SimpleBindings bindings = new SimpleBindings(); bindings.add(new SortField(_̲score, SortField.Type.SCORE)); bindings.add(new SortField(popularity, SortField.Type.INT)); // create a sort field and sort by it (reverse order) Sort sort = new Sort(expr.getSortField(bindings, true)); Query query = new TermQuery(new Term(body, contents)); searcher.search(query, null, 3, sort);
  36. 36. Apache Lucene/Solrへのコントリビューション Jack が作った 『Simple Query Parser』 ! Parse human readable query syntax ! Can enable / disable “operations” ! Really Simple ! JackはVertical Keyboard使ってる ☺
  37. 37. Amazon CloudSearch Deep Dive ! Agenda • Who am I • Amazon CloudSearch Overview • Amazon CloudSearch Update • Inside Amazon CloudSearch • Amazon CloudSearch Pro Tips • Wrap up
  38. 38. Amazon CloudSearch Update ! 2014年年3⽉月のローンチに関してはWebinarの資料料 AWS Black Belt Tech Webinar 毎週⽔水曜18時〜~ http://www.slideshare.net/AmazonWebServicesJapan/aws-black-belt-tech-amazon-cloudsearch
  39. 39. Amazon CloudSearch Update ! 5⽉月29⽇日 ヘブライ語サポート&パーティション数の事前設定が可能に パーティションを増やす事で初期移⾏行行時など、短時間に⼤大量量のインデクシング処理理が可能
  40. 40. Amazon CloudSearch Update ! 6⽉月26⽇日 CLI/SDKで検索索およびドキュメントの更更新処理理が可能に $ aws cloudsearchdomain search -‐‑‒-‐‑‒endpoint-‐‑‒url https://xxx.ap-‐‑‒northeast-‐‑‒1.cloudsearch.amazonaws.com/ -‐‑‒-‐‑‒search-‐‑‒query james { status: { rid: hNOPlP8oCgqnCm0=, time-‐‑‒ms: 3 }, hits: { found: 304, hit: [ { fields: { rating: 7.5,
  41. 41. Amazon CloudSearch Update ! 8⽉月14⽇日 Identity and Access Management(IAM)との連携強化 • 特定のリソースに関する特定のオペレーションを制御 { Version:2012-‐‑‒10-‐‑‒17, Statement: [ { Effect: Allow, Action: [cloudsearch:search, cloudsearch:List*], Resource: arn:aws:cloudsearch:us-‐‑‒east-‐‑‒1:xxx:domain/movies” Condition:{IpAddress:{aws:SourceIp:192.0.2.0/32}} } ] }
  42. 42. Amazon CloudSearch Update ! CloudTrail対応 • AWS APIの呼び出しを記録するサービス。以下の情報を記録 API 呼び出し元の ID API 呼び出し元のソース IP アドレス リクエストのパラメータ AWS サービスから返された応答要素
  43. 43. Amazon CloudSearch Update ! Indexing Bigrams • Bi-‐‑‒gramでのインデクシング ! Customizing Japanese Tokenization • 形態素解析辞書のカスタマイズ
  44. 44. ! Indexing Bigrams • CJK(中国語、⽇日本語、韓国語)に対応 • Analysis Scheme で Multiple Languages を選択いただく ことでBi-‐‑‒Gramでのインデクシングが可能になります • 検索索の取りこぼしを無くす事が可能 • 但しノイズの対応が必要な場合も – 例例: “東京都”を”京都”で検索索 – 形態素解析フィールドでヒットした際のスコアを上げる等
  45. 45. ! Customizing Japanese Tokenization • 禿銅/ググる/⾹香具師といった辞書にない⾔言葉葉でもトークナイズ可能 • 特に⽇日本のお客様から多くのご要望をいただいていた機能
  46. 46. ! 以前のCloudSearch勉強会の⼤大須賀さん@Yahoo!のスライド
  47. 47. Tokenization Dictionary
  48. 48. Tokenization Dictionary
  49. 49. Tokenization Dictionary ! CLIでも登録可能 { AnalysisSchemeName: jascheme, AnalysisSchemeLanguage: ja, AnalysisOptions: { JapaneseTokenizationDictionary: [ [⽇日本経済新聞,⽇日本 経済 新聞,ニホン ケイザイ シンブン,カスタム名詞], [トートバッグ,トート バッグ,トート バッグ,かずカナ名詞], [朝⻘青⿓龍龍,朝⻘青⿓龍龍,アサショウリュウ,カスタム⼈人名] ] } } $ aws cloudsearch define-‐‑‒analysis-‐‑‒scheme -‐‑‒-‐‑‒region us-‐‑‒east-‐‑‒1 -‐‑‒-‐‑‒domain-‐‑‒name mydomain -‐‑‒-‐‑‒analysis-‐‑‒scheme file://jascheme.txt
  50. 50. Amazon CloudSearch Deep Dive ! Agenda • Who am I • Amazon CloudSearch Overview • Amazon CloudSearch Update • Inside Amazon CloudSearch • Amazon CloudSearch Pro Tips • Wrap up
  51. 51. Automatic Scaling ! ドキュメントのサイズ/数および検索索リクエスト数によって⾃自動的にスケール データ量量増加に ⾃自動対応 検索索アクセス増加に ⾃自動対応
  52. 52. Inside Amazon CloudSearch ! Lucene/Solr Revolution 2014 で A9 の Tomás が詳細を発表
  53. 53. Inside Amazon CloudSearch ! Amazon CloudSearch の Indexing Processing Script QueuingBatching Amazon EC2 Amazon EC2 Amazon CloudSearch Amazon SQS Source System Search Data Format (SDF)
  54. 54. ! Amazon CloudSearch の Indexing P1 EC2 P2 EC2 EC2 ELB P3 batch § どの Partition も Indexing Node になる § ELB(AWSのマネージドなバランサ)での振り分け § インスタンスタイプによってスレッド数が異異なる
  55. 55. ! Amazon CloudSearch の Indexing S3DynamoDB EC2 P1 batch Document Service 200 § BatchデータはS3。メタデータはDynamoDB § Document Serviceは処理理を終えたら200(OK)を返す
  56. 56. ! Amazon CloudSearch の Indexing S3DynamoDB Updater ProcessSolr EC2 P1 Document Service § インデクシングしたバイナリをS3。メタデータを更更新 § 各ノードはS3から⾃自分が担当分のバイナリを取得してSolrへ
  57. 57. Amazon S3の概要 東京リージョン 世界中の拠点(リージョン)から選択 3か所以上で ⾃自動複製 バケット ⾼高い耐久性で データ失わない: 99.999999999% データセンターA データ置くだけ。インフ ラ、電源、気にしない。 容量量無制限。 データセンターB ファイルデータセンターC ⇒ テキスト、画像、動画 保存するデータは、⾃自動 で暗号化することも可能 安価な従量量課⾦金金 1GB/⽉月 : 約3.5円
  58. 58. ! Amazon CloudSearch の Query P1 EC2 P2 EC2 EC2 ELB P3 query § インデクシングと同じようにELB経由で割り振って分散検索索 § インスタンスタイプやクエリの重い軽いによって捌ける数が異異なる
  59. 59. ! Amazon CloudSearch の Query u クエリの負荷状況によって Auto Scaling による Replication • Auto ScalingはEC2の負荷に応じて⾃自動的に拡⼤大/縮⼩小する仕組み • 例例) CPU使⽤用率率率が5分以上継続して70%以上だったら2台追加 ELB EC2EC2 Auto Scaling Group Auto Scaling 負荷状況を監視 CloudWatch ELBの振り分けに追加 EC2EC2 EC2を追加構築
  60. 60. ! Amazon CloudSearch の Query Auto Scaling Group P1 EC2 Auto Scaling Group P2 EC2 Auto Scaling Group P3 EC2
  61. 61. ! Amazon CloudSearch の Query Auto Scaling Group P1 EC2 Auto Scaling Group P2 EC2 Auto Scaling Group P3 EC2 P1 EC2 P2 EC2 P3 EC2 P1 EC2 P2 EC2 P3 EC2
  62. 62. ! Amazon CloudSearch の Data Scaling SmallMediumLarge § データサイズによってスケールアップ § 古いインスタンスでリクエストを受け付けながら⾏行行うので ”No downtime”でサービスを継続
  63. 63. ! Amazon CloudSearch の Data Scaling Index Index P1 Amazon Index P2 EMR § スケールアップでまかなえなくなったらEMR (AWSのHadoopサービス)でインデックスを分割してスケールアウト § 分割中は古いインスタンスがリクエストを受け付けるので ”No downtime”でサービスを継続 § 但し Eventual Consistency なモデルなので考慮は必要
  64. 64. ! Amazon CloudSearch で Configuration が変更更された時 Index A Amazon EMR Index B § 検索索ドメインの設定が変更更されてインデックスをやり直さなければな らない場合は裏裏でEMRで実⾏行行 § 新しいインデックス作成中は古いインデックスでリクエストを受け付 けるので”No downtime”でサービスを継続
  65. 65. Inside Amazon CloudSearch ! 内部ではAWSの様々なサービスが使われています • CloudSearchを使う上ではユーザーの皆さまが意識識していただく 必要はございません • 但し、CloudSearchは主に、インスタンスが何台・何時間稼働し たか?という課⾦金金体系であるため、重いクエリが頻繁に叩かれて レプリケーションが多くなると料料⾦金金がかさむ可能性があります • 現在どのような形でメトリクスを提供するか検討しています
  66. 66. Amazon CloudSearch Deep Dive ! Agenda • Who am I • Amazon CloudSearch Overview • Amazon CloudSearch Update • Inside Amazon CloudSearch • Amazon CloudSearch Pro Tips • Wrap up
  67. 67. Amazon CloudSearch Pro Tips ! 11⽉月に開催された『AWS re:Invent 2014』にて Jon Handler が Amazon CloudSearchの”Deep Dive and Best Practices”で登壇 • Jonは5⽉月にCloudSearchを 紹介しに東京に来てくれました!
  68. 68. Amazon CloudSearch Pro Tips ! Pro Tips 1: Use Maximum Batches • CloudSearchは上限5MB(ドキュメント数は収まる範囲ならいくつでもOK)で インデクシングしていただくのが最も⾼高いスループットで低いレイテンシ • 1000件のインデクシングリクエスト毎に0.10USDなので、コスト的にも有利利 • ⼿手前にSQSを挟んで処理理していただくケースも • SDK/CLIの CloudSearchDomainでインデクシングしていただくと便便利利 例例: $ aws cloudsearchdomain upload-‐‑‒documents〜~
  69. 69. Amazon CloudSearch Pro Tips ! Pro Tips 2: Increase Instance type for load-‐‑‒in • 多重度度を上げてデータ投⼊入で短時間に⼤大量量データのインデクシングをする • ⼤大量量のQueryが発⽣生する際はDesiredでレプリケーション数を上げておく • インスタンスタイプ毎のデータ量量やスレッド数の⽬目安の紹介も!
  70. 70. Amazon CloudSearch Pro Tips ! Pro Tips • 他にも様々なTipsが紹介されているので是⾮非ご覧ください! • 発表資料料: http://goo.gl/pklAzW • Youtube: http://youtu.be/OeHaj1a66I4
  71. 71. Amazon CloudSearch Deep Dive ! Wrap up • CloudSearchは⽇日本でも様々なサービスで利利⽤用されています • CloudSearchはフルマネージドなクラウド型検索索エンジンです • CloudSearchは2014年年に様々なアップデートを⾏行行いました • CloudSearchはLucene/SolrにContributeしています • CloudSearchはAWSの様々なサービスを利利⽤用しています • CloudSearchのTipsが公開されているので是⾮非御覧ください
  72. 72. Amazon CloudSearch Deep Dive ! 導⼊入をご検討中の⽅方は是⾮非お声がけください • 2014年年11⽉月、最⼤大で50%の値下げを実施しました
  73. 73. Amazon CloudSearch Deep Dive ! 最後に、、 2015年年も多くのアップデートを予定しています! I believe we can make you say WOW!!
  74. 74. ありがとうございました!

×