Where communities thrive


  • Join over 1.5M+ people
  • Join over 100K+ communities
  • Free without limits
  • Create your own community
People
Activity
    paichi81
    @paichi81
    なるほど。ActiveRecordでつい t.string としがちなので、postgres使うときは気を付けてみます。
    Fukazawa Tsuyoshi
    @fukaz55_gitlab
    はじめまして。
    Ubuntu16.04にMroongaをaptでインストールしようとしているのですが、mysql-server-mroongaが要求しているMySQLのバージョン(5.7.31)と、今のMySQLのバージョン(5.7.32)が一致していないため、インストールができない状態になっています。
    今後、Ubuntu16.04でMySQL5.7.32に対応する予定はありますか?
    以下のパッケージには満たせない依存関係があります:
     mysql-server-mroonga : 依存: mysql-server-5.7-mroonga (= 10.07-1.ubuntu16.04.1) しかし、インストールされようとしていません
                            依存: mysql-server (= 5.7.31-0ubuntu0.16.04.1)
    E: 問題を解決することができません。壊れた変更禁止パッケージがあります。
    Horimoto Yasuhiro
    @komainu8
    ご報告ありがとうございます。今週末にMroongaをリリース予定なので、その際に対応します。少々お待ちください。
    Fukazawa Tsuyoshi
    @fukaz55_gitlab
    了解しました。ありがとうございます!
    Fukazawa Tsuyoshi
    @fukaz55_gitlab
    引き続き相談なのですが、
    Ubuntu16.04のMariaDB(10.0.38)+Mroonga(9.05, libgroonga 9.1.0)の環境で、ストレージモードのMroongaのテーブルへINSERT/UPDATEを行った際に「[table][add] failed to add: #<key (nil) table:#<no_key mroonga_operations>>」というエラーが時折発生しています。これはどのような状態なのでしょうか?
    対象のテーブルやインデックスを再作成しても発生します。
    なおこのエラーが発生するDBはMySQLサーバ(MariaDBではなく)のスレーブとして運用しているので、それの問題である可能性が高いのではとは思っています(MySQL+Mroongaがインストールできるようになったら移行する予定です)。
    Sutou Kouhei
    @kou
    他にでているメッセージはありませんか?
    その処理はMroongaの操作ログを記録しておいてクラッシュしたときにできるだけ復活できるようにするためのものです。
    その処理が失敗するとは考えにくいです。
    なにか別の要因が引き金になって失敗しているとかな気はします。
    Sutou Kouhei
    @kou
    この問題とは関係ないですが、その操作ログを記録するためのディスクスペースが大きくなっていく問題があったのですが、Groonga 10.0.6で改善しているのでMroongaはGroonga10.0.6以降と一緒に使ったほうがよいです。
    mroonga/mroonga#327
    Fukazawa Tsuyoshi
    @fukaz55_gitlab
    /var/lib/mysql/groonga.log
    2020-11-25 03:02:20.951968|e|3013|237ff700: [table][add] failed to add: #<key (nil) table:#<no_key mroonga_operations>>
    2020-11-25 03:02:20.959620|e|3013|237ff700: /usr/lib/x86_64-linux-gnu/libgroonga.so.0(grn_table_add+0x10f0) [0x7fa42a46d010]
    2020-11-25 03:02:20.959645|e|3013|237ff700: /usr/lib/mysql/plugin/ha_mroonga.so(_ZN3mrn10Operations5startEPKcS2_m+0x3d) [0x7fa4449ddb8d]
    2020-11-25 03:02:20.959650|e|3013|237ff700: /usr/lib/mysql/plugin/ha_mroonga.so(_ZN3mrn9OperationC2EPNS_10OperationsEPKcS4_m+0x18) [0x7fa4449de8d8]
    2020-11-25 03:02:20.959654|e|3013|237ff700: /usr/lib/mysql/plugin/ha_mroonga.so(_ZN10ha_mroonga18storage_update_rowEPKhS1_+0xa1) [0x7fa4449cb181]
    2020-11-25 03:02:20.959658|e|3013|237ff700: /usr/sbin/mysqld(_ZN7handler13ha_update_rowEPKhPh+0x446) [0x753536]
    2020-11-25 03:02:20.959662|e|3013|237ff700: /usr/sbin/mysqld(_Z12mysql_updateP3THDP10TABLE_LISTR4ListI4ItemES6_PS4_jP8st_ordery15enum_duplicatesbPySB_+0x1411) [0x669fd1]
    2020-11-25 03:02:20.959666|e|3013|237ff700: /usr/sbin/mysqld(_Z21mysql_execute_commandP3THD+0x22c5) [0x5c8f45]
    2020-11-25 03:02:20.959670|e|3013|237ff700: /usr/sbin/mysqld(_Z11mysql_parseP3THDPcjP12Parser_state+0x1ca) [0x5ce06a]
    2020-11-25 03:02:20.959673|e|3013|237ff700: /usr/sbin/mysqld(_ZN15Query_log_event14do_apply_eventEP14rpl_group_infoPKcj+0x1043) [0x819a73]
    2020-11-25 03:02:20.959677|e|3013|237ff700: /usr/sbin/mysqld(_Z26apply_event_and_update_posP9Log_eventP3THDP14rpl_group_infoP19rpl_parallel_thread+0x18d) [0x54d38d]
    2020-11-25 03:02:20.959681|e|3013|237ff700: /usr/sbin/mysqld(handle_slave_sql+0x1844) [0x54f504]
    2020-11-25 03:02:20.959685|e|3013|237ff700: /lib/x86_64-linux-gnu/libpthread.so.0(+0x76ba) [0x7fa84b8b16ba]
    2020-11-25 03:02:20.959689|e|3013|237ff700: /lib/x86_64-linux-gnu/libc.so.6(clone+0x6d) [0x7fa84ad5841d]
    Groongaのバージョンについては了解しました。ありがとうございます!
    Sutou Kouhei
    @kou
    その前にはなにかないですか?
    ないとするとどうして失敗するのかわからないですね。。。
    Fukazawa Tsuyoshi
    @fukaz55_gitlab
    ないです。mroonga_log_levelをNOTICEにしているのですが、INFOやDEBUGに下げてみた方がいいでしょうか?
    Sutou Kouhei
    @kou
    いえ、NOTICEで出ないなら重要な情報は出ないはずです。
    最新のMroonga・Groongaにしても再現するようなら https://github.com/mroonga/mroonga/issues/new に再現手順をまとめてもらえますか?
    Fukazawa Tsuyoshi
    @fukaz55_gitlab
    どのような状態の時に発生するのかはこちらも判っていませんが、再現する条件が判ったら改めて報告したいと思います。ありがとうございました!
    Sutou Kouhei
    @kou
    ありがとうございます!
    Sangwhan "fish" Moon
    @cynthia
    初めまして。Ubuntu 20.04環境で、PPAからmariadb-mroongaとgroonga-mecabをインストールしてTokenMecabがカスタム辞書を使うのまで確認しましたが、システムにカスタムとgroonga-mecabから連れ込んだlibmecab.soが二つあります。この場合、実際dlopenされたlibmecabの確認をする方法とかありますか?(多分、gdbから確認出来ると思いますがgroongaコマンドがあったら助かります。)
    カスタムが必要な理由は韓国語対応のためです。
    Sutou Kouhei
    @kou
    groonga-mecabってどれのことですか?
    groonga-tokenizer-mecabのことですか?
    これはMeCabを使うGroongaのプラグインなのでMeCab本体ではないです。
    Groongaから読み込んだlibmecab.soを確認するコマンドはありません。
    ls /proc/${GROONGA_PID}/map_files | grep libmecabとかするとわかると思います。
    Sangwhan "fish" Moon
    @cynthia
    はい、groonga-tokenizer-mecabです。なるほど、procから確認が可能ですね。やってみます。ありがとうございます!
    Sutou Kouhei
    @kou
    groonga-tokenizer-mecabのことならMeCabはシステムに1つしかないはずなので確認しなくて大丈夫だと思います。
    もしかして、MeCab本体が2つあるではなくてMeCabの設定が2つあるということを言っていますか?
    Sangwhan "fish" Moon
    @cynthia
    Mecabの本体が二つあります。groonga-tokenizer-mecabからdependencyでインストールされたの物とカスタムが二つあります。
    root@mariadb:~# find /usr -name libmecab*
    /usr/share/doc/libmecab2
    /usr/local/lib/libmecab.so.2
    /usr/local/lib/libmecab.a
    /usr/local/lib/libmecab.so.2.0.0
    /usr/local/lib/libmecab.la
    /usr/local/lib/libmecab.so
    /usr/lib/x86_64-linux-gnu/libmecab.so.2
    /usr/lib/x86_64-linux-gnu/libmecab.so.2.0.0
    かなり良くない仕組みですが、まずはmecab-koが使えるか確認したかったのでこんな事になりました。
    Sutou Kouhei
    @kou
    なるほど!
    Sangwhan "fish" Moon
    @cynthia
    なぜかは不思議ですが、/usr/localの方(mecab-ko)を使ってる事が確認できました。ありがとうございます。
    Sutou Kouhei
    @kou
    /etc/ld.so.conf.d/libc.conf/usr/local/libと書いているからだと思います。
    Sangwhan "fish" Moon
    @cynthia
    はい、そうです。
    Sangwhan "fish" Moon
    @cynthia

    引き続き質問してすみません。何となく動く事にはなりましたが、ちょっと理解出来ない事があって又質問です。TokenMecabを使ってるdataテーブルがあって、下記のSQLを投げました。
    SELECT *, MATCH(name) AGAINST('johndoe' IN NATURAL LANGUAGE MODE) AS score FROM data WHERE MATCH(name) AGAINST('johndoe' IN NATURAL LANGUAGE MODE) ORDER BY score DESC;

    (説明のため、英語単語になっていますが、実際のqueryのjohndoeは韓国語の単語です。)

    johndoeの場合、Mecabから出るtokenize済みの結果はjohnとdoe二つのtokenになります。私の理解は、(例えばinverted indexとかの手法であれば)indexの方にはjohnとdoeが区別されてjohnがあるの文r_john、doeがある文r_doeの結びr_john \cup r_doeが結果ですが実際の結果はjohndoeが入ってる結果になります。多分、使い方が問題だと思いますが、r_john \cup r_doeの結果を取る方法を教えていただくと助かります。

    背景は、韓国語の特性ですが、日本語と違って同じ文を書く時、空白を使うケースと使わないケースがあります。それで、検索queryから見ると"john doe"と"johndoe"は基本的には同じです。(原則は使うのが標準ですが、正しく書ける人が誰もいないので…)

    Sutou Kouhei
    @kou
    IN NATURAL LANGUAGE MODEIN BOOLEAN MODEにしてください。
    クエリーの先頭に*D+を入れて'*D+ johndoe'としてください。
    あぁ、ORしたいんですか。
    Sutou Kouhei
    @kou
    フレーズ検索というやつをできなくしてしまうと動くと思いますが、完全にフレーズ検索なしにして大丈夫なのかという気がします。
    https://github.com/mroonga/mroonga/blob/master/mysql-test/mroonga/storage/create/table/index/flags/t/comment.test#L31 のようにflagsというのを指定するんですが、"WITH_POSITION|WITH_WEIGHT"ではなく""にしてください。
    Sangwhan "fish" Moon
    @cynthia
    ありがとうございます。フレーズなしはQueryのオプションからはできないですか?
    Sutou Kouhei
    @kou
    できないです。フレーズ検索も必要そうですか?
    Sangwhan "fish" Moon
    @cynthia
    多分、いらないと思いますが検査結果を見てから判断出来ると思います。設定入れて確認してみます。
    Sangwhan "fish" Moon
    @cynthia
    こんな感じですか?
    ALTER TABLE product ADD FULLTEXT INDEX idx_name_fulltext_mecab (name) COMMENT 'tokenizer "TokenMecab" flags ""'
    結果は同じです。
    BOOLEANにして、*D+入れても同じですね。
    Sutou Kouhei
    @kou
    select mroonga_command('dump --dump_records no')はどうなりますか?
    Sangwhan "fish" Moon
    @cynthia
    なぜかは分かりませんが、問題のテーブルの内容が結果に入ってないですね…
    Sutou Kouhei
    @kou
    show create table productはどうなりますか?
    Sangwhan "fish" Moon
    @cynthia
    昨日誰かがinnodbに変換しました!😱 申し訳ありません。直してから戻ります。
    解決できました。ありがとうございます!