フォームに「オブジェクト」と日本語のクエリーを入力します。元のドキュメントは100件あり、「オブジェクト」で絞り込んで4件になっています。日本語で全文検索できていますね。次のようにOR検索もできます。「オブジェクト」単体で検索したときの4件よりも件数が増えているのでORが効いていることがわかります。全文検索エンジンならではの機能を利用これで基本的な全文検索機能は実現できていますが、せっかく全文検索エンジンを直接使って検索しているので全文検索エンジンならではの機能も使ってみましょう。ドリルダウンまずはドリルダウン機能を使います。ドリルダウンとはある軸に注目して情報を絞り込んでいくことです。商品カテゴリーに注目して商品を絞り込む(例:家電→洗濯機→ドラム式)、タグに注目して記事を絞り込むといった具合です。各ドキュメントにタグを付けられるようにしましょう。タグ用のテーブルを作成し、ドキュメント用のテーブルからそのテーブルを参照するようにします。RDBMSと違い、Groongaは直接他のテーブルを参照する機能があります。db/schema.grnに以下を追加します。タグを格納するテーブル。正規化したタグ名がキー。タグのキーは「rails」でラベルは「Rails」にする。ドキュメントテーブルにタグテーブルを参照するカラムを追加。タグは複数設定できる。タグ検索を高速にするためのインデックスカラム。tags以下は参考になるドキュメントです。更新したスキーマをロードします。groonga:schema:loadタグを作ります。label:stringQiitaのデータからタグ情報もロードするようにします。Tagを毎回createして大丈夫なのかと思うかもしれませんが、大丈夫です。groonga-client-modelはレコード保存にGroongaのloadコマンドを使っています。このloadコマンドの挙動はupsert(すでに同じキーのレコードがなかったら追加、あったら上書き)なのです。endデータベース内のデータを削除してQiitaのロードし直します。data:load:qiitaビューにタグ情報も表示します。コントローラーでoutput_columnsを指定しているのは(参照先の)タグテーブルのラベルカラムも取得するためです。デフォルトではタグテーブルのキーしか取得しないので明示的に指定しています。%></td>「Tags」カラムにタグがあるのでタグがロードされていることを確認できます。実はすでにタグで高速に検索できるようにもなっています。フォームに「tags:@全文検索」と入力すると「全文検索」タグで絞り込めます。(tags:@...は「tagsカラムの値を検索する」というGroongaの構文です。Googleのsite:...に似せた構文です。)それではこのタグ情報を使ってドリルダウンできるようにします。ユーザーにとっては、タグをキーボードから入力して絞り込む(ドリルダウンする)のは面倒なので、クリックでドリルダウンできるようにします。コントローラーには次の2つの処理を追加しています。tag)でタグ検索をする条件を追加する。tagの結果も取得する」という処理になります。BYの結果も取得すると追加でSQLを実行しないといけませんが、Groongaでは1回のクエリーで検索もヒット数の取得もドリルダウン用の情報も取得できるので効率的です。endビューではクリックでドリルダウンできる(タグで絞り込める)ようにリンクを表示します。</td>これで次のような画面になります。(20)」というリンクがあるので、「全文検索」タグでドリルダウンすると「20件」ヒットすることがわかります。(20)」のリンクをクリックすると「全文検索」タグでドリルダウンできます。たしかに20件ヒットしています。ここからさらにキーワードで絞り込むこともできます。以下はさらに「ruby」で絞り込んだ結果です。ヒット数がさらに減って3件になっています。全文検索エンジンの機能を使うと簡単・高速にドリルダウンできるようになります。キーワードハイライト検索結果を確認しているとき、キーワードがどこに含まれているかがパッとわかると目的のドキュメントかどうかを判断しやすくなります。そのための機能も全文検索エンジンならではの機能です。class="keyword">...</span>で囲んだ結果を取得できます。snippet_html()を使うとキーワード周辺のテキストを取得できます。これらを使ってキーワードをハイライトするには次のようにします。red;+}「全文検索」タグでドリルダウンして「ruby」で全文検索した状態では次のようになります。どこにキーワードがあるかすぐにわかりますね。スコアでソート検索結果の表示順はユーザーが求めていそうな順番にするとユーザーはうれしいです。Groongaはスコアという数値でどれだけ検索条件にマッチしていそうかという情報を返します。スコアでソートすることでユーザーが求めていそうな順番にできます。endページネーションgroonga-client-modelは標準でページネーション機能を提供しています。Kaminariと連携することでページネーションのUIもすぐに作れます。%>RubyGemsを追加したのでGemfile.lockを更新します。アプリケーションサーバーを再起動することも忘れないでください。install画面の上にはページの情報が表示されます。画面の下にはページを移動するためのリンクが表示されます。実現する方法を説明しました。データの保存も取得も検索もすべてGroongaで実現しました。全文検索できるようにするだけではなく、ドリルダウンやハイライトといった全文検索ならではの機能の実現方法も紹介しました。Groongaを使いたいけど学習コストが増えそうだなぁと思っていた人は試してみてください。実際に試してみて詰まった場合や、ここには書いていないこういうことをしたいけどどうすればいいの?ということがでてきた場合は以下の場所で相談してください。Gittergroonga-client-modelのissuegroonga-devメーリングリストGroongaを用いた全文検索アプリケーションの開発に関するご相談は問い合わせフォームからご連絡ください。Groonga関連の開発・サポートを仕事にしたい方は採用情報を確認の上ご応募ください。4.0とGFDLのデュアルライセンスで自由に利用できます。クリアコードはプログラミングが楽しいソフトウェア開発者を1名募集しています。クリアコードは「クリアコードをいい感じにする人」を1名募集しています。クリアコードはフリーソフトウェア開発で培った技術力を提供しています。Thunderbird)とRubyとGroonga(全文検索)に関連した開発を得意としています。