HAYASHI Kentaro
hayas****@clear*****
2014年 10月 29日 (水) 14:06:31 JST
林です。 今日は肉の日(10/29)ですね。 Groonga 4.0.7をリリースしました! http://groonga.org/ja/docs/news.html#release-4-0-7 それぞれの環境毎のインストール方法はこちらを見てください。 http://groonga.org/ja/docs/install.html 今回のリリースの主なトピックは次の通りです。 * [実験的] Zlib/LZ4による圧縮をサポートしました * [実験的] トークンフィルターを追加しました * [告知] 来月11/29は全文検索エンジンGroongaを囲む夕べ5です! ○ [実験的] Zlib/LZ4による圧縮をサポートしました 今回のリリースでは、ZlibもしくはLZ4による圧縮をサポートしました。 もともとGroongaでは、Zlib/LZOによる圧縮をサポートしてはいたのですが、 内部的な実装の都合でメモリリークしてしまうという問題があって 機能としてはあったのですが、--with-lzoや--with-zlibを指定しても あえて有効にできないようにしてありました。 今回はそのあたりの実装の問題を村上さんのパッチをもとに解決することができました。 そのため、再びZlibに加えてLZ4による圧縮がサポートされるようになっています。 LZ4をサポートすることができるようになったのも、村上さんのおかげです。 ありがとうございます! 圧縮のサポートに合わせて、パッケージの配布がライセンス上しにくい(GPLなため) LZOのサポートをやめました。LZ4がそのかわりです。 実際にカラムを圧縮するには、カラムをつくるときにCOMPRESS_ZLIBもしくはCOMPRESS_LZ4をflagsに指定してください。 column_create Entries content COLUMN_SCALAR|COMPRESS_ZLIB Text column_create Entries content COLUMN_SCALAR|COMPRESS_LZ4 Text どれくらい圧縮が効いてくるのかというのを村上さんが試したときのグラフがあります。 https://cloud.githubusercontent.com/assets/5455147/4717292/0bd6538c-5913-11e4-8575-0123b4d8b04e.png 格納されているデータの内容にもよりますが、ディスク容量節約を重視するならZlibを使い、 圧縮しつつも、処理速度を重視するならLZ4を使うのがよさそうです。 注意としては、圧縮したカラムでもソートやドリルダウンできますが、データのコピーが発生するのでそのぶん遅くなります。 また、1つでも圧縮しているカラムを含むソートやドリルダウンになると、やっぱりデータのコピーが 発生してしまいます。 そのため、現実的にはテキストデータのみ圧縮するというのと、全文検索しかしない本文データを 格納しているカラムを圧縮するというのがおすすめの使いかたです。 ○ [実験的] トークンフィルターを追加しました 今回のリリースでは、トークンフィルターを2つ追加しました。 * TokenFilterStopWord * TokenFilterStem トークンフィルターを使うと、トークナイズされたトークンをカスタマイズすることができます。 追加したトークンフィルターをそれぞれ紹介します。 * TokenFilterStopWord TokenFilterStopWordを使うと文書を検索する時にトークナイズされたトークンからストップワードを除去します。 table_create Terms TABLE_PAT_KEY ShortText \ --default_tokenizer TokenBigram \ --normalizer NormalizerAuto \ --token_filters TokenFilterStopWord column_create Terms memos_content COLUMN_INDEX|WITH_POSITION Memos content column_create Terms is_stop_word COLUMN_SCALAR Bool load --table Terms [ {"_key": "and", "is_stop_word": true} 上記のように語彙表に is_stop_word カラムを用意して、ストップワードの対象となる語句を _keyとして登録するだけです。is_stop_wordの値はtrueにしておきましょう。 この場合andがストップワードとして登録されているので、検索クエリが --query "Hello and" だとしたら、andがストップワードのためトークンとしては無視されます。 つまり、Helloで検索したのと一緒の結果になります。 TokenFilterStopWordの詳細についてはドキュメントを参照してください。 http://groonga.org/ja/docs/reference/token_filters.html#tokenfilterstopword * TokenFilterStem TokenFilterStemを使うといわゆるステミングを有効にすることができます。 TokenFilterStemを使うには語彙表テーブルを作成するときに--token_filtersオプションを指定します。 table_create Terms TABLE_PAT_KEY ShortText \ --default_tokenizer TokenBigram \ --normalizer NormalizerAuto \ --token_filters TokenFilterStem このようにしておくと、developで検索したときにdevelopだけじゃなくてdevelopingやdevelopedの 検索結果を取得できます。そのため検索漏れを少なくすることができます。 TokenFilterStemの詳細についてはドキュメントを参照してください。 http://groonga.org/ja/docs/reference/token_filters.html#tokenfilterstem ○ [告知] 来月11/29は全文検索エンジンGroongaを囲む夕べ5です! 毎年恒例、年に1度のいい肉の日(11月29日)に「全文検索エンジンGroongaを囲む夕べ」を開催します! 会場は GMOインターネットさんの シナジーカフェ GMO Yoursをお借りすることができました。 時間は13:30 - 17:30です。 Groonga開発チームから今年のアップデート内容と今後の展望を聞いたり、 「サードパーティー」によるGroonga開発チーム以外が開発したツールやライブラリーの話を聞ける いい機会です。 もちろん、GroongaだけでなくGroongaの関連プロダクトも扱います。 MroongaやRroongaなど関連プロダクトを使っている人もぜひご参加ください! 今回は休憩時間にGroongaビジネス無料相談コーナーや、検索エンジン自作入門サイン会も開催します! まずは、参加登録してください! http://groonga.doorkeeper.jp/events/15816 まだまだ発表者や協力者を募集しています。 自作ツールやライブラリーの作者さんはぜひこれを機会に発表してみませんか? ○ 変更点 さて、4.0.6からの変更点は以下の通りです。 http://groonga.org/ja/docs/news.html#release-4-0-7 * [windows] Windows上でもmrubyを組み込んで使えるようにしました。 * プラグインAPIとしてトークンフィルタを追加しました。 * TokenFilterStopWord プラグインを追加しました。 このプラグインは is_stop_word カラムの値がtrueのものをストップワードとして扱います。 * [doc] クライアントライブラリーへのリンク先を紹介する クライアントセクションを 追加しました。 [GitHub#210] [村上さんがパッチ提供] * [doc] ドキュメント構成を見直しました。 サジェスト や 位置情報検索 は リファレンスマニュアル 以下にまとめました。 [GitHub#206] [村上さんがパッチ提供] * [deb] ストップワードトークンフィルタープラグインを追加しました。 [GitHub#216] [畑ヶさんがパッチ提供] * [deb] 同梱しているファイルの著作権表記を debian/copyright でより明確にしました。 * LZOによる圧縮サポートをやめました。 * LZ4による圧縮をサポートしました。 [GitHub#223] [村上さんがパッチ提供] * in_values を追加しました。== や OR を繋げて書いていたクエリ ( ((COLUMN == "a") OR (COLUMN == "b") OR (COLUMN == "c")) ) のかわりにこれを使うのがパフォーマンスの観点からお勧めです。 * [load] TABLE_NO_KEY を使ったテーブルで既存のレコードを _id を指定して更新できるようになりました。 * TokenFilterStem プラグインを追加しました。ステミングの機能を追加します。この機能をトークンフィルタで使うには、libstemmer ライブラリーが必要です。 * [doc] Token filters のドキュメントを追加しました。 [GitHub#227] [村上さんがパッチ提供] 修正 * [doc] Rangubaプロジェクトへのリンクを修正しました。 [GitHub#212] [村上さんがパッチ提供] * [httpd] バンドルしているnginxのバージョンを1.7.6に更新しました。 [GitHub#208] [畑ヶさんがパッチ提供] * [power8] ビルドに失敗していたのを修正しました。 詳細は http://lists.askmonty.org/pipermail/commits/2014-October/006752.html を参照してください。 [Sergey Vojtovichさんがパッチ提供] * char が unsigned char としてビルドされているとURLエンコーディングに失敗する不具合を修正しました。 [GitHub#217] * TABLE_DAT_KEY テーブルを select したときに検索結果が空になる不具合を修正しました。 [GitHub#220] * ベクターカラムを表示するときにメモリリークするのを修正しました。エラーが発生したときの詳細表示で発生します。 * Zlibカラム圧縮でメモリリークする問題を修正しました。 [GitHub#221] [村上さんがパッチ提供] * --filter で Int8 カラムの値に100以下を指定したときに意図しない true を返すことがある不具合を修正しました。 この問題により意図しないレコードが検索結果含まれていました。 * ベクターカラムに対する四則演算はエラーになるようにしました。 * ビッグエンディアンの環境では、 !XXX が逆の結果を返すのを修正しました。 * 重みつきベクターカラムの内容を出力するさいメモリリークするのを修正しました。 感謝 * 村上さん * 畑ヶさん * Sergey Vojtovichさん -- HAYASHI Kentaro <hayas****@clear*****>