[Groonga-commit] ranguba/epub-searcher at e46229d [master] Fix test fixtures

Back to archive index

KITAITI Makoto null+****@clear*****
Tue Mar 15 19:31:04 JST 2016


KITAITI Makoto	2016-03-15 19:31:04 +0900 (Tue, 15 Mar 2016)

  New Revision: e46229d459698098c7f57d80ac5f1ba98fdf0052
  https://github.com/ranguba/epub-searcher/commit/e46229d459698098c7f57d80ac5f1ba98fdf0052

  Message:
    Fix test fixtures

  Modified files:
    test/epub-searcher/fixtures/defined_schema_dump_expected.txt
    test/epub-searcher/fixtures/load_records_params_values_expected.txt
    test/epub-searcher/fixtures/loaded_records_dump_expected.txt
    test/epub-searcher/remote_database_test.rb

  Modified: test/epub-searcher/fixtures/defined_schema_dump_expected.txt (+2 -0)
===================================================================
--- test/epub-searcher/fixtures/defined_schema_dump_expected.txt    2016-03-15 19:30:56 +0900 (02dc72b)
+++ test/epub-searcher/fixtures/defined_schema_dump_expected.txt    2016-03-15 19:31:04 +0900 (2f3ad07)
@@ -2,7 +2,9 @@ table_create Books TABLE_NO_KEY
 column_create Books author COLUMN_SCALAR ShortText
 column_create Books file_path COLUMN_SCALAR ShortText
 column_create Books main_text COLUMN_SCALAR LongText
+column_create Books modified COLUMN_SCALAR Time
 column_create Books title COLUMN_SCALAR ShortText
+column_create Books unique_identifier COLUMN_SCALAR ShortText
 table_create Terms TABLE_PAT_KEY ShortText --default_tokenizer TokenBigram --normalizer NormalizerAuto
 column_create Terms entries_title_index COLUMN_INDEX|WITH_POSITION Books title
 column_create Terms entries_main_text_index COLUMN_INDEX|WITH_POSITION Books main_text

  Modified: test/epub-searcher/fixtures/load_records_params_values_expected.txt (+1 -1)
