!rZemGiqmyMCWkAxURV:gitter.im

groonga/ja

158 Members
4 Servers

Load older messages


SenderMessageTime
30 Aug 2023
@milano:gitter.immilanoなるほど、ってことは innodb_buffer_pool_size を減らしてみようと思います01:04:08
7 Sep 2023
@ryusei145:gitter.imryusei145Redacted or Malformed Event04:03:09
@ryusei145:gitter.imryusei145

ここで聞くのが適切なのか分からないのですが、PGroongaのノーマライズ処理について、教えてください。

pgroongaでは、pgroonga_normalize() という関数でノーマライズ処理だけを実施することができるようですが、このノーマライズ処理ではタブや改行を含む0x01~0x1fの制御文字が削除されるようです。
これは、意図した設計なのでしょうか?

ちょっと実験してみたのですが、Python や .NET の実装では削除されないようでした
(Python3.9のunicodedata.normalize()と、.NET6.0のString.Normalize()で確認)

Unicode公式の仕様を確認しようと思い、以下のサイトにたどりつき、見てみると

they may impose their own limitations, such as removing certain control

との記述があるので、「各実装におまかせします」の世界なのかもしれません

https://unicode.org/reports/tr15/#:~:text=they%20may%20impose,control

groongaリポジトリをダウンロードしてみたのですが、ノーマライズ処理部分のソースを見つけることができませんでした。。。

04:25:43
@ryusei145:gitter.imryusei145 *

ここで聞くのが適切なのか分からないのですが、PGroongaのノーマライズ処理について、教えてください。

pgroongaでは、pgroonga_normalize() という関数でノーマライズ処理だけを実施することができるようですが、このノーマライズ処理ではタブや改行を含む0x01~0x1fの制御文字が削除されるようです。
これは、意図した設計なのでしょうか?

ちょっと実験してみたのですが、Python や .NET の実装では削除されないようでした
(Python3.9のunicodedata.normalize()と、.NET6.0のString.Normalize()で確認)

Unicode公式の仕様を確認しようと思い、以下のサイトにたどりつき、見てみると

they may impose their own limitations, such as removing certain control

との記述があったので、「各実装におまかせします」の世界なのかもしれません

https://unicode.org/reports/tr15/#:~:text=they%20may%20impose,control

groongaリポジトリをダウンロードしてみたのですが、ノーマライズ処理部分のソースを見つけることができませんでした。。。

04:26:31
@ryusei145:gitter.imryusei145 *

ここで聞くのが適切なのか分からないのですが、PGroongaのノーマライズ処理について、どなたか教えてください。

pgroongaでは、pgroonga_normalize() という関数でノーマライズ処理だけを実施することができるようですが、このノーマライズ処理ではタブや改行を含む0x01~0x1fの制御文字が削除されるようです。
これは、意図した設計なのでしょうか?

ちょっと実験してみたのですが、Python や .NET の実装では削除されないようでした
(Python3.9のunicodedata.normalize()と、.NET6.0のString.Normalize()で確認)

Unicode公式の仕様を確認しようと思い、以下のサイトにたどりつき、見てみると

they may impose their own limitations, such as removing certain control

との記述があったので、「各実装におまかせします」の世界なのかもしれません

https://unicode.org/reports/tr15/#:~:text=they%20may%20impose,control

groongaリポジトリをダウンロードしてみたのですが、ノーマライズ処理部分のソースを見つけることができませんでした。。。

04:26:56
@ryusei145:gitter.imryusei145 *

ここで聞くのが適切なのか分からないのですが、PGroongaのノーマライズ処理について、どなたか教えてください。

pgroongaでは、pgroonga_normalize() という関数でノーマライズ処理だけを実施することができるようですが、このノーマライズ処理ではタブや改行を含む0x01~0x1fの制御文字が削除されるようです。
これは、意図した設計なのでしょうか?

ちょっと実験してみたのですが、Python や .NET の実装では削除されないようでした
(Python3.9のunicodedata.normalize()と、.NET6.0のString.Normalize()で確認)

Unicode公式の仕様を確認しようと思い、以下のサイトにたどりつき、見てみると

they may impose their own limitations, such as removing certain control codes.

