- - PR -
2012年1月26日、CROOZ主催の勉強会「モーショノロジー2012 #1」が開催された。今回のテーマは「全文検索」。検索技術の開発や活用に携わる6名の発表者によって、検索エンジンの実装やプロダクトの活用事例などが紹介された。
- 全文検索の歴史とgroongaの索引構築の実装
- ソーシャル連携などに広がるECサイトでの全文検索
- KVSの膨大なKeyを見つけるための全文検索
- groongaのRuby実装「rroonga」による検索サービス
- モバイルに欠かせない位置情報検索で使うgroonga
- レシピ検索のプロトタイピングにApache Solrを使う
そもそも、「モーショノロジー」って何?
そもそも、「モーショノロジー」とは何だろうか。総合司会を務めたCROOZの小俣泰明氏によれば、モーショノロジーとは「モーション(動き)」と「テクノロジー(技術)」を合わせた造語で、非常に速いスピードで変化する世の中において、いかにして新しいテクノロジーを取り入れながらユーザーを夢中にさせていくかということを追究する、そんな意味を持たせているという。
CROOZ 取締役 技術担当執行役員 ITマーケティング担当執行役員 小俣泰明氏 |
刻一刻と状況が変化する今の世の中を牽引するためには、脳の使い方を変えていく必要があるのではないか、小俣氏はそう指摘する。従来は「この場所に情報があるから、それを取りにいく」という考え方が一般的だった。
しかし今は違う。同じ場所に、常に同じ情報があるとは限らない。情報は、時間や状況、アクセスする人などによって動的に生成されている。位置で把握するのではなく、動き(モーション)に対応していく必要がある。「モーショノロジー」という言葉には、そのような提言の意味も含まれている。
全文検索は、まさにこの「モーショノロジー」が如実に現れる分野である。動的に変化しつづける情報をどう扱っていくか。そのヒントが得られる発表だった。
【1】全文検索の歴史とgroongaの索引構築の実装
最初の発表者は、全文検索エンジン「groonga」の開発者として知られる未来検索ブラジルの森大二郎氏。
森氏は、はじめに全文検索が登場するまでの歴史的な経緯について説明した。検索技術の歴史をさかのぼると、その黎明期に当たる1950〜70年代当時にはメタデータによる検索が主流だった。全文を検索対象にしてしまうと、処理量が大きく、ノイズも増えるため、その当時の計算機ではリソースが足りなかったからだ。
時代は流れて計算機が非常に豊富なリソースを持つようになった現在、全文検索の課題がどうなったかというと、フォーカスは「大量の文書からいかに高速に、いかに的確な情報を見つけるか」にあり、70年代とあまり変わっていないという。その理由として森氏は、計算機の速度向上を上回る勢いで文書が増えていること、「記憶階層」というアーキテクチャは変わってないことを挙げ、「高速化や高精度化は永遠のテーマではないか」と語っている。
未来検索ブラジル 森大二郎氏(講演では「groonga創始者:ワードマスター」として紹介) |
そのテーマへのチャレンジとして、全文検索のためのさまざまな手法が生み出されてきた。その中でもgroongaは特に、「転置索引」を採用した検索エンジンである。転置索引とは、対象となる文書群から単語の位置情報の索引構造を作成する検索方式であり、検索速度が非常に高速という特徴がある。
groongaの場合、この索引を動的に構築する。索引構築の処理は煩雑になるが、動的に変化する情報に即座に対応できるというメリットを持ち、まさに「モーショノロジー」と呼ぶべきものだ。
このgroongaの動的索引構築には、次のような手法を利用しているという。
- メモリ上の索引とディスク上の索引を併せて活用
- インプレイス更新とマージを併用
- 参照ロックフリーなデータ構造を持つ
- 検索と更新の同時実行性能が高い
その一方で、「groongaはカラムストア指向で実装されている」と森氏は説明する。「カラムストア」とはカラムごとに局所化してデータを管理する手法であり、「groongaではメタデータをカラムとして扱うことによって、メタデータによる高速な絞り込みや集計を実現している」とのことだ。つまり、groongaはメタデータを活用しながら高速な全文検索を実現するというアプローチを取っているわけだ。
さらに最近では、「索引の静的構築」機能も取り入れることにチャレンジしているという。静的構築へのアプローチとしては、転置索引構築の2pass化、語彙表の一定規模単位への分割、語彙表自体の高速化、キャッシュの導入などが挙げられた。静的構築は、groongaのmasterブランチの最新リビジョンで試せるとのことだ。
静的構築を導入した場合の後進スループット(森氏の講演資料「groonga索引構築の実装」より) |
【2】ソーシャル連携などに広がるECサイトでの全文検索
続いて登壇したCROOZの長谷川博紀氏からは、同社が運営するECサイト「CROOZMALL」における全文検索の課題と、その改善のために行った検証内容が紹介された。
同氏によれば、「ECサイトにおいてユーザーが欲しい商品を的確に探せるようにするためには、取り扱う商品名をいかに効率良く蓄積し、検索結果に反映するかが重要になる」という。しかし、ここで問題になるのは、ユーザーが欲しいとイメージしている商品を、必ずしも正しい商品名で検索してくれるとは限らないということだ。
CROOZ 長谷川博紀氏(講演では「孤高のPHPテクニシャン」として紹介) |
例えば「ABCDE」という商品があったとすると、検索文字列としては「abcde」「エービーシーディーイー」「Abcde」など、無数のパターンが考えられる。同様に、ショップ側でも必ずしも「ABCDE」という一字一句正しい商品名で登録しているとは限らない。従って、検索には「検索文字列への全文検索」「ショップ登録文字列への全文検索」という2つの全文検索が必要になる。そのため、商品数が増えるとともにサーバ負荷が加速度的に増大してしまう。
CROOZMALLでは、現状は数パターンのソートデータを用意するなどの運用面で、この問題をカバーしているが、テーブルロックなどの問題が発生しており、今後より商品数が増えた場合に備えて根本的な解決を目指す必要に迫られているという。
現在のCROOZMALLのシステムは、RDBMSとしてMySQL 5.1.x系、ストレージエンジンは「MyISAM」、形態素解析エンジンは「MeCab」を使って構築されているとのこと。
CROOZMALLにおける全文検索システムの構成(長谷川氏の講演資料「ECサイトにおける検索についての悩みごと」より) |
それに対して今回の検証は、MySQL 5.5系とgroongaストレージエンジンを組み合わせた環境を用意し、本番データの一部を利用して実施した。この検証によって、以下のような結果が得られたという。
MySQL+groongaによる検証結果(長谷川氏の講演資料より) |
検証の結果、「Insert系の処理はgroongaの方が圧倒的に速く、それだけでも本番に適用する価値がある」という。参照系の処理に関してはMyISAMの方が高速だが、テーブルロックがない状態でテストしているため、今後チューニングを重ねることでgroonga採用につながる可能性はあるとの話だった。
長谷川氏は、検索の性能を向上することによって、単にユーザーが商品を探しやすくなるだけではなく、「CROOZ blog」など他のサービスと連動した分析を行い、それをマーケティングに活用するなどといった方向性が見えてくると指摘する。
さらに、検索にヒットしなかった商品を拡充するよう働きかけたり、ソーシャルネットワークなどと連携して流行情報を反映させるなど、将来の可能性は大きく広がる。その核となる検索システムについて、今回のような検証やチューニングを重ねることで「大幅なハード投資がなくても、現在の10倍程度のデータに耐えられるシステムを目指したい」(長谷川氏)とのことだ。
1-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 フォーラム トップページへ |
- 夏休みの自由研究にマイコンボードで「電子サイコロ」を作ったり、音楽プログラミングをしたりしてみよう (2017/7/24)
子ども向け電子工作&プログラミング用マイコンボード「chibi:bit」の基本的な使い方を紹介する企画。夏休みの自由研究に「電子サイコロ」を作ったり、音楽プログラミングをしたりしてみよう - 子ども向け電子工作&プログラミング用マイコンボード「chibi:bit」の基本的な使い方 (2017/7/20)
子ども向け電子工作&プログラミング用マイコンボード「chibi:bit」の基本的な使い方を紹介する。夏休みの子どもの自由研究などに役立てつつ、プログラミングを始めるきっかけにしてみてはいかがだろうか - 3DゲームのAIをiOSのSceneKitとGameplayKitで作る基本 (2017/7/10)
3Dゲーム用のフレームワークSceneKitを使った簡単なアプリ制作を通して、3Dゲーム用の人工知能(AI)について学ぶ - UnityアプリをWebGL、UWP、Android、iOS用としてビルドしてみた (2017/6/27)
アプリをWebで実行できるように書き出す方法やWindows上でUWP、Android、iOS用などにビルドする方法について解説する【Windows 10、Unity 5.6に対応】
|
|