おんがえしの blog

作ったプログラムと調べた技術情報

国産の全文検索エンジンGroongaはRubyから簡単に使うことが出来る

国産の全文検索エンジンGroonga vs 世界的流行のElasticsearch - CreateField Blog

がバズってるうちに(と、いいながらもう数日経ってしまった・・)関連情報を流してみようと思います。

Rroonga

Rroongaというgemを使うとRubyから簡単にGroongaの操作(データベースの作成、検索データの追加や削除、クエリーを使って検索など)を行うことが出来ます。

GrnMini

自作のGrnMiniというgemを使うと検索インデックスの作成も含めてさらに簡単に実装することが出来ます。詳しくはリンク先のREADMEをどうぞ。

GrnMiniは内部でRroongaを使っているので以下で両方インストールすることが出来ます。

$ gem install grn_mini

GrnMiniの実例

Honyomiの内部で使っているデータベース&検索エンジンはGrnMiniを使って書かれています。

本の集合であるBooksとページの集合であるPagesが定義され、PagesからBooksへの参照が入っています。

require 'honyomi'
require 'grn_mini'

module Honyomi
  class Database
    attr_reader :books
    attr_reader :pages

    def initialize
      @books = GrnMini::Array.new("Books")
      @pages = GrnMini::Hash.new("Pages")

      @books.setup_columns(path:     "",
                           title:    "",
                           author:   "",
                           page_num: 0,
                           timestamp: Time.new,
                           )
      @pages.setup_columns(book:    @books,
                           text:    "",
                           page_no: 0,
                           )
    end

    .
    .
end

honyomi/lib/honyomi/database.rb に全てのコードがありますが全部で104行しかありません。Groongaの表現力の高さを表すよい例なのではないかと思います。

104行の中に参照、書き換え、検索と一通り含まれているのでGroongaを勉強するサンプルとしても手頃なサイズなのではないでしょうか。