との記述があったので、「各実装におまかせします」の世界なのかもしれません

https://unicode.org/reports/tr15/#:~:text=they%20may%20impose,codes.

groongaリポジトリをダウンロードしてみたのですが、ノーマライズ処理部分のソースを見つけることができませんでした。。。

04:28:25
@ryusei145:gitter.imryusei145 *

ここで聞くのが適切なのか分からないのですが、PGroongaのノーマライズ処理について、どなたか教えてください。

pgroongaでは、pgroonga_normalize() という関数でノーマライズ処理だけを実施することができるようですが、このノーマライズ処理ではタブや改行を含む0x01~0x1fの制御文字が削除されるようです。
これは、意図した設計なのでしょうか?

ちょっと実験してみたのですが、Python や .NET の実装では削除されないようでした
(Python3.9のunicodedata.normalize()と、.NET6.0のString.Normalize()で確認)

Unicode公式の仕様を確認しようと思い、以下のサイトにたどりつき、見てみると

they may impose their own limitations, such as removing certain control codes.

との記述があったので、「各実装におまかせします」の世界なのかもしれません

https://unicode.org/reports/tr15/#:~:text=they%20may%20impose,codes.

ソースも見てみようと、groongaリポジトリをダウンロードしてみたのですが、ノーマライズ処理部分のソースを見つけることができませんでした。。。

04:29:18
@ktou:matrix.orgkou意図した設計です。 表示できない文字は削除しています。 https://github.com/groonga/groonga/blob/master/lib/normalizer.c#L2963-L2964 削除して欲しくないユースケースがあるということですよね? どういうケースですか?04:56:11
@ryusei145:gitter.imryusei145
In reply to @ktou:matrix.org
意図した設計です。
表示できない文字は削除しています。
https://github.com/groonga/groonga/blob/master/lib/normalizer.c#L2963-L2964

削除して欲しくないユースケースがあるということですよね?
どういうケースですか?

PGroongaの本来の使い方から、外れてしまっているのを理解しつつなのですが、
もろもろの事情(※)から、PGroongaのインデックスを張らずにあいまい一致検索をするため、

where pgroonga_normalize(カラム) like pgroonga_normalize('検索値'+'%')

のような条件で検索しております。
ですが、あいう(改行)かきくあいう(タブ)かきくに対して、あいうかがヒットする、という状況になっており、ちょびっとだけ困っておりました。

と、思ったら "remove_new_line" なるオプションがあるのですね!
これで、半分くらいは問題がクリアします。
#ソース共有ありがとうございました。

がんばって修正して、PRするほどの困り具合ではないので、
今回はそういう仕様なんですねーっていうことで承知しました!!

早速のコメントありがとうございました🙇‍♂️

※ もろもろの事情:
pgroongaのインデックスが思ったよりもディスク容量を必要とすること、等価条件で1023文字(4096バイト)の制約があること、インデックスを利用しない実行計画の場合ノーマライズが働かないこと、などから、ノーマライズ処理だけを利用する方針としています。

05:45:54
@ryusei145:gitter.imryusei145
In reply to @ktou:matrix.org
意図した設計です。
表示できない文字は削除しています。
https://github.com/groonga/groonga/blob/master/lib/normalizer.c#L2963-L2964

削除して欲しくないユースケースがあるということですよね?
どういうケースですか?
*

PGroongaの本来の使い方から、外れてしまっているのを理解しつつなのですが、
もろもろの事情(※)から、PGroongaのインデックスを張らずにあいまい一致検索をするため、

where pgroonga_normalize(カラム) like pgroonga_normalize('検索値') || '%'

のような条件で検索しております。
ですが、あいう(改行)かきくあいう(タブ)かきくに対して、あいうかがヒットする、という状況になっており、ちょびっとだけ困っておりました。

と、思ったら "remove_new_line" なるオプションがあるのですね!
これで、半分くらいは問題がクリアします。
#ソース共有ありがとうございました。

がんばって修正して、PRするほどの困り具合ではないので、
今回はそういう仕様なんですねーっていうことで承知しました!!

早速のコメントありがとうございました🙇‍♂️