===================================================================
--- test/epub-searcher/fixtures/load_records_params_values_expected.txt    2016-03-15 19:30:56 +0900 (b8f4f4d)
+++ test/epub-searcher/fixtures/load_records_params_values_expected.txt    2016-03-15 19:31:04 +0900 (715485e)
@@ -1 +1 @@
-[{"author":"groonga","main_text":"\r\n1. groongaの特徴\r\n1.1. groonga の概要\r\ngroonga は転置索引を用いた高速・高精度な全文検索エンジンであり、登録された文書をすぐに検索結果に反映できます。また、参照をブロックせずに更新できることから、即時更新の必要なアプリケーションにおいても高い性能を発揮します。\r\n全文検索エンジンとして開発された groonga ですが、独自のカラムストアを持つ列指向のデータベースとしての側面も持っています。そのため、MySQL や PostgreSQL など、既存の代表的なデータベースが苦手とする集計クエリを高速に処理できるという特徴があり、組み合わせによって弱点を補うような使い方もできます。\r\ngroonga の基本機能は C ライブラリとして提供されていますが、MySQL や PostgreSQL と連携させたり、Ruby から呼
 び出ã
 —たりすることもできます。そのため、任意のアプリケーションに組み込むことが可能であり、多様な使い方が考えられます。 興味のある方は 利用例 をご覧ください。\r\n1.2. 全文検索と即時更新\r\n一般的なデータベースにおいては、追加・削除などの操作がすぐに反映されます。一方、全文検索においては、転置索引が逐次更新の難しいデータ構造であることから、文書の追加・削除に対応しないエンジンが少なくありません。\r\nこれに対し、転置索引を用いた全文検索エンジンでありながら、groonga は文書を短時間で追加・削除することができます。その上、更新しながらでも検索できるという優れた特徴を持っているため、全文検索エンジンとしてはとても柔軟性があります。また、複数の転置索引を統合するような重い処理を
 必要ã
 ¨ã—ないので、安定して高い性能を発揮することが期待できます。\r\n1.3. カラムストアと集計クエリ\r\n現代は、インターネットを情報源とすれば、いくらでも情報を収集できる時代です。しかし、膨大な情報から有益な情報を引き出すのは困難であり、多面的な分析による試行錯誤が必要となります。たとえば、日付や時間帯により絞り込んでみたり、地域により絞り込んでみたり、性別や年齢により絞り込んでみたりすることでしょう。そして、そのようなときに便利な存在が集計クエリです。\r\n集計クエリとは、指定したカラムの値によってレコードをグループ化し、各グループに含まれるレコードの数を求めるクエリです。たとえば、地域の ID を格納しているカラムを指定すれば、地域毎のレコード数が求まります。日付のカã
 ƒ©ãƒ ã‚’
 指定したときの出力をグラフ化すれば、レコード数の時間変化を視覚化することができます。さらに、地域による絞り込みと日付に対する集計クエリを組み合わせれば、特定の地域におけるレコード数の時間変化を視覚化ことも可能です。このように、尺度を自由に選択して絞り込み・集計できることは、膨大な情報を扱う上でとても重要になります。\r\ngroonga が集計クエリを高速に処理できる理由は、データベースの論理構造にカラムストアを採用しているからです。集計クエリが参照するのは指定されたカラムのみであるため、カラム単位でデータを格納する列指向のデータベースでは、必要なカラムのみを無駄なく読み出せることが利点となります。一方、レコード単位でデータを格納する行指向のデータベースでは、隣接すã‚
 ‹ã‚«ãƒ©ã
 ƒ ã‚’まとめて読み出してしまうことが欠点となります。\r\n1.4. 転置索引とトークナイザ\r\n転置索引は大規模な全文検索に用いられる伝統的なデータ構造です。転置索引を用いた全文検索エンジンでは、文書を追加するときに索引語を記録しておき、検索するときはクエリを索引語に分割して出現文書を求めます。そのため、文書やクエリから索引語を抜き出す方法が重要になります。\r\nトークナイザは、文字列から索引語を抜き出すモジュールです。日本語を対象とする全文検索においては、形態素を索引語として抜き出す方式と文字 N-gram を抜き出す方式のいずれか、あるいは両方を用いるのが一般的です。形態素方式は検索時間や索引サイズの面で優れているほか、検索結果に不要な文書が含まれにくいという利点を持っていまã
 ™ã€‚一æ
 –¹ã€N-gram 方式には検索漏れが発生しにくいという利点があり、状況によって適した方式を選択することが望ましいとされています。\r\ngroonga は形態素方式と N-gram 方式の両方に対応しています。初期状態で利用できるトークナイザは空白を区切り文字として用いる方式と N-gram 方式のみですが、形態素解析器 MeCab を組み込んだときは MeCab による分かち書きの結果を用いる形態素方式が有効になります。トークナイザはプラグインとして追加できるため、特徴的なキーワードのみを索引語として採用するなど、独自のトークナイザを開発することが可能です。\r\n1.5. 共有可能なストレージと参照ロックフリー\r\nCPU のマルチコア化が進んでいるため、同時に複数のクエリを実行したり、一つのクエリを複数のスレッドで実行したりするこ
 とのé‡
 è¦æ€§ã¯ã¾ã™ã¾ã™é«˜ã¾ã£ã¦ã„ます。\r\ngroonga のストレージは、複数のスレッド・プロセスで共有することができます。また、参照ロックフリーなデータ構造を採用しているため、更新クエリを実行している状況でも参照クエリを実行することができます。参照クエリを実行できる状態を維持しながら更新クエリを実行できるので、リアルタイムなシステムに適しています。さらには、MySQL を介して更新クエリを実行している最中に groonga の HTTP サーバを介して参照クエリを実行するなど、多彩な運用が可能となっています。\r\n1.6. 位置情報(緯度・経度)検索\r\nGPS に代表される測位システムを搭載した高機能な携帯端末の普及などによって、位置情報を扱うサービスはますます便利になっています。たとえば、近くにあるレストランã‚
 ’探しã
 ¦ã„るときは、現在地からの距離を基準として検索をおこない、検索結果を地図上に表示してくれるようなサービスが便利です。そのため、位置情報検索を高速に実現できることが重要になっています。\r\ngroonga では転置索引を応用して高速な位置情報検索を実現しています。矩形・円による範囲検索に対応しているほか、基準点の近くを優先的に探索させることができます。また、距離計算をサポートしているので、位置情報検索の結果を基準点からの距離によって整列することも可能です。\r\n1.7. groonga ライブラリ\r\nGroonga の基本機能は C ライブラリとして提供されているので、任意のアプリケーションに組み込んで利用することができます。C/C++ 以外については、Ruby から groonga を利用するライブラリなどが関連プロジェクトにã
 Šã„てæ
 ä¾›ã•ã‚Œã¦ã„ます。詳しくは 関連プロジェクト を参照してください。\r\n1.8. groonga サーバ\r\ngroonga にはサーバ機能があるため、レンタルサーバなどの新しいライブラリをインストールできない環境においても利用できます。対応しているのは HTTP, memcached binary プロトコル、およびに groonga の独自プロトコルである gqtp です。サーバとして利用するときはクエリのキャッシュ機能が有効になるため、同じクエリを受け取ったときは応答時間が短くなるという特徴があります。\r\n1.9. groonga ストレージエンジン\r\ngroonga は独自のカラムストアを持つ列指向のデータベースとしての側面を持っていますが、既存の RDBMS のストレージエンジンとして利用することもできます。たとえば、groonga をベースとする MySQL のストレージエンジンとして m
 roonga ã
 Œé–‹ç™ºã•ã‚Œã¦ã„ます。mroonga は MySQL のプラグインとして動的にロードすることが可能であり、groonga のカラムストアをストレージとして利用したり、全文検索エンジンとして groonga ã‚’ MyISAM ã‚„ InnoDB と連携させたりすることができます。groonga 単体での利用、およびに MyISAM, InnoDB との連携には一長一短があるので、用途に応じて適切な組み合わせを選ぶことが大切です。詳しくは 関連プロジェクト を参照してください。\r\n\r\n","title":"groongaについて","file_path":"${PREFIX}/test/epub-searcher/fixtures/empty_contributors_single_spine.epub"},{"author":"groongaプロジェクト","main_text":"\r\n1.1. groonga の概要\r\ngroonga は転置索引を用いた高速・高精度な全文検索エンジンであり、登録された文書をすぐに検索結果に反映できます。また、参照をブロックせずに更新できるã
 “とか
 ら、即時更新の必要なアプリケーションにおいても高い性能を発揮します。\r\n全文検索エンジンとして開発された groonga ですが、独自のカラムストアを持つ列指向のデータベースとしての側面も持っています。そのため、MySQL ã‚„ PostgreSQL など、既存の代表的なデータベースが苦手とする集計クエリを高速に処理できるという特徴があり、組み合わせによって弱点を補うような使い方もできます。\r\ngroonga の基本機能は C ライブラリとして提供されていますが、MySQL ã‚„ PostgreSQL と連携させたり、Ruby から呼び出したりすることもできます。そのため、任意のアプリケーションに組み込むことが可能であり、多様な使い方が考えられます。 興味のある方は 利用例 をご覧ください。\r\n\r\n\r\n1.2. 全文検索と即時更新\r\n一般的なデータベーã‚
 ¹ã«ãŠã
 „ては、追加・削除などの操作がすぐに反映されます。一方、全文検索においては、転置索引が逐次更新の難しいデータ構造であることから、文書の追加・削除に対応しないエンジンが少なくありません。\r\nこれに対し、転置索引を用いた全文検索エンジンでありながら、groonga は文書を短時間で追加・削除することができます。その上、更新しながらでも検索できるという優れた特徴を持っているため、全文検索エンジンとしてはとても柔軟性があります。また、複数の転置索引を統合するような重い処理を必要としないので、安定して高い性能を発揮することが期待できます。\r\n\r\n","title":"groongaについて","file_path":"${PREFIX}/test/epub-searcher/fixtures/single_contributors_multi_spine.epub"},{"author":"groongaプロジェクト","main_text":"\r\n1.1. groonga の概要
 \r\ngroo
 nga は転置索引を用いた高速・高精度な全文検索エンジンであり、登録された文書をすぐに検索結果に反映できます。また、参照をブロックせずに更新できることから、即時更新の必要なアプリケーションにおいても高い性能を発揮します。\r\n全文検索エンジンとして開発された groonga ですが、独自のカラムストアを持つ列指向のデータベースとしての側面も持っています。そのため、MySQL ã‚„ PostgreSQL など、既存の代表的なデータベースが苦手とする集計クエリを高速に処理できるという特徴があり、組み合わせによって弱点を補うような使い方もできます。\r\ngroonga の基本機能は C ライブラリとして提供されていますが、MySQL ã‚„ PostgreSQL と連携させたり、Ruby から呼び出したりすることもできます。そのため、任意のアプリケーショã
 ƒ³ã«çµ„
 み込むことが可能であり、多様な使い方が考えられます。 興味のある方は 利用例 をご覧ください。\r\n\r\n\r\n1.2. 全文検索と即時更新\r\n一般的なデータベースにおいては、追加・削除などの操作がすぐに反映されます。一方、全文検索においては、転置索引が逐次更新の難しいデータ構造であることから、文書の追加・削除に対応しないエンジンが少なくありません。\r\nこれに対し、転置索引を用いた全文検索エンジンでありながら、groonga は文書を短時間で追加・削除することができます。その上、更新しながらでも検索できるという優れた特徴を持っているため、全文検索エンジンとしてはとても柔軟性があります。また、複数の転置索引を統合するような重い処理を必要としないので、安定して高い性能を発揮することが期待ã
 §ãã¾ã
 ™ã€‚\r\n\r\n","title":"groongaについて","file_path":"${PREFIX}/test/epub-searcher/fixtures/multi_contributors_multi_spine.epub"}]
\ No newline at end of file
+[{"author":"groonga","main_text":"\r\n1. groongaの特徴\r\n1.1. groonga の概要\r\ngroonga は転置索引を用いた高速・高精度な全文検索エンジンであり、登録された文書をすぐに検索結果に反映できます。また、参照をブロックせずに更新できることから、即時更新の必要なアプリケーションにおいても高い性能を発揮します。\r\n全文検索エンジンとして開発された groonga ですが、独自のカラムストアを持つ列指向のデータベースとしての側面も持っています。そのため、MySQL や PostgreSQL など、既存の代表的なデータベースが苦手とする集計クエリを高速に処理できるという特徴があり、組み合わせによって弱点を補うような使い方もできます。\r\ngroonga の基本機能は C ライブラリとして提供されていますが、MySQL や PostgreSQL と連携させたり、Ruby から呼
 び出ã
 —たりすることもできます。そのため、任意のアプリケーションに組み込むことが可能であり、多様な使い方が考えられます。 興味のある方は 利用例 をご覧ください。\r\n1.2. 全文検索と即時更新\r\n一般的なデータベースにおいては、追加・削除などの操作がすぐに反映されます。一方、全文検索においては、転置索引が逐次更新の難しいデータ構造であることから、文書の追加・削除に対応しないエンジンが少なくありません。\r\nこれに対し、転置索引を用いた全文検索エンジンでありながら、groonga は文書を短時間で追加・削除することができます。その上、更新しながらでも検索できるという優れた特徴を持っているため、全文検索エンジンとしてはとても柔軟性があります。また、複数の転置索引を統合するような重い処理を
 必要ã
 ¨ã—ないので、安定して高い性能を発揮することが期待できます。\r\n1.3. カラムストアと集計クエリ\r\n現代は、インターネットを情報源とすれば、いくらでも情報を収集できる時代です。しかし、膨大な情報から有益な情報を引き出すのは困難であり、多面的な分析による試行錯誤が必要となります。たとえば、日付や時間帯により絞り込んでみたり、地域により絞り込んでみたり、性別や年齢により絞り込んでみたりすることでしょう。そして、そのようなときに便利な存在が集計クエリです。\r\n集計クエリとは、指定したカラムの値によってレコードをグループ化し、各グループに含まれるレコードの数を求めるクエリです。たとえば、地域の ID を格納しているカラムを指定すれば、地域毎のレコード数が求まります。日付のカã
 ƒ©ãƒ ã‚’
 指定したときの出力をグラフ化すれば、レコード数の時間変化を視覚化することができます。さらに、地域による絞り込みと日付に対する集計クエリを組み合わせれば、特定の地域におけるレコード数の時間変化を視覚化ことも可能です。このように、尺度を自由に選択して絞り込み・集計できることは、膨大な情報を扱う上でとても重要になります。\r\ngroonga が集計クエリを高速に処理できる理由は、データベースの論理構造にカラムストアを採用しているからです。集計クエリが参照するのは指定されたカラムのみであるため、カラム単位でデータを格納する列指向のデータベースでは、必要なカラムのみを無駄なく読み出せることが利点となります。一方、レコード単位でデータを格納する行指向のデータベースでは、隣接すã‚
 ‹ã‚«ãƒ©ã
 ƒ ã‚’まとめて読み出してしまうことが欠点となります。\r\n1.4. 転置索引とトークナイザ\r\n転置索引は大規模な全文検索に用いられる伝統的なデータ構造です。転置索引を用いた全文検索エンジンでは、文書を追加するときに索引語を記録しておき、検索するときはクエリを索引語に分割して出現文書を求めます。そのため、文書やクエリから索引語を抜き出す方法が重要になります。\r\nトークナイザは、文字列から索引語を抜き出すモジュールです。日本語を対象とする全文検索においては、形態素を索引語として抜き出す方式と文字 N-gram を抜き出す方式のいずれか、あるいは両方を用いるのが一般的です。形態素方式は検索時間や索引サイズの面で優れているほか、検索結果に不要な文書が含まれにくいという利点を持っていまã
 ™ã€‚一æ
 –¹ã€N-gram 方式には検索漏れが発生しにくいという利点があり、状況によって適した方式を選択することが望ましいとされています。\r\ngroonga は形態素方式と N-gram 方式の両方に対応しています。初期状態で利用できるトークナイザは空白を区切り文字として用いる方式と N-gram 方式のみですが、形態素解析器 MeCab を組み込んだときは MeCab による分かち書きの結果を用いる形態素方式が有効になります。トークナイザはプラグインとして追加できるため、特徴的なキーワードのみを索引語として採用するなど、独自のトークナイザを開発することが可能です。\r\n1.5. 共有可能なストレージと参照ロックフリー\r\nCPU のマルチコア化が進んでいるため、同時に複数のクエリを実行したり、一つのクエリを複数のスレッドで実行したりするこ
 とのé‡
 è¦æ€§ã¯ã¾ã™ã¾ã™é«˜ã¾ã£ã¦ã„ます。\r\ngroonga のストレージは、複数のスレッド・プロセスで共有することができます。また、参照ロックフリーなデータ構造を採用しているため、更新クエリを実行している状況でも参照クエリを実行することができます。参照クエリを実行できる状態を維持しながら更新クエリを実行できるので、リアルタイムなシステムに適しています。さらには、MySQL を介して更新クエリを実行している最中に groonga の HTTP サーバを介して参照クエリを実行するなど、多彩な運用が可能となっています。\r\n1.6. 位置情報(緯度・経度)検索\r\nGPS に代表される測位システムを搭載した高機能な携帯端末の普及などによって、位置情報を扱うサービスはますます便利になっています。たとえば、近くにあるレストランã‚
 ’探しã
 ¦ã„るときは、現在地からの距離を基準として検索をおこない、検索結果を地図上に表示してくれるようなサービスが便利です。そのため、位置情報検索を高速に実現できることが重要になっています。\r\ngroonga では転置索引を応用して高速な位置情報検索を実現しています。矩形・円による範囲検索に対応しているほか、基準点の近くを優先的に探索させることができます。また、距離計算をサポートしているので、位置情報検索の結果を基準点からの距離によって整列することも可能です。\r\n1.7. groonga ライブラリ\r\nGroonga の基本機能は C ライブラリとして提供されているので、任意のアプリケーションに組み込んで利用することができます。C/C++ 以外については、Ruby から groonga を利用するライブラリなどが関連プロジェクトにã
 Šã„てæ
 ä¾›ã•ã‚Œã¦ã„ます。詳しくは 関連プロジェクト を参照してください。\r\n1.8. groonga サーバ\r\ngroonga にはサーバ機能があるため、レンタルサーバなどの新しいライブラリをインストールできない環境においても利用できます。対応しているのは HTTP, memcached binary プロトコル、およびに groonga の独自プロトコルである gqtp です。サーバとして利用するときはクエリのキャッシュ機能が有効になるため、同じクエリを受け取ったときは応答時間が短くなるという特徴があります。\r\n1.9. groonga ストレージエンジン\r\ngroonga は独自のカラムストアを持つ列指向のデータベースとしての側面を持っていますが、既存の RDBMS のストレージエンジンとして利用することもできます。たとえば、groonga をベースとする MySQL のストレージエンジンとして m
 roonga ã
 Œé–‹ç™ºã•ã‚Œã¦ã„ます。mroonga は MySQL のプラグインとして動的にロードすることが可能であり、groonga のカラムストアをストレージとして利用したり、全文検索エンジンとして groonga ã‚’ MyISAM ã‚„ InnoDB と連携させたりすることができます。groonga 単体での利用、およびに MyISAM, InnoDB との連携には一長一短があるので、用途に応じて適切な組み合わせを選ぶことが大切です。詳しくは 関連プロジェクト を参照してください。\r\n\r\n","title":"groongaについて","file_path":"${PREFIX}/test/epub-searcher/fixtures/empty_contributors_single_spine.epub","unique_identifier":"00004257","modified":null},{"author":"groongaプロジェクト","main_text":"\r\n1.1. groonga の概要\r\ngroonga は転置索引を用いた高速・高精度な全文検索エンジンであり、登録された文書をすぐに検索結果に反映できます。またã€
 å‚ç…§ã
 ‚’ブロックせずに更新できることから、即時更新の必要なアプリケーションにおいても高い性能を発揮します。\r\n全文検索エンジンとして開発された groonga ですが、独自のカラムストアを持つ列指向のデータベースとしての側面も持っています。そのため、MySQL ã‚„ PostgreSQL など、既存の代表的なデータベースが苦手とする集計クエリを高速に処理できるという特徴があり、組み合わせによって弱点を補うような使い方もできます。\r\ngroonga の基本機能は C ライブラリとして提供されていますが、MySQL ã‚„ PostgreSQL と連携させたり、Ruby から呼び出したりすることもできます。そのため、任意のアプリケーションに組み込むことが可能であり、多様な使い方が考えられます。 興味のある方は 利用例 をご覧ください。\r\n\r\n\r\n1.2. 全文検索ã
 ¨å³æ™‚
 更新\r\n一般的なデータベースにおいては、追加・削除などの操作がすぐに反映されます。一方、全文検索においては、転置索引が逐次更新の難しいデータ構造であることから、文書の追加・削除に対応しないエンジンが少なくありません。\r\nこれに対し、転置索引を用いた全文検索エンジンでありながら、groonga は文書を短時間で追加・削除することができます。その上、更新しながらでも検索できるという優れた特徴を持っているため、全文検索エンジンとしてはとても柔軟性があります。また、複数の転置索引を統合するような重い処理を必要としないので、安定して高い性能を発揮することが期待できます。\r\n\r\n","title":"groongaについて","file_path":"${PREFIX}/test/epub-searcher/fixtures/single_contributors_multi_spine.epub","unique_identifier":null,"modif
 ied":137
 1707215.0},{"author":"groongaプロジェクト","main_text":"\r\n1.1. groonga の概要\r\ngroonga は転置索引を用いた高速・高精度な全文検索エンジンであり、登録された文書をすぐに検索結果に反映できます。また、参照をブロックせずに更新できることから、即時更新の必要なアプリケーションにおいても高い性能を発揮します。\r\n全文検索エンジンとして開発された groonga ですが、独自のカラムストアを持つ列指向のデータベースとしての側面も持っています。そのため、MySQL ã‚„ PostgreSQL など、既存の代表的なデータベースが苦手とする集計クエリを高速に処理できるという特徴があり、組み合わせによって弱点を補うような使い方もできます。\r\ngroonga の基本機能は C ライブラリとして提供されていますが、MySQL ã‚„ PostgreSQL と連携させたり、Ruby かã
 ‚‰å‘¼ã³
 出したりすることもできます。そのため、任意のアプリケーションに組み込むことが可能であり、多様な使い方が考えられます。 興味のある方は 利用例 をご覧ください。\r\n\r\n\r\n1.2. 全文検索と即時更新\r\n一般的なデータベースにおいては、追加・削除などの操作がすぐに反映されます。一方、全文検索においては、転置索引が逐次更新の難しいデータ構造であることから、文書の追加・削除に対応しないエンジンが少なくありません。\r\nこれに対し、転置索引を用いた全文検索エンジンでありながら、groonga は文書を短時間で追加・削除することができます。その上、更新しながらでも検索できるという優れた特徴を持っているため、全文検索エンジンとしてはとても柔軟性があります。また、複数の転置索引を統合するようなé‡
 ã„処ç
 †ã‚’必要としないので、安定して高い性能を発揮することが期待できます。\r\n\r\n","title":"groongaについて","file_path":"${PREFIX}/test/epub-searcher/fixtures/multi_contributors_multi_spine.epub","unique_identifier":null,"modified":1371696244.0}]

  Modified: test/epub-searcher/fixtures/loaded_records_dump_expected.txt (+4 -4)
===================================================================
--- test/epub-searcher/fixtures/loaded_records_dump_expected.txt    2016-03-15 19:30:56 +0900 (60a409c)
+++ test/epub-searcher/fixtures/loaded_records_dump_expected.txt    2016-03-15 19:31:04 +0900 (13f52ed)
@@ -1,7 +1,7 @@
 load --table Books
 [
-["_id","author","file_path","main_text","title"],
-[1,"groonga","${PREFIX}/test/epub-searcher/fixtures/empty_contributors_single_spine.epub","\r\n1. groongaの特徴\r\n1.1. groonga の概要\r\ngroonga は転置索引を用いた高速・高精度な全文検索エンジンであり、登録された文書をすぐに検索結果に反映できます。また、参照をブロックせずに更新できることから、即時更新の必要なアプリケーションにおいても高い性能を発揮します。\r\n全文検索エンジンとして開発された groonga ですが、独自のカラムストアを持つ列指向のデータベースとしての側面も持っています。そのため、MySQL や PostgreSQL など、既存の代表的なデータベースが苦手とする集計クエリを高速に処理できるという特徴があり、組み合わせによって弱点を補うような使い方もできます。\r\ngroonga の基本機能は C ライブラリとして提供されていますが、My
 SQL ã‚„ 
 PostgreSQL と連携させたり、Ruby から呼び出したりすることもできます。そのため、任意のアプリケーションに組み込むことが可能であり、多様な使い方が考えられます。 興味のある方は 利用例 をご覧ください。\r\n1.2. 全文検索と即時更新\r\n一般的なデータベースにおいては、追加・削除などの操作がすぐに反映されます。一方、全文検索においては、転置索引が逐次更新の難しいデータ構造であることから、文書の追加・削除に対応しないエンジンが少なくありません。\r\nこれに対し、転置索引を用いた全文検索エンジンでありながら、groonga は文書を短時間で追加・削除することができます。その上、更新しながらでも検索できるという優れた特徴を持っているため、全文検索エンジンとしてはとても柔軟性があります。また、複
 数のè»
 ¢ç½®ç´¢å¼•ã‚’統合するような重い処理を必要としないので、安定して高い性能を発揮することが期待できます。\r\n1.3. カラムストアと集計クエリ\r\n現代は、インターネットを情報源とすれば、いくらでも情報を収集できる時代です。しかし、膨大な情報から有益な情報を引き出すのは困難であり、多面的な分析による試行錯誤が必要となります。たとえば、日付や時間帯により絞り込んでみたり、地域により絞り込んでみたり、性別や年齢により絞り込んでみたりすることでしょう。そして、そのようなときに便利な存在が集計クエリです。\r\n集計クエリとは、指定したカラムの値によってレコードをグループ化し、各グループに含まれるレコードの数を求めるクエリです。たとえば、地域の ID を格納しているカラムを指定すれば、地å
 ŸŸæ¯Žã®
 レコード数が求まります。日付のカラムを指定したときの出力をグラフ化すれば、レコード数の時間変化を視覚化することができます。さらに、地域による絞り込みと日付に対する集計クエリを組み合わせれば、特定の地域におけるレコード数の時間変化を視覚化ことも可能です。このように、尺度を自由に選択して絞り込み・集計できることは、膨大な情報を扱う上でとても重要になります。\r\ngroonga が集計クエリを高速に処理できる理由は、データベースの論理構造にカラムストアを採用しているからです。集計クエリが参照するのは指定されたカラムのみであるため、カラム単位でデータを格納する列指向のデータベースでは、必要なカラムのみを無駄なく読み出せることが利点となります。一方、レコード単位でデータを格ç´
 ã™ã‚‹è
 ¡ŒæŒ‡å‘のデータベースでは、隣接するカラムをまとめて読み出してしまうことが欠点となります。\r\n1.4. 転置索引とトークナイザ\r\n転置索引は大規模な全文検索に用いられる伝統的なデータ構造です。転置索引を用いた全文検索エンジンでは、文書を追加するときに索引語を記録しておき、検索するときはクエリを索引語に分割して出現文書を求めます。そのため、文書やクエリから索引語を抜き出す方法が重要になります。\r\nトークナイザは、文字列から索引語を抜き出すモジュールです。日本語を対象とする全文検索においては、形態素を索引語として抜き出す方式と文字 N-gram を抜き出す方式のいずれか、あるいは両方を用いるのが一般的です。形態素方式は検索時間や索引サイズの面で優れているほか、検索結果に不要な文æ›
 ¸ãŒå«ã
 ¾ã‚Œã«ãã„という利点を持っています。一方、N-gram 方式には検索漏れが発生しにくいという利点があり、状況によって適した方式を選択することが望ましいとされています。\r\ngroonga は形態素方式と N-gram 方式の両方に対応しています。初期状態で利用できるトークナイザは空白を区切り文字として用いる方式と N-gram 方式のみですが、形態素解析器 MeCab を組み込んだときは MeCab による分かち書きの結果を用いる形態素方式が有効になります。トークナイザはプラグインとして追加できるため、特徴的なキーワードのみを索引語として採用するなど、独自のトークナイザを開発することが可能です。\r\n1.5. 共有可能なストレージと参照ロックフリー\r\nCPU のマルチコア化が進んでいるため、同時に複数のクエリを実行したり、一つのク
 エリã‚
 ’複数のスレッドで実行したりすることの重要性はますます高まっています。\r\ngroonga のストレージは、複数のスレッド・プロセスで共有することができます。また、参照ロックフリーなデータ構造を採用しているため、更新クエリを実行している状況でも参照クエリを実行することができます。参照クエリを実行できる状態を維持しながら更新クエリを実行できるので、リアルタイムなシステムに適しています。さらには、MySQL を介して更新クエリを実行している最中に groonga の HTTP サーバを介して参照クエリを実行するなど、多彩な運用が可能となっています。\r\n1.6. 位置情報(緯度・経度)検索\r\nGPS に代表される測位システムを搭載した高機能な携帯端末の普及などによって、位置情報を扱うサービスはますます便利になってã
 „ますã
 €‚たとえば、近くにあるレストランを探しているときは、現在地からの距離を基準として検索をおこない、検索結果を地図上に表示してくれるようなサービスが便利です。そのため、位置情報検索を高速に実現できることが重要になっています。\r\ngroonga では転置索引を応用して高速な位置情報検索を実現しています。矩形・円による範囲検索に対応しているほか、基準点の近くを優先的に探索させることができます。また、距離計算をサポートしているので、位置情報検索の結果を基準点からの距離によって整列することも可能です。\r\n1.7. groonga ライブラリ\r\nGroonga の基本機能は C ライブラリとして提供されているので、任意のアプリケーションに組み込んで利用することができます。C/C++ 以外については、Ruby から groonga を利用ã
 ™ã‚‹ãƒ©ã
 ‚¤ãƒ–ラリなどが関連プロジェクトにおいて提供されています。詳しくは 関連プロジェクト を参照してください。\r\n1.8. groonga サーバ\r\ngroonga にはサーバ機能があるため、レンタルサーバなどの新しいライブラリをインストールできない環境においても利用できます。対応しているのは HTTP, memcached binary プロトコル、およびに groonga の独自プロトコルである gqtp です。サーバとして利用するときはクエリのキャッシュ機能が有効になるため、同じクエリを受け取ったときは応答時間が短くなるという特徴があります。\r\n1.9. groonga ストレージエンジン\r\ngroonga は独自のカラムストアを持つ列指向のデータベースとしての側面を持っていますが、既存の RDBMS のストレージエンジンとして利用することもできます。たとえば、groonga をベース
 とすã‚
 ‹ MySQL のストレージエンジンとして mroonga が開発されています。mroonga は MySQL のプラグインとして動的にロードすることが可能であり、groonga のカラムストアをストレージとして利用したり、全文検索エンジンとして groonga ã‚’ MyISAM ã‚„ InnoDB と連携させたりすることができます。groonga 単体での利用、およびに MyISAM, InnoDB との連携には一長一短があるので、用途に応じて適切な組み合わせを選ぶことが大切です。詳しくは 関連プロジェクト を参照してください。\r\n\r\n","groongaについて"],
-[2,"groongaプロジェクト","${PREFIX}/test/epub-searcher/fixtures/single_contributors_multi_spine.epub","\r\n1.1. groonga の概要\r\ngroonga は転置索引を用いた高速・高精度な全文検索エンジンであり、登録された文書をすぐに検索結果に反映できます。また、参照をブロックせずに更新できることから、即時更新の必要なアプリケーションにおいても高い性能を発揮します。\r\n全文検索エンジンとして開発された groonga ですが、独自のカラムストアを持つ列指向のデータベースとしての側面も持っています。そのため、MySQL ã‚„ PostgreSQL など、既存の代表的なデータベースが苦手とする集計クエリを高速に処理できるという特徴があり、組み合わせによって弱点を補うような使い方もできます。\r\ngroonga の基本機能は C ライブラリとして提供されていますが、MySQL ã
 ‚„ Postg
 reSQL と連携させたり、Ruby から呼び出したりすることもできます。そのため、任意のアプリケーションに組み込むことが可能であり、多様な使い方が考えられます。 興味のある方は 利用例 をご覧ください。\r\n\r\n\r\n1.2. 全文検索と即時更新\r\n一般的なデータベースにおいては、追加・削除などの操作がすぐに反映されます。一方、全文検索においては、転置索引が逐次更新の難しいデータ構造であることから、文書の追加・削除に対応しないエンジンが少なくありません。\r\nこれに対し、転置索引を用いた全文検索エンジンでありながら、groonga は文書を短時間で追加・削除することができます。その上、更新しながらでも検索できるという優れた特徴を持っているため、全文検索エンジンとしてはとても柔軟性があります。また、
 複数ã
 ®è»¢ç½®ç´¢å¼•ã‚’統合するような重い処理を必要としないので、安定して高い性能を発揮することが期待できます。\r\n\r\n","groongaについて"],
-[3,"groongaプロジェクト","${PREFIX}/test/epub-searcher/fixtures/multi_contributors_multi_spine.epub","\r\n1.1. groonga の概要\r\ngroonga は転置索引を用いた高速・高精度な全文検索エンジンであり、登録された文書をすぐに検索結果に反映できます。また、参照をブロックせずに更新できることから、即時更新の必要なアプリケーションにおいても高い性能を発揮します。\r\n全文検索エンジンとして開発された groonga ですが、独自のカラムストアを持つ列指向のデータベースとしての側面も持っています。そのため、MySQL ã‚„ PostgreSQL など、既存の代表的なデータベースが苦手とする集計クエリを高速に処理できるという特徴があり、組み合わせによって弱点を補うような使い方もできます。\r\ngroonga の基本機能は C ライブラリとして提供されていますが、MySQL ã‚
 „ Postgr
 eSQL と連携させたり、Ruby から呼び出したりすることもできます。そのため、任意のアプリケーションに組み込むことが可能であり、多様な使い方が考えられます。 興味のある方は 利用例 をご覧ください。\r\n\r\n\r\n1.2. 全文検索と即時更新\r\n一般的なデータベースにおいては、追加・削除などの操作がすぐに反映されます。一方、全文検索においては、転置索引が逐次更新の難しいデータ構造であることから、文書の追加・削除に対応しないエンジンが少なくありません。\r\nこれに対し、転置索引を用いた全文検索エンジンでありながら、groonga は文書を短時間で追加・削除することができます。その上、更新しながらでも検索できるという優れた特徴を持っているため、全文検索エンジンとしてはとても柔軟性があります。また、è
 ¤‡æ•°ã®
 転置索引を統合するような重い処理を必要としないので、安定して高い性能を発揮することが期待できます。\r\n\r\n","groongaについて"]
+["_id","author","file_path","main_text","modified","title","unique_identifier"],
+[1,"groonga","${PREFIX}/test/epub-searcher/fixtures/empty_contributors_single_spine.epub","\r\n1. groongaの特徴\r\n1.1. groonga の概要\r\ngroonga は転置索引を用いた高速・高精度な全文検索エンジンであり、登録された文書をすぐに検索結果に反映できます。また、参照をブロックせずに更新できることから、即時更新の必要なアプリケーションにおいても高い性能を発揮します。\r\n全文検索エンジンとして開発された groonga ですが、独自のカラムストアを持つ列指向のデータベースとしての側面も持っています。そのため、MySQL や PostgreSQL など、既存の代表的なデータベースが苦手とする集計クエリを高速に処理できるという特徴があり、組み合わせによって弱点を補うような使い方もできます。\r\ngroonga の基本機能は C ライブラリとして提供されていますが、My
 SQL ã‚„ 
 PostgreSQL と連携させたり、Ruby から呼び出したりすることもできます。そのため、任意のアプリケーションに組み込むことが可能であり、多様な使い方が考えられます。 興味のある方は 利用例 をご覧ください。\r\n1.2. 全文検索と即時更新\r\n一般的なデータベースにおいては、追加・削除などの操作がすぐに反映されます。一方、全文検索においては、転置索引が逐次更新の難しいデータ構造であることから、文書の追加・削除に対応しないエンジンが少なくありません。\r\nこれに対し、転置索引を用いた全文検索エンジンでありながら、groonga は文書を短時間で追加・削除することができます。その上、更新しながらでも検索できるという優れた特徴を持っているため、全文検索エンジンとしてはとても柔軟性があります。また、複
 数のè»
 ¢ç½®ç´¢å¼•ã‚’統合するような重い処理を必要としないので、安定して高い性能を発揮することが期待できます。\r\n1.3. カラムストアと集計クエリ\r\n現代は、インターネットを情報源とすれば、いくらでも情報を収集できる時代です。しかし、膨大な情報から有益な情報を引き出すのは困難であり、多面的な分析による試行錯誤が必要となります。たとえば、日付や時間帯により絞り込んでみたり、地域により絞り込んでみたり、性別や年齢により絞り込んでみたりすることでしょう。そして、そのようなときに便利な存在が集計クエリです。\r\n集計クエリとは、指定したカラムの値によってレコードをグループ化し、各グループに含まれるレコードの数を求めるクエリです。たとえば、地域の ID を格納しているカラムを指定すれば、地å
 ŸŸæ¯Žã®
 レコード数が求まります。日付のカラムを指定したときの出力をグラフ化すれば、レコード数の時間変化を視覚化することができます。さらに、地域による絞り込みと日付に対する集計クエリを組み合わせれば、特定の地域におけるレコード数の時間変化を視覚化ことも可能です。このように、尺度を自由に選択して絞り込み・集計できることは、膨大な情報を扱う上でとても重要になります。\r\ngroonga が集計クエリを高速に処理できる理由は、データベースの論理構造にカラムストアを採用しているからです。集計クエリが参照するのは指定されたカラムのみであるため、カラム単位でデータを格納する列指向のデータベースでは、必要なカラムのみを無駄なく読み出せることが利点となります。一方、レコード単位でデータを格ç´
 ã™ã‚‹è
 ¡ŒæŒ‡å‘のデータベースでは、隣接するカラムをまとめて読み出してしまうことが欠点となります。\r\n1.4. 転置索引とトークナイザ\r\n転置索引は大規模な全文検索に用いられる伝統的なデータ構造です。転置索引を用いた全文検索エンジンでは、文書を追加するときに索引語を記録しておき、検索するときはクエリを索引語に分割して出現文書を求めます。そのため、文書やクエリから索引語を抜き出す方法が重要になります。\r\nトークナイザは、文字列から索引語を抜き出すモジュールです。日本語を対象とする全文検索においては、形態素を索引語として抜き出す方式と文字 N-gram を抜き出す方式のいずれか、あるいは両方を用いるのが一般的です。形態素方式は検索時間や索引サイズの面で優れているほか、検索結果に不要な文æ›
 ¸ãŒå«ã
 ¾ã‚Œã«ãã„という利点を持っています。一方、N-gram 方式には検索漏れが発生しにくいという利点があり、状況によって適した方式を選択することが望ましいとされています。\r\ngroonga は形態素方式と N-gram 方式の両方に対応しています。初期状態で利用できるトークナイザは空白を区切り文字として用いる方式と N-gram 方式のみですが、形態素解析器 MeCab を組み込んだときは MeCab による分かち書きの結果を用いる形態素方式が有効になります。トークナイザはプラグインとして追加できるため、特徴的なキーワードのみを索引語として採用するなど、独自のトークナイザを開発することが可能です。\r\n1.5. 共有可能なストレージと参照ロックフリー\r\nCPU のマルチコア化が進んでいるため、同時に複数のクエリを実行したり、一つのク
 エリã‚
 ’複数のスレッドで実行したりすることの重要性はますます高まっています。\r\ngroonga のストレージは、複数のスレッド・プロセスで共有することができます。また、参照ロックフリーなデータ構造を採用しているため、更新クエリを実行している状況でも参照クエリを実行することができます。参照クエリを実行できる状態を維持しながら更新クエリを実行できるので、リアルタイムなシステムに適しています。さらには、MySQL を介して更新クエリを実行している最中に groonga の HTTP サーバを介して参照クエリを実行するなど、多彩な運用が可能となっています。\r\n1.6. 位置情報(緯度・経度)検索\r\nGPS に代表される測位システムを搭載した高機能な携帯端末の普及などによって、位置情報を扱うサービスはますます便利になってã
 „ますã
 €‚たとえば、近くにあるレストランを探しているときは、現在地からの距離を基準として検索をおこない、検索結果を地図上に表示してくれるようなサービスが便利です。そのため、位置情報検索を高速に実現できることが重要になっています。\r\ngroonga では転置索引を応用して高速な位置情報検索を実現しています。矩形・円による範囲検索に対応しているほか、基準点の近くを優先的に探索させることができます。また、距離計算をサポートしているので、位置情報検索の結果を基準点からの距離によって整列することも可能です。\r\n1.7. groonga ライブラリ\r\nGroonga の基本機能は C ライブラリとして提供されているので、任意のアプリケーションに組み込んで利用することができます。C/C++ 以外については、Ruby から groonga を利用ã
 ™ã‚‹ãƒ©ã
 ‚¤ãƒ–ラリなどが関連プロジェクトにおいて提供されています。詳しくは 関連プロジェクト を参照してください。\r\n1.8. groonga サーバ\r\ngroonga にはサーバ機能があるため、レンタルサーバなどの新しいライブラリをインストールできない環境においても利用できます。対応しているのは HTTP, memcached binary プロトコル、およびに groonga の独自プロトコルである gqtp です。サーバとして利用するときはクエリのキャッシュ機能が有効になるため、同じクエリを受け取ったときは応答時間が短くなるという特徴があります。\r\n1.9. groonga ストレージエンジン\r\ngroonga は独自のカラムストアを持つ列指向のデータベースとしての側面を持っていますが、既存の RDBMS のストレージエンジンとして利用することもできます。たとえば、groonga をベース
 とすã‚
 ‹ MySQL のストレージエンジンとして mroonga が開発されています。mroonga は MySQL のプラグインとして動的にロードすることが可能であり、groonga のカラムストアをストレージとして利用したり、全文検索エンジンとして groonga ã‚’ MyISAM ã‚„ InnoDB と連携させたりすることができます。groonga 単体での利用、およびに MyISAM, InnoDB との連携には一長一短があるので、用途に応じて適切な組み合わせを選ぶことが大切です。詳しくは 関連プロジェクト を参照してください。\r\n\r\n",0.0,"groongaについて","00004257"],
+[2,"groongaプロジェクト","${PREFIX}/test/epub-searcher/fixtures/single_contributors_multi_spine.epub","\r\n1.1. groonga の概要\r\ngroonga は転置索引を用いた高速・高精度な全文検索エンジンであり、登録された文書をすぐに検索結果に反映できます。また、参照をブロックせずに更新できることから、即時更新の必要なアプリケーションにおいても高い性能を発揮します。\r\n全文検索エンジンとして開発された groonga ですが、独自のカラムストアを持つ列指向のデータベースとしての側面も持っています。そのため、MySQL ã‚„ PostgreSQL など、既存の代表的なデータベースが苦手とする集計クエリを高速に処理できるという特徴があり、組み合わせによって弱点を補うような使い方もできます。\r\ngroonga の基本機能は C ライブラリとして提供されていますが、MySQL ã
 ‚„ Postg
 reSQL と連携させたり、Ruby から呼び出したりすることもできます。そのため、任意のアプリケーションに組み込むことが可能であり、多様な使い方が考えられます。 興味のある方は 利用例 をご覧ください。\r\n\r\n\r\n1.2. 全文検索と即時更新\r\n一般的なデータベースにおいては、追加・削除などの操作がすぐに反映されます。一方、全文検索においては、転置索引が逐次更新の難しいデータ構造であることから、文書の追加・削除に対応しないエンジンが少なくありません。\r\nこれに対し、転置索引を用いた全文検索エンジンでありながら、groonga は文書を短時間で追加・削除することができます。その上、更新しながらでも検索できるという優れた特徴を持っているため、全文検索エンジンとしてはとても柔軟性があります。また、
 複数ã
 ®è»¢ç½®ç´¢å¼•ã‚’統合するような重い処理を必要としないので、安定して高い性能を発揮することが期待できます。\r\n\r\n",1371707215.0,"groongaについて",""],
+[3,"groongaプロジェクト","${PREFIX}/test/epub-searcher/fixtures/multi_contributors_multi_spine.epub","\r\n1.1. groonga の概要\r\ngroonga は転置索引を用いた高速・高精度な全文検索エンジンであり、登録された文書をすぐに検索結果に反映できます。また、参照をブロックせずに更新できることから、即時更新の必要なアプリケーションにおいても高い性能を発揮します。\r\n全文検索エンジンとして開発された groonga ですが、独自のカラムストアを持つ列指向のデータベースとしての側面も持っています。そのため、MySQL ã‚„ PostgreSQL など、既存の代表的なデータベースが苦手とする集計クエリを高速に処理できるという特徴があり、組み合わせによって弱点を補うような使い方もできます。\r\ngroonga の基本機能は C ライブラリとして提供されていますが、MySQL ã‚
 „ Postgr
 eSQL と連携させたり、Ruby から呼び出したりすることもできます。そのため、任意のアプリケーションに組み込むことが可能であり、多様な使い方が考えられます。 興味のある方は 利用例 をご覧ください。\r\n\r\n\r\n1.2. 全文検索と即時更新\r\n一般的なデータベースにおいては、追加・削除などの操作がすぐに反映されます。一方、全文検索においては、転置索引が逐次更新の難しいデータ構造であることから、文書の追加・削除に対応しないエンジンが少なくありません。\r\nこれに対し、転置索引を用いた全文検索エンジンでありながら、groonga は文書を短時間で追加・削除することができます。その上、更新しながらでも検索できるという優れた特徴を持っているため、全文検索エンジンとしてはとても柔軟性があります。また、è
 ¤‡æ•°ã®
 転置索引を統合するような重い処理を必要としないので、安定して高い性能を発揮することが期待できます。\r\n\r\n",1371696244.0,"groongaについて",""]
 ]

  Modified: test/epub-searcher/remote_database_test.rb (+2 -0)
===================================================================
--- test/epub-searcher/remote_database_test.rb    2016-03-15 19:30:56 +0900 (055401d)
+++ test/epub-searcher/remote_database_test.rb    2016-03-15 19:31:04 +0900 (cebc111)
@@ -26,6 +26,8 @@ class TestRemoteDatabase < Test::Unit::TestCase
         {:table=>:Books, :name=>'file_path', :flags=>'COLUMN_SCALAR', :type=>:ShortText},
         {:table=>:Books, :name=>'title', :flags=>'COLUMN_SCALAR', :type=>:ShortText},
         {:table=>:Books, :name=>'main_text', :flags=>'COLUMN_SCALAR', :type=>:LongText},
+        {:table=>:Books, :name=>'unique_identifier', :flags=>'COLUMN_SCALAR', :type=>:ShortText},
+        {:table=>:Books, :name=>'modified', :flags=>'COLUMN_SCALAR', :type=>:Time},
         {:table=>:Terms, :name=>'entries_author_index', :flags=>'COLUMN_INDEX|WITH_POSITION', :type=>:Books, :source=>'author'},
         {:table=>:Terms, :name=>'entries_main_text_index', :flags=>'COLUMN_INDEX|WITH_POSITION', :type=>:Books, :source=>'main_text'},
         {:table=>:Terms, :name=>'entries_title_index', :flags=>'COLUMN_INDEX|WITH_POSITION', :type=>:Books, :source=>'title'},
-------------- next part --------------
HTML����������������������������...
Download 



More information about the Groonga-commit mailing list
Back to archive index