クックパッド、グリー、ぐるなび、CROOZは検索技術をどう使っているのか

検索技術を使うなら知ってないと損する6つのこと


クックパッド、グリー、ぐるなび、CROOZは検索技術を
どう使っているのか


有限会社オングス
杉山貴章
2012/2/9

【3】KVSの膨大なKeyを見つけるための全文検索

- PR -

 グリーでログ分析システムの開発を行っている一井崇氏からは、「全文検索のちょっとちがった使い方(仮)」と題する発表があった。

 グリーにおける数値指標管理では、基本となるデータの総数が「1億キー×最大7年」という膨大な量に上り、さらに時間ごとに増え続けるアプリIDとの組み合わせなども考慮すると、すでに人間の手では管理しきれない状態にある。

グリーでの数値指標管理(一井川氏の講演資料「全文検索のちょっとちがった使い方(仮)」より)

 同社ではMySQLベースのKVS(Key Value Store)によって、これらのデータを管理しているが、問題はkeyの数が膨大過ぎて必要なkeyを見つけるのが困難になっていることだという。

 その解決のためにHadoopMongoDBを導入するといった選択肢もあるが、同社が取った方法は「key stringを全文検索することで目的のkeyを探す」というものだった。一井氏によれば、グリーの数値指標管理システムの目的を整理すると、以下のようになるという。

グリー 一井崇氏(講演では「LAMP界 日本の至宝」として紹介)
  • やりたいことは、ただのKVS
  • ただし、keyの種類がもの凄く多い
  • keyは人間が扱うので記憶があやふや
  • keyは、それなりに構造は持っていて、パターンも決まっている

 この部分に特化して考えれば、key stringに対する全文検索によって問題は十分に解決できるという判断だ。この場合のポイントとしては、次のような項目が挙げられた。

  • 構造を持ったkeyでもシリアライズして書いておけばよい
  • 必要なkeyが分かれば、後は普通のKVS
  • key stringは自分で設計できる人工言語(例:「pv.page=foo.gender=female.age+20」)

 この方法の場合、key stringの文法を厳密に決めなくてもいいことや、「もしかして:○○」のような情報検索由来のテクニックが応用できるといったメリットがあるという。もちろん、新しいプロダクトやソリューションに移行することなく、既存のノウハウが使えるということも大きなメリットであり、興味深い事例といえる。


【4】groongaのRuby実装「rroonga」による検索サービス

 groongaのRuby実装「rroonga」を利用した検索サービスの開発事例を紹介したのは、クリアコードの須藤功平氏。rroongaが特徴的なのは、プロセス内にデータベースを保持する点だ。

rroongaではプロセス内にデータベースを持つ(須藤氏の講演資料「rroongaによる検索サービスの実装」より)

クリアコード 須藤功平氏(講演では「ギークトリックマスター」として紹介)

 メリットとしては「通信コストがないため、細かい読み書きが速い」「さまざまなレベルのAPIが利用できるため、検索処理の自由度が高い」といった点が挙げられる。このメリットを生かした機能の例としては、ドリルダウンなどに利用される検索結果の絞り込みが挙げられた。

 絞り込みの条件を次々に変えていく場合などでも、柔軟かつ高速に結果を得られるという。一方で、「スケールアウトする標準的な仕組みがない」ことが大きなデメリットとのこと。 

 今回は、開発事例としてテレビ番組の横断検索&共有サービス「テレコ!」が紹介された。テレビ番組の検索では、番組の説明から出演者情報などのメタデータを抽出するケースが多く、その際にrroongaが得意とするドリルダウンが有効だったという。

多段になったドリルダウンの実装に強い(須藤氏の講演資料より)

 また、検索APIを自由に作れる点や、groonga本体が持つサジェスト機能が活用できる点もメリットとして挙げられた。

テレビ番組検索システムの実装事例(須藤氏の講演資料より)

【5】モバイルに欠かせない位置情報検索で使うgroonga


ぐるなび 塩畑公一氏(講演では「位置情報のエバンジェリスト」として紹介)

 ぐるなびの塩畑公一氏からは、groongaの位置情報検索機能に関して発表があった。ぐるなびでは、groonga誕生当初から未来検索ブラジルと協力しながら各種検索機能の開発パフォーマンスの向上に従事してきたという。その成果として、groongaでは標準で緯度経度検索の機能が搭載されている。

 緯度軽度検索とは、2点の座標から作られる範囲内を対象としたレコード検索であり、groongaの機能としては矩形による検索と円形による検索が用意されているという。

groongaを使った矩形による範囲検索(塩畑氏の講演資料「groonga 位置情報検索」より)

groongaを使った円形による範囲検索(塩畑氏の講演資料より)

 それに加えて、指定された座標から、検索結果の対象が持つ座標までの距離を計算する機能もサポートされている。距離の計算手法としては、「方形近似」「球形近似」「ヒュベニ近似」の3種類がサポートされていて、それぞれに対応した関数が用意されている。

 また、測地系については日本測地系座標世界測地系座標の2種類をサポートしているとのこと。

日本測地系座標と世界測地系座標は異なる(塩畑氏の講演資料より)

 ぐるなびでは範囲を指定しての店舗の検索や、ある地点から店舗までの距離の算出など、groongaの位置情報検索機能を積極的に活用している。その際、テーブルをHASH型にしたり、緯度経度用カラムに「転置インデックス」を施すなどして検索速度の向上を図っているとの話だった。

【6】レシピ検索のプロトタイピングにApache Solrを使う