※ もろもろの事情:
pgroongaのインデックスが思ったよりもディスク容量を必要とすること、等価条件で1023文字(4096バイト)の制約があること、インデックスを利用しない実行計画の場合ノーマライズが働かないこと、などから、ノーマライズ処理だけを利用する方針としています。

05:46:25
@ktou:matrix.orgkou

なるほどー

等価条件で1023文字(4096バイト)の制約がある

本当にそんなに長い文字列に対して等価条件が必要な場合は正規表現用のインデックスを作ることで対応できます。

インデックスを利用しない実行計画の場合ノーマライズが働かない

これは https://pgroonga.github.io/ja/reference/operators/query-v2.html とかにあるpgroonga_full_text_search_conditionとかを使ってインデックスを指定するとシーケンシャルサーチのときもノーマライズされます。

05:51:14
@ryusei145:gitter.imryusei145Redacted or Malformed Event05:55:09
@ryusei145:gitter.imryusei145
In reply to @ktou:matrix.org

なるほどー

等価条件で1023文字(4096バイト)の制約がある

本当にそんなに長い文字列に対して等価条件が必要な場合は正規表現用のインデックスを作ることで対応できます。

インデックスを利用しない実行計画の場合ノーマライズが働かない

これは https://pgroonga.github.io/ja/reference/operators/query-v2.html とかにあるpgroonga_full_text_search_conditionとかを使ってインデックスを指定するとシーケンシャルサーチのときもノーマライズされます。

そうなんです。

実は話を端折ってしまったのですが、正規表現用のインデックスでは pgroonga_full_text_search_condition を指定できないこと、等価条件ではバイト数制限があること、から、全文検索インデックスだけ作って、↓のように等価判定を行う方式にしよう、と思ったこともあったのです。
# 前半の条件が等価条件で、後半の条件が一次絞り込み(速度改善)のための全文検索。

prroonga_normalize(カラム) = pgroonga_normalize('検索値') and カラム &@~ ('検索値', NULL, インデックス名)

でも、速度改善とディスク容量(+更新速度)を天秤にかけた結果、後半部分が無くなり今に至る、という状況でございます。

06:07:03
@ktou:matrix.orgkou

正規表現でもpgroonga_full_text_search_conditionを使えるようにするのが王道ですよねぇ。

ちなみに、ディスク容量ってどのくらい食っていました?
めちゃめちゃテキストデータが大きいんですか?
4KiB以上のテキストがゴロゴロあるのがにわかに信じがたいのですが。。。

06:10:31
@ryusei145:gitter.imryusei145

ちなみに、ディスク容量ってどのくらい食っていました?

120のカラムに対して3つずつ(等価、全文、正規表現)インデックスを張って100MB → 10GB くらいです(スパースファイルの仮想サイズではなく実サイズで)
すいません。レコード数までは見ませんでした。

4KiB以上のテキストがゴロゴロあるのがにわかに信じがたいのですが。。。

無いです。全然無いです。

もともとのカラム定義が varchar(1024)となっていただけで、実際に入っているデータは数文字から数十文字くらいまでです。
ただ、大きかったものを小さくするっていうのは、怖くて手が出せなかった感じです。

06:24:04
@ktou:matrix.orgkou10GBはたしかに大きいですね。 10GB/(120 * 3)=28MBなので1つあたり大体30MB弱ですか。(等価は全文・正規表現よりもかなり小さいはずですけど、ざっくり計算すると。) ちなみに、正規表現用のインデックスがあれば等価と全文はカバーできるので1つにできるんですが、それでも3.3GBですか。 まぁ、でも120個インデックスがあればこんなものですかねぇ。 数GBがしんどい場合はたしかにPGroongaは向いていないですねぇ。06:50:03
@ryusei145:gitter.imryusei145

数GBがしんどい

これ、私も思うところはいろいろあるんですが、、、諸事情です 😭

あと、正規表現を使う時は検索する値をエスケープしてあげないといけないところも少し課題になったところでした。
(こちらは、解決できない類の課題では無いですが、シンプルにしたいなぁ、、、と)

