Kentaro Hayashi
null+****@clear*****
Tue Aug 29 11:36:23 JST 2017
Kentaro Hayashi 2017-08-29 11:36:23 +0900 (Tue, 29 Aug 2017) New Revision: 5237f094c5e4a15a6d66a129371f8feb7c9a2d12 https://github.com/groonga/groonga.org/commit/5237f094c5e4a15a6d66a129371f8feb7c9a2d12 Message: blog ja: add 7.0.6 entry Added files: ja/_posts/2017-08-29-groonga-7.0.6.md Added: ja/_posts/2017-08-29-groonga-7.0.6.md (+338 -0) 100644 =================================================================== --- /dev/null +++ ja/_posts/2017-08-29-groonga-7.0.6.md 2017-08-29 11:36:23 +0900 (4385fb84) @@ -0,0 +1,338 @@ +--- +layout: post.ja +title: Groonga 7.0.6リリース +description: Groonga 7.0.6をリリースしました! +--- + +## Groonga 7.0.6リリース + +今日は肉の日ですね! + +[Groonga 7.0.6](/ja/docs/news.html#release-7-0-6)をリリースしました! + +それぞれの環境毎のインストール方法: [インストール](/ja/docs/install.html) + +### 変更内容 + +主な変更点は以下の通りです。 + + * `object_inspect` コマンドを使ってディスク使用量を表示できるようになりました + * クエリーをパースする際にフォールバックする機能をサポートしました + * クエリー内の語のスコアを調整できるようになりました + +### `object_inspect` コマンドを使ってディスク使用量を表示できるようになりました + +今回のリリースでは、`object_inspect` コマンドを使ってディスク使用量を表示できるようになりました。 + +これまでも、データベース全体のディスク容量はduコマンドなどを使えばわかります。しかし、特定のオブジェクト(例えば、テーブルだったり、インデックスなど)がどれくらいディスクを使用しているかというのは、簡単にはわかりませんでした。(できなくはないですが、オブジェクトと対応するパスを調べて突き合わせたりしないといけないので一手間かかります。) + +今回のリリースからは、そのような面倒なことをしなくてもよくなりました。 `object_inspect` コマンドのレスポンスに `disk_usage` パラメータが含まれるようになっています。 +使用量の確認には、そのパラメータを参照してください。単位はバイトです。 + +例えば、チュートリアルのサンプルで作ったデータベースのディスク使用量を調べてみましょう。 + + table_create --name Site --flags TABLE_HASH_KEY --key_type ShortText + column_create --table Site --name title --type ShortText + load --table Site + [ + {"_key":"http://example.org/","title":"This is test record 1!"}, + {"_key":"http://example.net/","title":"test record 2."}, + {"_key":"http://example.com/","title":"test test record three."}, + {"_key":"http://example.net/afr","title":"test record four."}, + {"_key":"http://example.org/aba","title":"test test test record five."}, + {"_key":"http://example.com/rab","title":"test test test test record six."}, + {"_key":"http://example.net/atv","title":"test test test record seven."}, + {"_key":"http://example.org/gat","title":"test test record eight."}, + {"_key":"http://example.com/vdw","title":"test test record nine."}, + ] + table_create --name Terms --flags TABLE_PAT_KEY --key_type ShortText --default_tokenizer TokenBigram --normalizer NormalizerAuto + column_create --table Terms --name blog_title --flags COLUMN_INDEX|WITH_POSITION --type Site --source title + +`Terms` テーブルのディスク使用量を調べるには次のコマンドを実行します。 + + object_inspect --output_pretty yes Terms + +すると次のような結果が得られます。 + + { + "id": 258, + "name": "Terms", + "type": { + "id": 49, + "name": "table:pat_key" + }, + "key": { + "type": { + "id": 14, + "name": "ShortText", + "type": { + "id": 32, + "name": "type" + }, + "size": 4096 + }, + "total_size": 21, + "max_total_size": 4294967294 + }, + "value": { + "type": null + }, + "n_records": 15, + "disk_usage": 8437760 + } + +ディスク使用量は、`"disk_usage": 8437760` であることがわかります。 + +今度はインデックスカラムのディスク使用量を調べてみましょう。 +`Terms` テーブルの `blog_title` カラムのディスク使用量を調べるには次のコマンドを実行します。 + + object_inspect --output_pretty yes Terms.blog_title + +すると次のような結果が得られます。 + + { + "id": 259, + "name": "blog_title", + "table": { + "id": 258, + "name": "Terms", + "type": { + "id": 49, + "name": "table:pat_key" + }, + (省略) + ], + "disk_usage": 5283840 + } + +すると、ディスク使用量は、`"disk_usage": 5283840` であることがわかります。 + +### クエリーをパースする際にフォールバックする機能をサポートしました + +今回のリリースでは、クエリーをパースする際にフォールバックする機能をサポートしました。 +従来エラー扱いにしていたクエリーであってもエラーにはならなくなります。Groongaを使って開発しているアプリケーションで、ユーザーからの入力そのままに検索したいような場合に使うと便利です。 + +この機能を有効にするには、`query_flags` に `QUERY_NO_SYNTAX_ERROR` を指定します。 + +例えば、雑誌名のタイトルを検索するサンプルを考えてみます。 + + table_create --name Magazine --flags TABLE_HASH_KEY --key_type ShortText + column_create --table Magazine --name title --type ShortText + load --table Magazine + [ + {"_key":"http://gihyo.jp/magazine/wdpress","title":"WEB+DB PRESS"}, + {"_key":"http://gihyo.jp/magazine/SD","title":"Software Design"}, + ] + table_create --name Terms --flags TABLE_PAT_KEY --key_type ShortText --default_tokenizer TokenBigram --normalizer NormalizerAuto + column_create --table Terms --name title --flags COLUMN_INDEX|WITH_POSITION --type Magazine --source title + + +このデータベースに対して、`WEB +` で検索してみましょう。 + + select Magazine --output_pretty yes --query 'WEB +' --match_columns title" + +すると構文エラーとなります。 + + [ + [ + -63, + 1503902587.063566, + 0.0007965564727783203, + "Syntax error: <WEB +||>", + [ + [ + "yy_syntax_error", + "grn_ecmascript.lemon", + 37 + ] + ] + ] + ] + +では、次は `QUERY_NO_SYNTAX_ERROR` をつけて実行してみましょう。 + + select Magazine --output_pretty yes --match_columns title --query 'WEB +' --query_flags ALLOW_PRAGMA|ALLOW_COLUMN|QUERY_NO_SYNTAX_ERROR + +すると次のようにエラーにならずに結果が得られます。 + + [ + [ + 0, + 1503902343.382929, + 0.0419621467590332 + ], + [ + [ + [ + 1 + ], + [ + [ + "_id", + "UInt32" + ], + [ + "_key", + "ShortText" + ], + [ + "title", + "ShortText" + ] + ], + [ + 1, + "http://gihyo.jp/magazine/wdpress", + "WEB+DB PRESS" + ] + ] + ] + ] + +`QUERY_NO_SYNTAX_ERROR` フラグをつけることで、`WEB` と `+` というキーワードとみなしてそれらが含まれるタイトルを検索する、という意味だと解釈します。そのため構文エラーにならないのです。 + +### クエリー内の語のスコアを調整できるようになりました + +今回のリリースでは、クエリー内の語のスコアを調整できるようになりました。 + +これまで、検索結果に対し、特定のカラムのスコアをあげて調整するということはできましたが、キーワード単位でスコアを上げたり、下げたりというというのはサポートしていませんでした。今回のリリースからはキーワード単位でスコアを微調整することが可能になります。 + +スコアの調整方法は次の3つがあります。 + +* `>` +* `<` +* `~` + +例えば `>Groonga` は `Groonga` のスコアをインクリメントします。`<Groonga` は `Groonga` のスコアをデクリメントします。`~Groonga` は検索結果についてマッチしたドキュメントのスコアをデクリメントします。`~` は検索結果そのものには影響しません。 + +実際にこれらスコアの調整方法を使ったサンプルを示します。 + + table_create --name Shops --flags TABLE_NO_KEY + column_create --table Shops --name keyword --type ShortText + load --table Shops + [ + {"keyword":"居酒屋 洋食"}, + {"keyword":"居酒屋 和食 "}, + {"keyword":"居酒屋 中華"}, + {"keyword":"カフェ 洋食"}, + ] + + table_create --name Terms --flags TABLE_PAT_KEY --key_type ShortText --default_tokenizer TokenBigram --normalizer NormalizerAuto + column_create --table Terms --name keyword --flags COLUMN_INDEX|WITH_POSITION --type Shops --source keyword + +このデータベースに対して、`居酒屋` で検索してみましょう。 + + select Shops --output_pretty yes --match_columns keyword --output_columns keyword,_score --sort_keys -_score --query '居酒屋' + + +すると次のような結果が返ってきます。 + + [ + [ + [ + 3 + ], + [ + [ + "keyword", + "ShortText" + ], + [ + "_score", + "Int32" + ] + ], + [ + "居酒屋 洋食", + 1 + ], + [ + "居酒屋 中華", + 1 + ], + [ + "居酒屋 和食", + 1 + ] + ] + ] + +`keyword` に居酒屋を含むデータはすべてスコアが1になっています。 + +では、`和食` が上位にくるように`>`を使ってスコアを調整してみましょう。 + + select Shops --output_pretty yes --match_columns keyword --output_columns keyword,_score --sort_keys -_score --query '居酒屋 (>和食 OR 洋食 OR 中華)' + + [ + [ + [ + 3 + ], + [ + [ + "keyword", + "ShortText" + ], + [ + "_score", + "Int32" + ] + ], + [ + "居酒屋 和食 ", + 8 + ], + [ + "居酒屋 中華", + 2 + ], + [ + "居酒屋 洋食", + 2 + ] + ] + ] + +これで `和食` を含む場合にスコアが高くなりました。 + +今度は `<` を使って `洋食` を `中華` よりもスコアをあげてみましょう。 + + select Shops --output_pretty yes --match_columns keyword --output_columns keyword,_score --sort_keys -_score --query '居酒屋 (>和食 OR <洋食 OR 中華)' + +これで `洋食` が `中華` よりも高いスコアとなりました。 + + [ + [ + [ + 3 + ], + [ + [ + "keyword", + "ShortText" + ], + [ + "_score", + "Int32" + ] + ], + [ + "居酒屋 和食 ", + 8 + ], + [ + "居酒屋 洋食", + 7 + ], + [ + "居酒屋 中華", + 2 + ] + ] + ] + +### さいごに + +7.0.5からの詳細な変更点は[7.0.6リリース 2017-08-29](/ja/docs/news.html#release-7-0-6)を確認してください。 + +それでは、Groongaでガンガン検索してください! -------------- next part -------------- HTML����������������������������...ダウンロード