クックパッド 兼山元太氏(講演では「レシピ検索のスペシャリスト」として紹介)

 クックパッドの兼山元太氏からは、オープンソースの全文検索システムである「Apache Solr」を使って構築したレシピ検索システムについての発表があった。クックパッドでは、システムの改修や新機能の追加を次のような開発サイクルで進めているという。

  1. ユーザーの問題を発見
  2. 解決する最小のプロトタイプを作る
  3. 一部のユーザー向けに本番デプロイ
  4. インタビューやフィードバックを得て修正

 見ての通り、プロトタイプをいきなり本番環境にデプロイしてしまう点が大きな特徴。同じ機能でも、複数のプロトタイプを作成して異なるユーザー向けに同時にデプロイし、フィードバックを比較するといったことも行われる。

 このサイクルをさまざまな機能に対して並行して適用するため、本番環境には常に数十のバージョンが同時に稼働しているとのこと。同社では、このようなプロトタイピングを安全に実施するためのRailsベースの「Chanko」というライブラリを開発し、オープンソースで公開している。

複数のプロトタイプを並行して本番デプロイ(兼山氏の講演資料「Solrを使ったレシピ検索のプロトタイピング」より)

 検索システムでも同様に新しいアイデアを素早く本番環境に適用したいという要求があったが、その場合、本番環境でフィールドの追加やテーブル定義の変更などが頻繁に発生する可能性がある。それに対応するため、クックパッドでは従来使用していたTritonnからSolrへ移行した。この移行のメリットとしては次の項目が挙げられている。

  • パフォーマンス良い
  • フィールドの追加が容易
  • レプリケーションがファイルベースなので、本番環境でテーブル定義が変えやすい
Solrのレプリケーション(兼山氏の講演資料より)

 移行そのものは大規模なソースコードの修正を必要としたため大変だったが、プロトタイピングがしやすいシステムを構築するという当初の目的は達成できたほか、以下のような利点も得られたという。

  • JSONが使えることで、Webブラウザによるデバッグがやりやすい
  • Dynamix Fieldによってフィールドを後から定義できる
  • ドリルダウンUIなどを作る際にFactory Queryが便利
  • Distributed Searchで簡単にシャーディングができる
  • HTTPを利用するため並列化が容易
  • munin」によって項目別に監視が行える
Solr使った検索システムの構成(兼山氏の講演資料より)

 一方で、レプリケーションやGCの実行時に瞬間的にロックが発生するといった問題点があるため、「Varnish Cache」を併用するなどの対策を検討しているとのことだ。

次は、ネイティブアプリ対Webアプリ

 今回が初開催であった「モーショノロジー」だが、今後もさまざまなテーマや切り口で同様の勉強会を開いていくという。次回のテーマは「ネイティブアプリケーションWebアプリケーション」。スマートフォンの登場で急速に変化し続けるアプリケーション市場を見つめ、開発者やベンダが意見を出し合う場を提供したいとのことだ。

■ @IT関連記事


ユーザーの満足度を向上させるプラグイン活用
RoRでCGMサイト構築虎の巻(6)
 全文検索システムにApache SolrとLuceneを導入する。モバイルサイト構築はjpmobileで!
Coding Edge」フォーラム 2009/9/9
“最適な”全文検索システムの選択
RoRでCGMサイト構築虎の巻(5)
 CGMサイトで求められる全文検索エンジンの選択ポイントを考える。“最適な”アーキテクチャとは何か
Coding Edge」フォーラム 2009/3/27
全文検索を実装したソースコードを読もう
Railsコードリーディング〜scaffoldのその先へ〜(6)
 全文検索エンジン「HyperEstraier」を社内SNS「SKIP」に組み込む。ユーザーの属性に合わせた検索結果を表示させるには?
Coding Edge」フォーラム 2009/9/3
全文検索エンジン「Lucene.Net」を使う
連載:VBで実践! 外部コンポーネント活用術
 サイト構築などで使用できる検索エンジンをVBで活用。日本語アナライザを用いたインデックス作成から検索アプリ作成まで
Insider.NET」フォーラム 2009/3/27
オープンソースの検索エンジン登場
[コラム]安藤幸央のランダウン(23) 
オープンソース「Nutche」はGoogleも超えると噂される検索エンジン。Nutcheがあればあなた独自の検索サイトを構築できる?
Java Solution」フォーラム 2004/1/16
Namazuによる全文検索システムの導入
サーバに集積した情報を再利用するには全文検索システムが必要だ。Namazuのインストールから設定、WordやExcelファイルのサポート方法、効果的な運用方法までを解説する
Linux Square」フォーラム 2000/12/23
エンタープライズサーチと6つの罠
ここから始めるエンタープライズサーチ(1)
 エンタープライズサーチ導入の効果をしっかり出すには6つのハードルをクリアしなければならない。課題と解決策を紹介する

2/2  

 INDEX
検索技術を使うなら知ってないと損する6つのこと 
クックパッド、グリー、ぐるなび、CROOZは検索技術をどう使っているのか
  Page1
そもそも、「モーショノロジー」って何?
【1】全文検索の歴史とgroongaの索引構築の実装
【2】ソーシャル連携などに広がるECサイトでの全文検索
Page2
【3】KVSの膨大なKeyを見つけるための全文検索
【4】groongaのRuby実装「rroonga」による検索サービス
【5】モバイルに欠かせない位置情報検索で使うgroonga
【6】レシピ検索のプロトタイピングにApache Solrを使う
次は、ネイティブアプリ対Webアプリ


 Smart&Social フォーラム トップページへ



Smart & Social フォーラム 新着記事
@ITメールマガジン 新着情報やスタッフのコラムがメールで届きます(無料)

注目のテーマ

Smart & Social 記事ランキング

本日 月間