Where communities thrive


  • Join over 1.5M+ people
  • Join over 100K+ communities
  • Free without limits
  • Create your own community
People
Activity
    Horimoto Yasuhiro
    @komainu8
    すみません。。。ちょっと、やろうとしている内容がピンときませんでした。エラーになった際のテーブル定義(CREATE TABEL, INSERT INTO)とエラーになった検索クエリー(SELECT)を教えてもらえないでしょうか?
    masuda kaz
    @masudakz_twitter
    再現手順です。
    CREATE TABLE terms (
       term VARCHAR(64) NOT NULL PRIMARY KEY,
       is_stop_word BOOL NOT NULL
     ) Engine=Mroonga COMMENT='tokenizer "TokenBigram", normalizer "NormalizerNFKC100", token_filters "TokenFilterStopWord"' DEFAULT CHARSET=utf8;
    
    CREATE TABLE memos (
       id INT NOT NULL PRIMARY KEY,
       content TEXT NOT NULL,
       FULLTEXT INDEX (content) COMMENT 'table "terms"'
     ) Engine=Mroonga DEFAULT CHARSET=utf8;
    
    INSERT INTO terms VALUES ("and", true);
    
    INSERT INTO memos VALUES (1, "Hello"),(2, "Hello and Good-bye"),(3, "Good-bye"),(4, "Fine, thank you");
    
    SELECT mroonga_snippet_html('Hello and Good-bye', 'memos' as table_name, 'content'  as index_name , "BYE" as query);
    ERROR 1123 (HY000): Can't initialize function 'mroonga_snippet_html'; mroonga_snippet_html(): nonexistent index: <memos.content>
    
    > show index from memos where Key_name='content'\G
    *************************** 1. row ***************************
            Table: memos
       Non_unique: 1
         Key_name: content
     Seq_in_index: 1
      Column_name: content
        Collation: NULL
      Cardinality: NULL
         Sub_part: NULL
           Packed: NULL
             Null:
       Index_type: FULLTEXT
          Comment:
    Index_comment: table "terms"
    Horimoto Yasuhiro
    @komainu8

    ありがとうございます!
    mroonga_snippet_html()は、現状COMMENT 'table "..."には対応していないので、これは対応するようにMroongaを改良します。

    それまでは、以下のようにダミーのインデックスを作成して併用するのはどうでしょうか?

    SELECT mroonga_command("register token_filters/stop_word");
    
    CREATE TABLE terms (
       term VARCHAR(64) NOT NULL PRIMARY KEY,
       is_stop_word BOOL NOT NULL
     ) Engine=Mroonga COMMENT='tokenizer "TokenBigram", token_filters "TokenFilterStopWord"' DEFAULT CHARSET=utf8;
    
    CREATE TABLE memos (
       id INT NOT NULL PRIMARY KEY,
       content TEXT NOT NULL,
       FULLTEXT INDEX (content) COMMENT 'table "terms"'
     ) Engine=Mroonga DEFAULT CHARSET=utf8;
    
    CREATE TABLE snippet_dummy (
       dummy TEXT NOT NULL,
       FULLTEXT INDEX idx_snippet (dummy) COMMENT 'normalizer "NormalizerNFKC100"'
     ) Engine=Mroonga;
    
    INSERT INTO terms VALUES ("and", true);
    
    INSERT INTO memos VALUES (1, "Hello"),(2, "Hello and Good-bye"),(3, "Good-bye"),(4, "Fine, thank you");
    
    SELECT mroonga_snippet_html('Hello and Good-bye', 'snippet_dummy' as table_name, 'idx_snippet'  as index_name , "BYE" as query);
    SELECT * FROM memos WHERE MATCH (content) AGAINST ("fine and" IN BOOLEAN MODE);

    mroonga_snippet_html()用にダミーのテーブルを作ってそこにインデックスを定義して、ノーマライザーをカスタマイズするようにしています。

    masuda kaz
    @masudakz_twitter
    :thumbsup: 実質空のTableの実indexで、normalizer定義だけ参照させるというわけですね。やってみます。
    masuda kaz
    @masudakz_twitter
    うまくいきました。オプションを盛ったNFKC100でも当然OKで、ここのUnitTest完走です(次はTokenMeCabのところもやらないと)。
    CREATE TABLE `snippet_dummy`
    (
        `t_ngram` text NOT NULL,
        FULLTEXT KEY `idx_ngram` (`t_ngram`) COMMENT '
            tokenizer "TokenBigram",
            normalizer "NormalizerNFKC100(
            ''unify_prolonged_sound_mark'', true,
            ''unify_middle_dot'', true,
            ''unify_katakana_v_sounds'', true,
            ''unify_to_katakana'', true,
            ''unify_kana_case'', true,
            ''unify_hyphen'', true)"'
    ) ENGINE = Mroonga
      DEFAULT CHARSET = utf8mb4
        COMMENT 'Dummy table and index for mroonga_snippet_html()';
    Horimoto Yasuhiro
    @komainu8
    うまくいって、良かったです!
    masuda kaz
    @masudakz_twitter
    Mroonga で TokenMeCabTokenFilterStopWord の組みあわせもいい感じに検証が進んだのですが、最後に tokenfilters で、TokenFilterStopWordと、TokenFilterNFKC100 の共存ができませんでした。惜しいことに、オプションなしの TokenFilterNFKC100では成功して、(''unify_kana'', true) の追加をすると StopWordが効かないという現象です。
    成功
    MariaDB>CREATE TABLE terms (   
      term VARCHAR(64) NOT NULL PRIMARY KEY,   
      is_stop_word BOOL NOT NULL 
    ) Engine=Mroonga COMMENT='tokenizer "TokenMeCab", normalizer "NormalizerNFKC100", 
    token_filters "TokenFilterStopWord,TokenFilterNFKC100"' 
    DEFAULT CHARSET=utf8;
    
    MariaDB>CREATE TABLE `memos` (   
     `id` int(11) NOT NULL,   
     `content` text NOT NULL,   
      PRIMARY KEY (`id`),   
      FULLTEXT KEY `content` (`content`) COMMENT 'table "terms"' ) ENGINE=Mroonga DEFAULT CHARSET=utf8;
    
    MariaDB>INSERT INTO terms VALUES ("AND", true);
    MariaDB>INSERT INTO memos VALUES (1, "Hello"),(2, "Hello and Good-bye"),(3, "Good-bye"),(4, "Fine, thank you"); 
    
    MariaDB>SELECT * FROM memos WHERE MATCH (content) AGAINST ('+"Hello and"' IN BOOLEAN MODE);
    +----+--------------------+
    | id | content            |
    +----+--------------------+
    |  1 | Hello              |
    |  2 | Hello and Good-bye |
    +----+--------------------+
    
    MariaDB>SELECT * FROM memos WHERE MATCH (content) AGAINST ('Fine and' IN BOOLEAN MODE);
    +----+-----------------+
    | id | content         |
    +----+-----------------+
    |  4 | Fine, thank you |
    +----+-----------------+
    失敗したのは
    MariaDB>DROP TABLE terms, memos;
    
    MariaDB>CREATE TABLE terms (
       term VARCHAR(64) NOT NULL PRIMARY KEY,
       is_stop_word BOOL NOT NULL 
    ) Engine=Mroonga COMMENT='tokenizer "TokenMeCab", normalizer "NormalizerNFKC100",
     token_filters "TokenFilterStopWord,TokenFilterNFKC100(''unify_kana'', true)"'
     DEFAULT CHARSET=utf8;
    
    MariaDB>CREATE TABLE `memos` (   `id` int(11) NOT NULL,   `content` text NOT NULL,   PRIMARY KEY (`id`),   FULLTEXT KEY `content` (`content`) COMMENT 'table "terms"' ) ENGINE=Mroonga DEFAULT CHARSET=utf8;
    
    MariaDB>INSERT INTO terms VALUES ("AND", true);
    MariaDB>INSERT INTO memos VALUES (1, "Hello"),(2, "Hello and Good-bye"),(3, "Good-bye"),(4, "Fine, thank you");
    
    MariaDB>SELECT * FROM memos WHERE MATCH (content) AGAINST ('+"Hello and"' IN BOOLEAN MODE);
    +----+--------------------+
    | id | content            |
    +----+--------------------+
    |  2 | Hello and Good-bye |
    +----+--------------------+
    
    MariaDB>SELECT * FROM memos WHERE MATCH (content) AGAINST ('Fine and' IN BOOLEAN MODE);
    +----+--------------------+
    | id | content            |
    +----+--------------------+
    |  4 | Fine, thank you    |
    |  2 | Hello and Good-bye |
    +----+--------------------+
    masuda kaz
    @masudakz_twitter
    normalizer の方では同様にNFKC100のオプションを追加して成功しましたが、なにか指定に間違いがあるでしょうか?
    yamazakitatsuya
    @yamazakitatsuya

    はじめまして山崎と申します

    EC2(Amazon Linux2)でmroogaを入れようと思ったのですが、プラグインインストールの段階で エラーが出てしまいます。

    mysql> INSTALL PLUGIN mroonga SONAME 'ha_mroonga.so';
    ERROR 1126 (HY000): Can't open shared library '/usr/lib64/mysql/plugin/ha_mroonga.so' (errno: 2 /lib64/libarrow.so.300: undefined symbol: LZ4F_resetDecompressionContext)

    もしご存知でしたら対応方法についてご教示いただけないでしょうか。

    インストールについては下記の手順です

    Horimoto Yasuhiro
    @komainu8
    @yamazakitatsuya おそらく、お使いの環境に入っているLz4のバージョンが古いのだと思います。Mroongaが依存しているライブラリーが Lz4 v1.8.0 で追加されたAPIを使用しているため、 Lz4のバージョンがv1.8.0より前だと使用しているAPIが無いためエラーになります。
    yum list installed | grep lz4
    上記のコマンドでインストールされているLz4のバージョンが確認できると思います。
    Horimoto Yasuhiro
    @komainu8

    @masudakz_twitter 指定に間違いはなさそうです。Mroongaの問題のような気がするので、 https://github.com/mroonga/mroonga/issues に登録いただけると嬉しいです。

    まだ、解決策はわかってないのですが、調べたところまで、共有します。

    手元でも再現しました。
    Groongaレベルのテーブル定義を見てみたのですが、うまく行っている方は、以下のようにTokenFilterStopWordが指定されていました。

    table_create terms TABLE_PAT_KEY ShortText --default_tokenizer TokenBigram --normalizer NormalizerNFKC100 --token_filters "TokenFilterStopWord, TokenFilterNFKC100"
    column_create terms is_stop_word COLUMN_SCALAR Int8
    column_create terms term COLUMN_SCALAR ShortText

    オプションを指定した方(うまく行ってない方)は、以下のようにTokenFilterStopWordが指定されていませんでした。

    table_create terms TABLE_PAT_KEY ShortText --default_tokenizer TokenBigram --normalizer NormalizerNFKC100
    column_create terms is_stop_word COLUMN_SCALAR Int8
    column_create terms term COLUMN_SCALAR ShortText

    なので、原因としては、GroongaレベルでTokenFilterStopWordが指定されていないので、意図した結果になっていません。

    あと、今回の問題とは関係ないのですが、NormalizerNFKC100TokenFilterNFKC100は、最新のUnicode 13.0.0 をサポートしている NormalizerNFKC130TokenFilterNFKC130がありますので、そちらを使用したほうが良いかと思います。

    masuda kaz
    @masudakz_twitter
    再現確認ありがとうございます。issueに出します。
    Horimoto Yasuhiro
    @komainu8
    ありがとうございます!お願いします!
    masuda kaz
    @masudakz_twitter
    登録しました。 mroonga/mroonga#399
    Horimoto Yasuhiro
    @komainu8
    ありがとうございます!
    yamazakitatsuya
    @yamazakitatsuya

    @komainu8
    ありがとうございます。lz4は1.7.5でした。

    $  yum list installed | grep lz4
    lz4.x86_64                            1.7.5-2.amzn2.0.1                installed

    systemdも絡んでいるようで lz4だけバージョンを上げるのは難しそうでした。
    10.0.7まで戻すとamazon linux2でもインストールしてmroonga enginが利用できる事はわかりましたので、一旦古いバージョンで対応しようと思います。

    Sutou Kouhei
    @kou
    @systemlancer パッケージインストール後のスクリプトですが、新しいリリースで直したので新規インストールではいい感じになっているはずです。
    ただ、アップデート時はインストール済みの古いスクリプトに入っている壊れたスクリプトが実行されるのでwarning: %post...みたいなのは依然とでると思います。。。
    これがでると処理が途中で止まってしまうんでしたっけ?それともそのまま処理は継続されるんでしたっけ?
    継続されるのならそのままアップデートして大丈夫なはずです。
    ひじー
    @systemlancer
    @kou
    ご対応ありがとうございました!
    明日、4/7(水)にアップデートする予定です。
    うまくいかなかった場合は新規インストールしてみます。
    いずれにせよ、改めて結果報告致します。
    この度は、ご対応本当にありがとうございました!
    ひじー
    @systemlancer

    @kou
    アップデートですが、失敗しました。
    原因は、運用しているMariaDBのバージョンがサポートされていない10.4.17だったから、かもしれません。

    [FAILED] mariadb-10.4-mroonga-11.01-1.el8.x86_64.rpm: No more mirrors to try - All mirrors were already tried without success
    (6-7/9): MariaDB-client-10.4.18-1.el8.x8 11% [====-                                   ] 6.1 MB/s | 5.0 MB     00:06 ETA
    ダウンロード済みのパッケージは、次の正常なトランザクションまでキャッシュに保存されました。
    'dnf clean packages' を実行することでキャッシュパッケージを削除できます。
    エラー: パッケージのダウンロード中にエラーが発生しました:
      Cannot download Packages/mariadb-10.4-mroonga-11.01-1.el8.x86_64.rpm: All mirrors were tried

    なので、新規にサーバ構築して、最新バージョンをインストールしようと思います。

    Sutou Kouhei
    @kou
    わかりました!
    (出ているエラーが https://packages.groonga.org/centos/8/x86_64/Packages/mariadb-10.4-mroonga-11.01-1.el8.x86_64.rpm のダウンロードエラーなのでMariaDBのバージョンは関係ないかもしれません。)
    Sutou Kouhei
    @kou
    @systemlancer すみません、このエラー、MroongaのYUMリポジトリーのメタデータが壊れているからでした。。。直したので少なくともこのエラーは解消したはずです。
    ひじー
    @systemlancer

    @kou
    ご対応ありがとうございます!
    ダウンロードができるようになりました。
    なので、新規サーバ構築は一旦保留にして、サーバをアップデート前の状態に戻して、再度dnf updateを実行してみました。

    しかし、dnf updateを実行したところ、下記のエラーが発生しました。

    ========================================================================================================================
     Package                     Architecture  Version                                          Repository             Size
    ========================================================================================================================
    Upgrading:
     MariaDB-client              x86_64        10.4.18-1.el8                                    mariadb                12 M
     MariaDB-common              x86_64        10.4.18-1.el8                                    mariadb                87 k
     MariaDB-server              x86_64        10.4.18-1.el8                                    mariadb                26 M
     MariaDB-shared              x86_64        10.4.18-1.el8                                    mariadb               115 k
     groonga-libs                x86_64        11.0.1-1.el8                                     groonga-centos        2.3 M
     mariadb-10.4-mroonga        x86_64        11.01-1.el8                                      groonga-centos        266 k
     openssl                     x86_64        1:1.1.1g-15.el8_3                                baseos                707 k
     openssl-libs                x86_64        1:1.1.1g-15.el8_3                                baseos                1.5 M
     qemu-guest-agent            x86_64        15:4.2.0-34.module_el8.3.0+713+8ddc4ca0.4        appstream             232 k
    
    Transaction Summary
    ========================================================================================================================
    ERROR 1126 (HY000) at line 16: Can't open shared library 'ha_mroonga_official.so' (errno: 8, API version for STORAGE ENGINE plugin Mroonga not supported by this version of the server)
    
      Upgrading        : openssl-1:1.1.1g-15.el8_3.x86_64                                                              8/18
      Upgrading        : qemu-guest-agent-15:4.2.0-34.module_el8.3.0+713+8ddc4ca0.4.x86_64                             9/18
      Cleanup          : openssl-1:1.1.1g-12.el8_3.x86_64                                                             10/18
      Running scriptlet: mariadb-10.4-mroonga-10.10-1.el8.x86_64                                                      11/18
    Unit mysqld.service could not be found.
    Failed to start mysqld.service: Unit mysqld.service not found.
    awk: fatal: cannot open file `/var/log/mysqld.log' for reading (No such file or directory)
    Failed to stop mysqld.service: Unit mysqld.service not loaded.
    error: %preun(mariadb-10.4-mroonga-10.10-1.el8.x86_64) scriptlet failed, exit status 5
    
    Error in PREUN scriptlet in rpm package mariadb-10.4-mroonga
      Running scriptlet: MariaDB-server-10.4.17-1.el8.x86_64                                                          12/18
    error: mariadb-10.4-mroonga-10.10-1.el8.x86_64: erase failed

    お忙しいところ恐縮ですが、ご確認いただけると助かります。
    どうぞよろしくお願い致します。

    Sutou Kouhei
    @kou
    @systemlancer 古いMroongaパッケージの削除前にエラーが発生していますね。。。
    rpm -e --nopreun mariadb-10.4-mroongaで古いパッケージの削除前スクリプトが動かなくなるみたいなので、それで削除してから新しいやつを新規インストールしてみてもらえますか?
    ひじー
    @systemlancer

    @kou
    ありがとうございます!
    rpm -e --nopreun mariadb-10.4-mroongaを実行して、dnf updateを実施。
    それから、mariadb-10.4-mroongaをインストールしました。
    以下のエラーが発生しましたが、インストールは成功したようです。

    [root@myserver ~]# dnf install --enablerepo=epel mariadb-10.4-mroonga
    ============================================================================================================================================================
     Package                                     Architecture                  Version                              Repository                             Size
    ============================================================================================================================================================
    Installing:
     mariadb-10.4-mroonga                        x86_64                        11.01-1.el8                          groonga-centos                        266 k
    
    Transaction Summary
    ============================================================================================================================================================
    Install  1 Package
    
    Total download size: 266 k
    Installed size: 561 k
    Is this ok [y/N]: y
    Downloading Packages:
    mariadb-10.4-mroonga-11.01-1.el8.x86_64.rpm                                                                                 1.1 MB/s | 266 kB     00:00
    ------------------------------------------------------------------------------------------------------------------------------------------------------------
    Total                                                                                                                       1.0 MB/s | 266 kB     00:00
    Running transaction check
    Transaction check succeeded.
    Running transaction test
    Transaction test succeeded.
    Running transaction
      Preparing        :                                                                                                                                    1/1
      Installing       : mariadb-10.4-mroonga-11.01-1.el8.x86_64                                                                                            1/1
      Running scriptlet: mariadb-10.4-mroonga-11.01-1.el8.x86_64                                                                                            1/1
    ERROR 1968 (HY000) at line 3: Plugin 'Mroonga' already installed
    Run the following command line to register Mroonga:
      /bin/mysql -u root  < /usr/share/mroonga/install.sql
    
      Verifying        : mariadb-10.4-mroonga-11.01-1.el8.x86_64                                                                                            1/1
    
    Installed:
      mariadb-10.4-mroonga-11.01-1.el8.x86_64
    
    Complete!

    特に問題ないでしょうか?
    どうぞよろしくお願い致します。

    Sutou Kouhei
    @kou
    @systemlancer Mroongaがインストール済みなのはアンインストール時のスクリプトを強制的に動かさないようにしてアンインストールしたためなので、今回に限りこのエラーは問題ないです。
    念のため、systemctl restart mariadbでMariaDBを再起動しておいてください。これで確実に最新のMroongaをロードした状態になるはずです。
    再起動後に今まで通り使えているならこのまま運用して大丈夫です。
    ひじー
    @systemlancer

    @kou
    ありがとうございます!

    結論として、問題解決しました。
    少しだけ手順が必要でしたので、実行した内容を下記に記載致します。

    MariaDBを再起動してアプリケーションから接続したところ、以下のエラーが表示されました。
    unknown storage engine 'mroonga'

    mysqlコマンドで接続して、以下のコマンドでストレージエンジンを確認したところ、Mroongaがインストールされていませんでした。

    SHOW ENGINES;

    そのため、以下のコマンドでMroongaをインストールしました。

    mysql -uroot < /usr/share/mroonga/install.sql

    上記により、ブラウザから正常に接続できるようになりました。
    また、検索機能が今まで通りに使えることを確認できました。

    以上で無事、解決できました。

    この度は、お忙しいところご対応いただき誠にありがとうございました。
    迅速なご回答、本当に助かりました。
    心より感謝申し上げます。
    今後ともよろしくお願いいたします。

    Sutou Kouhei
    @kou
    @systemlancer よかったです!
    たぶん、今後はアップグレード中にrootのパスワードを聞かれると思います。それに答えると自動でmysql -uroot < /usr/share/mroonga/install.sqlとかをやってくれるはずです。
    入力しなかったら最後に↓みたいな↑のログに出ているようなメッセージが出るのでそれをアップグレード後手動で実行すればアップグレードが完了するはずです。
    Run the following command line to ...
    ...
    ひじー
    @systemlancer
    @kou
    今後のアップグレードに関する情報までありがとうございます!
    助かります。
    YONDE927
    @YONDE927

    始めまして 質問をさせてください。
    redmicaのpluginでfull-text-searchを導入しようと以下のURLを参考に
    https://github.com/clear-code/redmine_full_text_search
    Pgroongaなどをインストールしてみましたが、extension createdと正常に動作しているようですが、full-text-searchを動かすと

    Completed 500 Internal Server Error in 15ms (ActiveRecord: 5.8ms)
    
    ActiveRecord::StatementInvalid (PG::UndefinedTable: ERROR:  relation "fts_targe
    t_index_pgroonga" does not exist
    : SELECT pgroonga_command('select',
      ARRAY[
        'table', pgroonga_table_name('fts_targets_index_pgroonga'),

    とpgroonga周りでエラーが発生していました。こういった場合はどこを詳しく見た方が良いかあたりというかコツを教えていただけますでしょうか。

    Sutou Kouhei
    @kou
    relation "fts_target_index_pgroonga" does not existということはそのテーブルがないということなんですが、RAILS_ENV=production bin/rails redmine:plugins:migrateはすべて正常に成功しましたか?
    1 reply
    misou_morikawa
    @Morikawa1980

    Mroonga 10.11リリースに関して、確認させてください。
    https://mroonga.org/ja/blog/2021/01/29/mroonga-10.11.html

    CentOS MySQL 5.6.51、5.7.33、MySQL 8.0.23をサポートしました。
    上記の記載があるのですが、Percona Serverはサポートされるのでしょうか。

    また、依存性に関しても確認させてください。
    Percona-Server-*-56-5.6.51percona-server-56-mroonga-10.11-1.el7.x86_64
    合わせて使用しようとしていますが、
    要求するパッケージは、
    以下のようになるはずではないでしょうか
    Percona-Server-server-56 = 5.6.51-rel91.0.1.el7
    Percona-Server-client-56 = 5.6.51-rel91.0.1.el7

    現状では、Percona-Serverをupdateしようとすると以下のように
    依存性に問題があるように見えます。

    エラー: パッケージ: percona-server-56-mroonga-10.11-1.el7.x86_64 (groonga-centos)
    要求: Percona-Server-client-56 = 5.6.50-rel90.0.1.el7
    エラー: パッケージ: percona-server-56-mroonga-10.11-1.el7.x86_64 (groonga-centos)
    要求: Percona-Server-server-56 = 5.6.50-rel90.0.1.el7

    Sutou Kouhei
    @kou
    Percona Serverもサポートしています。
    Mroonga 10.11をリリースしたときのPercona Serverが5.6.50-...だったのでそのバージョンに依存しています。
    新しいPercona Serverで使いたい場合はもっと新しいMroongaのパッケージを使うか自分で使いたいPercona Serverのバージョン用にMroongaをビルドしてください。
    misou_morikawa
    @Morikawa1980
    返答ありがとうございます。ソースからビルドしてみます。
    Takashi Hashida
    @HashidaTKS
    初めて投稿いたします。Groongaに欲しい機能があり、パッチ提供を考えているのですが、その場合もバグの場合のようにissuesに起票->パッチ提供(プルリクエスト)の流れで大丈夫でしょうか?
    Sutou Kouhei
    @kou
    大丈夫です!
    いきなりプルリクエストでもいいです!
    Takashi Hashida
    @HashidaTKS
    わかりました!ありがとうございます!
    masuda kaz
    @masudakz_twitter

    まだ現象の再現手順がわかってない段階での相談です。

    Mroonga で テキストデータを含むテーブルのカラムに ADD FULLTEXT INDEXする
    SELECT ... MATCH ... AGAINST ... で期待通りの結果が得られる(複数のクエリで確認)
    テーブルに DELETE/INSERT しているうちに、SELECT ... MATCH ... AGAINST ... でhitしてないはずの結果が返ってくるクエリが出始める
    DROP INDEX/ ADD FULLTEXT INDEX すると期待通りの結果が得られる

    こういう現象の調査はどう進めていけばいいでしょうか? どの DELETE どの INSERTがきっかけか手がかりをまだ掴んでいません。
    SELECT ... MATCH ... AGAINST ... でhitしないはずの結果が返ってくるとき、デバッガで中まで追いかけていく?
    Groongaレベルでデータを精査すれば、壊れ方からなにかヒントが得られる?

    テーブル 10万行級、テキスト合計100MB級です。
    Horimoto Yasuhiro
    @komainu8

    ご報告ありがとうございます。
    「hitしてないはずの結果が返ってくる」、「DROP INDEX/ ADD FULLTEXT INDEX すると期待通りの結果が得られる」というところから、インデックスが破損していると思われます。

    Groonga 11.0.0 でデータを大量に追加、削除、更新した際にインデックスが破損することがある問題を修正しているのでそれかもしれません。 問題が発生した環境のMySQL(or MariaDB or PerconaServer)上で、 SHOW GLOBAL VARIABLES LIKE 'mroonga_libgroonga_version'; を実行し、libgroongaのバージョンを確認してみてください。11.0.0よりまえのバージョンならlibgroongaを更新いただくことで現象が起こらなくなる可能性があります。

    11.0.0以降を使っている場合は、まずは、再現性があるかどうかを確認いただきたいです。再現性があるなら、次は、再現する手順を確立したいので、「この手順で再現する」というのを突き止めて教えていただけると、大変助かります。
    masuda kaz
    @masudakz_twitter

    すばやい。ありがとうございます。

    > SHOW GLOBAL VARIABLES LIKE 'mroonga_libgroonga_version'\G
    *************************** 1. row ***************************
    Variable_name: mroonga_libgroonga_version
            Value: 9.1.2

    まずは環境からですね。

    Horimoto Yasuhiro
    @komainu8
    早速ありがとうございます!9.1.2なので、libgroongaのバージョンを上げれば解決するかもしれません。libgroongaのバージョンを上げても解決しない場合は、未知の問題なので、その場合は、「再現性があるかどうか」と、再現性があるなら、「この手順で再現する」というのを教えていただきたいです。
    masuda kaz
    @masudakz_twitter
    index_column_diff というのもあるんですね。心強い。https://groonga.org/ja/docs/reference/commands/index_column_diff.html
    途方にくれてましたが、光りが見えた。
    Horimoto Yasuhiro
    @komainu8

    よかったです!

    そうですね。index_column_diffで事前にインデックスのチェックができます。
    ただ、以下のような注意点があるので、使うときには気をつけてください。

    • 対象のインデックスのサイズによっては、多くのメモリーを使ったり、実行時間が長くなったりします。(消費メモリー量や実行時間がどのくらいかかるかは、データによるので、もし使うなら一度テスト用の環境等でどのくらいの時間、メモリーを消費するのかを確認するのをおすすめします。)
    • index_column_diffを途中で停止した場合は、対象のインデックスが壊れることがあります。
    • index_column_diff実行時にデータの更新が発生すると正しい結果が得られなくなるので、実行中はデータ更新を止める必要があります。
    • index_column_diffの引数のtableindex_columnはGroongaレベルでのテーブルとインデックスカラムなので、Mroongaを使っている場合は、mroonga_comandを使って対象のテーブルとインデックスカラムの名前を特定する必要があります。
    Horimoto Yasuhiro
    @komainu8

    Groonga 11.0.3をリリースしたので、今回のリリースの変更点を自慢する会を実施します。
    Youtube Live で以下の日時に配信しますので、ぜひ視聴してみてください!
    Groongaだけでなく、Mroonga 11.03の変更点も自慢します!

    日時: 2021/6/14(月) 14:00 - 15:00(予定)
    URL: https://youtu.be/0q2rbVvEzPs

    Horimoto Yasuhiro
    @komainu8
    Groonga 11.0.3のリリース自慢会は本日14:00から以下のURLで実施します! 興味のある方はぜひ視聴してみてください。
    URL: https://youtu.be/0q2rbVvEzPs