06:58:42
@ktou:matrix.orgkouたしかにエスケープは面倒ですね。。。07:19:02
15 Sep 2023
@takoyaki-nyokki:gitter.imtakoyaki-nyokkiRedacted or Malformed Event02:45:16
@takoyaki-nyokki:gitter.imtakoyaki-nyokki * お世話になります。 数か月前にもこちらで確認をさせていただいたのですが、 その時とは別件で確認したいことがあり、こちらで質問をさせていただきます。 場違いでしたら申し訳ございません。 現在、AlmaLinux9のサーバを2台用意して、 PostgreSQL13をそれぞれインストールし、Groonga(13.0.1、もしすると13.0.2)、PGroonga(2.4.2)をインストールし、 さらにpgpool(4.2)でサーバ間の連携を行っている状態です。 利用してしばらくは問題なく動作していたのですが、 突然以下のようなエラーが発生してpgroongaのインデックスが破損したようです。 ERROR: pgroonga: [insert] failed to set column value: [ii][update][one] failed to split a buffer: <Lexicon121284_0.index> ひとまずはREIDNEXでインデックスを修正して、このエラーも発生しなくなったのですが、 それから1週間程度でまた同じエラーが発生するようになってしまいました。 このエラーについて何かご存知の方はいらっしゃいませんでしょうか。 こちらでも調査をしているのですが、いまいち原因がつかめていない状態です。 恐れ入りますがご連絡いただければ幸いです。 02:54:25
@takoyaki-nyokki:gitter.imtakoyaki-nyokkiお世話になります。 数か月前にもこちらで確認をさせていただいたのですが、 その時とは別件で確認したいことがあり、質問をさせていただきます。 場違いでしたら申し訳ございません。 ※先ほど同じ投稿をしたのですが、編集した際に改行が消えてしまったので削除しました。 現在、AlmaLinux9のサーバを2台用意して、 PostgreSQL13をそれぞれインストールし、Groonga(13.0.1、もしかすると13.0.2)、PGroonga(2.4.2)をインストールし、 さらにpgpool(4.2)でサーバ間の連携を行っている状態です。 利用してしばらくは問題なく動作していたのですが、 突然以下のようなエラーが発生してpgroongaのインデックスが破損したようです。 ERROR: pgroonga: [insert] failed to set column value: [ii][update][one] failed to split a buffer: <Lexicon121284_0.index> ひとまずはREIDNEXでインデックスを修正して、このエラーも発生しなくなったのですが、 それから1週間程度でまた同じエラーが発生するようになってしまいました。 このエラーについて何かご存知の方はいらっしゃいませんでしょうか。 こちらでも調査をしているのですが、いまいち原因がつかめていない状態です。 恐れ入りますがご連絡いただければ幸いです。02:55:35
@ktou:matrix.orgkouログの一部だとなんともなので https://github.com/pgroonga/pgroonga/issues にissueを作ってログを添付してもらえますか?02:59:21
@takoyaki-nyokki:gitter.imtakoyaki-nyokki申し訳ありません、ログには社外情報が含まれる可能性があるため丸ごとお渡しするのは難しいです。 というより、そもそもエラー自体はこの一文しか存在していない状態です。 正確には以下のように途切れていますした。 ※一部社外情報が含まれていたため「文字列」と書き直しています。 pgroonga: [insert] failed to set column value: [ii][update][one] failed to put to buffer: <Lexicon121284_0.index>: <"文字列">(141567): (405041:1): [ii][buffer][merg03:17:25
@ktou:matrix.orgkou

うーん、pgroonga.logにバックトレースとかもっとなにかあるはずなんですよねぇ。
これ以上の情報がないということであればちょっとこれ以上は助けになれそうにありません。
スキーマやデータ量を聞いたらなにかヒントがあるかもしれませんが、データに依存していると思うので、望み薄な気はします。。。

NDAを結んだ上であれば追加情報を提供できるということであれば、有償サポートをご検討ください。
https://www.clear-code.com/services/groonga.html

あ、pgpoolが関係している可能性は非常に低いと思います。

03:28:44
@takoyaki-nyokki:gitter.imtakoyaki-nyokkiご連絡ありがとうございます。 恥ずかしながら、pgroonga.logというファイルの存在に気づいておりませんでした。 確認したところインデックスのエラーが発生するようになってから 以下のように「libgrronga.so.0」に関するログが出るようになっておりました。 2023-09-15 08:37:55.611218|e|369387: [ii][dec][byte] input is short: at least 1 byte is needed: <Lexicon121284_0.index>: <"文字列">(147397): n-values(3): n-odd-values(0): dv[1/2]: data[0/3] 2023-09-15 08:37:55.641648|e|369387: /lib64/libgroonga.so.0(grn_ctx_log_back_trace+0x76) [0x7f4e773047b6] 2023-09-15 08:37:55.641679|e|369387: /lib64/libgroonga.so.0(+0xf6540) [0x7f4e772f6540] 2023-09-15 08:37:55.641683|e|369387: /lib64/libgroonga.so.0(+0xf65ff) [0x7f4e772f65ff] 2023-09-15 08:37:55.641686|e|369387: /lib64/libgroonga.so.0(+0x4a5c19) [0x7f4e776a5c19] 2023-09-15 08:37:55.641689|e|369387: /lib64/libgroonga.so.0(+0x1d9938) [0x7f4e773d9938] 2023-09-15 08:37:55.641692|e|369387: /lib64/libgroonga.so.0(+0x1d9baa) [0x7f4e773d9baa] 2023-09-15 08:37:55.641696|e|369387: /lib64/libgroonga.so.0(+0x1e2530) [0x7f4e773e2530] 2023-09-15 08:37:55.641698|e|369387: /lib64/libgroonga.so.0(+0x4a726c) [0x7f4e776a726c] 2023-09-15 08:37:55.641701|e|369387: /lib64/libgroonga.so.0(+0x4aa992) [0x7f4e776aa992] 2023-09-15 08:37:55.641704|e|369387: /lib64/libgroonga.so.0(+0x4b73c4) [0x7f4e776b73c4] 2023-09-15 08:37:55.641707|e|369387: /lib64/libgroonga.so.0(+0x4b475f) [0x7f4e776b475f] 2023-09-15 08:37:55.641710|e|369387: /lib64/libgroonga.so.0(+0x4b51e3) [0x7f4e776b51e3] 2023-09-15 08:37:55.641713|e|369387: /lib64/libgroonga.so.0(grn_ii_update_one+0x1844) [0x7f4e773ec9e4] 2023-09-15 08:37:55.641716|e|369387: /lib64/libgroonga.so.0(grn_ii_column_update+0x61a) [0x7f4e773f2d2a] 2023-09-15 08:37:55.641719|e|369387: /lib64/libgroonga.so.0(grn_obj_default_set_value_hook+0x98) [0x7f4e77312938] 2023-09-15 08:37:55.641722|e|369387: /lib64/libgroonga.so.0(+0x11f6f2) [0x7f4e7731f6f2] またGroongaのバージョンを確認したところ13.0.2で確定できました。 リリースで見逃していたのですが「インデックス構築に失敗することがある」みたいなので、 ひとまずバージョンアップを検討してみようかと思っております。 お手間をお取りしてしまい申し訳ございませんでした。04:45:10
@ktou:matrix.orgkou *

うーん、pgroonga.logにバックトレースとかもっとなにかあるはずなんですよねぇ。
これ以上の情報がないということであればちょっとこれ以上は助けになれそうにありません。
データに依存していると思うので、スキーマやデータ量を聞いたらなにかヒントがあるかもしれませんが、望み薄な気はします。。。

NDAを結んだ上であれば追加情報を提供できるということであれば、有償サポートをご検討ください。
https://www.clear-code.com/services/groonga.html

あ、pgpoolが関係している可能性は非常に低いと思います。

06:42:49
@ktou:matrix.orgkouあぁ、たしかに、その問題が関係している可能性はあるかもしれません。06:43:17
2 Oct 2023
@temp4096:matrix.org@temp4096:matrix.org joined the room.12:38:21
3 Oct 2023
@temp4096:matrix.org@temp4096:matrix.org left the room.09:25:34
10 Oct 2023
@smdmts-54504e3cdb8155e6700cf4da:gitter.imsmdmts (Masatoshi Shimada) joined the room.05:41:48

Show newer messages


Back to Room ListRoom Version: 6