こんにちは、堀本です。 Groonga 12.0.1 をリリースしました! https://groonga.org/ja/docs/news.html#release-12-0-1 変更点一覧: https://groonga.org/ja/blog/2022/02/28/groonga-12.0.1.html ## 主な変更内容 ### 改良 * [query_expand] 同義語グループをサポートしました。 同義語検索をする場合、今までは、以下のようにキーワードとその同義語をそれぞれ定義していました。 table_create Thesaurus TABLE_PAT_KEY ShortText --normalizer NormalizerAuto # [[0, 1337566253.89858, 0.000355720520019531], true] column_create Thesaurus synonym COLUMN_VECTOR ShortText # [[0, 1337566253.89858, 0.000355720520019531], true] load --table Thesaurus [ {"_key": "mroonga", "synonym": ["mroonga", "tritonn", "groonga mysql"]}, {"_key": "groonga", "synonym": ["groonga", "senna"]} ] 上記のケースでは、 mroonga を検索した場合、 Groongaは、意図通り、 mroonga OR tritonn OR "groonga mysql" を検索しますが、 tritonn を検索した場合は、 Groongaは、 tritonn のみを検索します。 tritonn を検索した場合でも、 tritonn OR mroonga OR "groonga mysql" と検索した場合、以下のように定義を追加する必要がありました。 load --table Thesaurus [ {"_key": "tritonn", "synonym": ["tritonn", "mroonga", "groonga mysql"]}, ] 多くのケースでは、 mroonga を mroonga OR tritonn OR "groonga mysql" と展開した場合、 tritonn や "groonga mysql" も mroonga OR tritonn OR "groonga mysql" と展開して欲しくなりますが、 今までは、そのようなケースでは定義を追加する必要がありました。したがって、対象のキーワードに同義語がたくさんあると、 同じような定義をたくさん定義する必要があるため、同義語の定義が煩雑でした。 加えて、同義語を削除する際も、多くのレコードを削除する必要があるので面倒でした。 今回のリリースから同義語の代表値を決めることで一つのグループを作れるようになりました。例えば、以下のすべてのキーワードは、 "mroonga" グループです。 load --table Synonyms [ {"_key": "mroonga": "representative": "mroonga"} ] load --table Synonyms [ {"_key": "tritonn": "representative": "mroonga"}, {"_key": "groonga mysql": "representative": "mroonga"} ] このケースでは、 mroonga は mroonga OR tritonn OR "groonga mysql" と展開されます。 また、 tritonn や "groonga mysql" も mroonga OR tritonn OR "groonga mysql" と展開されます。 同義語を削除する際も、対象のレコードを削除するだけです。例えば、同義語から "groonga mysql" を削除する場合は、 {"_key": "groonga mysql": "representative": "mroonga"} を削除するだけです。 * [query_expand] 同義語グループにベクターを使えるようにしました。 以下のように、同義語グループにベクターを使えます。 table_create SynonymGroups TABLE_NO_KEY [[0,0.0,0.0],true] column_create SynonymGroups synonyms COLUMN_VECTOR ShortText [[0,0.0,0.0],true] table_create Synonyms TABLE_PAT_KEY ShortText [[0,0.0,0.0],true] column_create Synonyms group COLUMN_INDEX SynonymGroups synonyms [[0,0.0,0.0],true] load --table SynonymGroups [ ["synonyms"], [["rroonga", "Ruby groonga"]], [["groonga", "rroonga", "mroonga"]] ] [[0,0.0,0.0],2] query_expand Synonyms.group "rroonga" [ [ 0, 0.0, 0.0 ], "((rroonga) OR (Ruby groonga) OR (groonga) OR (rroonga) OR (mroonga))" ] * 環境変数によって、バックトレースを無効にできるようにしました。 GRN_BACK_TRACE_ENABLE を使うことで、バックトレースの出力を無効にできます。 GRN_BACK_TRACE_ENABLE=no と設定すると、 Groongaはバックトレースを出力しません。 Groongaはバックトレースをスタック領域に保持します。したがって、OSによっては、Groongaがスタック領域を使い切ってしまいクラッシュする可能性があります。 GRN_BACK_TRACE_ENABLE=no を使うことで、このようなケースを避けることができます。 * [select] --slices のパフォーマンスを改善しました。 * [Windows] VisualStudio 2022 をサポートしました。 * [select] 近傍検索でそれぞれの要素ごとの距離を指定できるようになりました。 例えば、近傍フレーズ検索なら、フレーズごとに最大距離を指定できます。この機能は今後ドキュメント化されます。そのため、機能の詳細は後日、共有します。 * [Groonga HTTPサーバー] RPMパッケージのGroongaであっても、 groonga-server-http を使えるようにしました。 ### 修正 * [Windows] Groongaがバックトレースを出力時にクラッシュする問題を修正しました。 ### 既知の問題 * 現在Groongaには、ベクターカラムに対してデータを大量に追加、削除、更新した際にデータが破損することがある問題があります。 * *< と *> は、filter条件の右辺に query() を使う時のみ有効です。もし、以下のように指定した場合、 *< と *> は && として機能します。 * 'content @ "Groonga" *< content @ "Mroonga"' * GRN_II_CURSOR_SET_MIN_ENABLE が原因でマッチするはずのレコードを返さないことがあります。