Where communities thrive


  • Join over 1.5M+ people
  • Join over 100K+ communities
  • Free without limits
  • Create your own community
People
Activity
    Bables55
    @Bables55
    @kenhys_twitter ありがとうございました。
    たかさん
    @tigersun2000_twitter

    percona-server-57に新しいバージョンが出た為、yum updateが動作しなくなっていました。
    ご確認お願いします。

    エラー: パッケージ: percona-server-57-mroonga-9.09-1.el7.x86_64 (groonga-centos)
                 要求: Percona-Server-server-57 = 5.7.27-30.1.el7
                削除中: Percona-Server-server-57-5.7.27-30.1.el7.x86_64 (@percona-release-x86_64)
                    Percona-Server-server-57 = 5.7.27-30.1.el7

    Issueに登録しておきました。
    mroonga/mroonga#294

    Bables55
    @Bables55
    /var/lib/mysqlを覗いたところ、データベース名.mrn.数字7桁、及びデータベース名.mrn.数字7桁.cというファイルが大量にあります。サイズはバラバラです。これは正常な状態でしょうか?
    Horimoto Yasuhiro
    @komainu8
    はい。正常です。Mroongaはデータベースごとに、「データベース名.mrn.数字7桁」や「データベース名.mrn.数字7桁.c」、「データベース名.mrn.数字7桁.c.xxx」(xxxは数字が入ります。)といったファイルを作成します。
    これはMroongaのインデックスを保持しているファイルになります。
    Bables55
    @Bables55
    わかりました。ありがとうございます。
    Bables55
    @Bables55
    あとMariaDB 10.2.30がリリースされましたので、こちらへの対応をお願いします。
    Horimoto Yasuhiro
    @komainu8
    わかりました。パッケージを更新しますので少々お待ちください。
    Horimoto Yasuhiro
    @komainu8
    @Bables55 MariaDB 10.2.30に対応して、パッケージを更新しました。
    ふが
    @fugafigs_twitter
    先日、mroongaを使いはじめたものです。
    質問: mroongaから、スコア関数をtfidfベースに変更する方法がありましたら教えてください。
    groonga直では、match_columnsで指定できると認識してるのですが、mroonga 経由での方法が自分が探した限り分かりませんでした。
    Horimoto Yasuhiro
    @komainu8

    @fugafigs_twitter

    標準の方法ではスコア関数を指定できなかったはずなので、少し複雑な方法をとる必要があります。
    Mroongaには、mroonga_commandというGroongaのコマンドを呼び出す機能があるのでそれを使うことでスコア関数を指定できます。

    具体的には、このGitterの上の方に使用例が書いてあるので、そちらを参照すると良いと思います。

    https://gitter.im/groonga/ja?at=58fda8ed587a245e2440ffcd
    ↑のURLでその場所に飛べます。

    ↑のところにも書いてありますが、この方法を使うと、応答がちょっと特殊な形になるので結果を少し加工する必要があるかもしれません。

    ふが
    @fugafigs_twitter
    早速の回答ありがとうございました!
    YUKI "Piro" Hiroshi
    @piroor
    今たまたま気付いたんですが、 https://groonga.org/ にアクセスすると証明書のエラーで表示できませんでした。詳細を見ると「ウェブサイトは証明書で同一性を証明します。groonga.org は無効な証明書を使用しているため、Firefox はこのサイトを信頼しません。この証明書は次のドメイン名にのみ有効です: www.github.com, .github.io, .githubusercontent.com, *.github.com, github.com, github.io, githubusercontent.com」と出ています。これは意図されない結果でしょうか?
    Sutou Kouhei
    @kou
    ちょうど夕方、DNSを更新してもらったので数日中に使えるようになるはずです。
    YUKI "Piro" Hiroshi
    @piroor
    一時的な状態なんですね。了解です。
    Sutou Kouhei
    @kou
    一時的というかこれまで使えなかったけど近い将来使えるようになるはずという感じです。
    YUKI "Piro" Hiroshi
    @piroor
    oh...
    Sutou Kouhei
    @kou
    そもそもGitHub PagesでカスタムドメインでHTTPSを使えるようになったのが1.5年くらい前からなんですよ。
    https://github.blog/2018-05-01-github-pages-custom-domains-https/
    Sutou Kouhei
    @kou
    https://groonga.org/ でいけるようになりました。
    YUKI "Piro" Hiroshi
    @piroor
    🎉
    ふが
    @fugafigs_twitter

    先日、スコア関数の指定について質問したものですが、レスポンスが特殊になるのが取り回しづらかったので、groonga側のソースを変更して対応しました。

    +++ groonga-9.1.1_modified/lib/ii.c    2020-01-15 06:16:46.195563384 +0000
    @@ -9315,6 +9315,12 @@
       grn_bool only_skip_token;
     } grn_ii_select_data;
    
    +double
    +scorer_tf_idf(grn_ctx *ctx, grn_scorer_matched_record *record);
    +
    +double
    +scorer_tf_at_most(grn_ctx *ctx, grn_scorer_matched_record *record);
    +
     static void
     grn_ii_select_data_init(grn_ctx *ctx,
                             grn_ii_select_data *data,
    @@ -9352,9 +9358,11 @@
         }
       }
    
    -  if (optarg->scorer) {
    -    grn_proc *scorer = (grn_proc *)(optarg->scorer);
    -    data->score_func = scorer->callbacks.scorer.score;
    +  //if (optarg->scorer) {
    +    //grn_proc *scorer = (grn_proc *)(optarg->scorer);
    +    //data->score_func = scorer->callbacks.scorer.score;
    +    //data->score_func = scorer_tf_at_most;
    +    data->score_func = scorer_tf_idf;
         data->record.table = grn_ctx_at(ctx, data->result_set->obj.header.domain);
         data->record.lexicon = data->lexicon;
         data->record.id = GRN_ID_NIL;
    @@ -9367,9 +9375,9 @@
         data->record.n_candidates = 0;
         data->record.n_tokens = 0;
         data->record.weight = 0;
    -    data->record.args_expr = optarg->scorer_args_expr;
    -    data->record.args_expr_offset = optarg->scorer_args_expr_offset;
    -  }
    +    //data->record.args_expr = optarg->scorer_args_expr;
    +    //data->record.args_expr_offset = optarg->scorer_args_expr_offset;
    +  //}
     }

    ↑はかなり無理矢理なやり方な気がするので、mroonga側で grn_table_select する際にスコア関数を指定できるように引数を指定できると色々取り回しがよくなると思っています。grn_exprのをどのように構成すればよいかわからなかったので、なにかこれを見れば良いというものでもありましたら教えていただけるとありがたいです。(中間コードのインタープリタ的な部分を読もうとしましたが挫折しました。)

    Sutou Kouhei
    @kou
    これでいけないですかねぇ。
    SELECT *
      FROM XXX
      WHERE MATCH(COLUMN) AGAINST ('*SS query("scorer_tf_idf(COLUMN)", "KEYWORD"' IN BOOLEAN MODE);
    *SSプラグマ https://mroonga.org/ja/docs/reference/full_text_search/boolean_mode.html#ss を使うとスクリプト構文 https://groonga.org/ja/docs/reference/grn_expr/script_syntax.html というものが使えるようになります。
    これを使うとGroongaの関数を指定できます。
    Groongaの関数にはquery https://groonga.org/ja/docs/reference/functions/query.html というやつがあって、これにはGroongaのselect https://groonga.org/ja/docs/reference/commands/select.htmlmatch_columns相当のものを指定できます。
    ふが
    @fugafigs_twitter
    おお!、これが使えるなら、最高ですね。早速、やってみます。
    Sutou Kouhei
    @kou
    match_columnsではスコアラーを指定できる https://groonga.org/ja/docs/reference/scorer.html#usage のでMATCH AGAINSTでスコアラーを指定できます。
    難点はエスケープがすごく大変なことです。
    MySQLの文字列の中にGroongaの文字列を埋め込むので、"とか'とかが入ったクエリーの場合はMySQLのエスケープとGroongaのエスケープを両方考慮してエスケープする必要があります。
    ふが
    @fugafigs_twitter
    なるほど、たしかに大変そうです。プログラムから利用する際には留意します。
    いったん急ぎの用事が入ってしまったので、明日までに試してみて、また何かあれば、質問させてください。ご教授ありがとうございました。 @kou
    ふが
    @fugafigs_twitter
    先ほどやってみたところ、無事scorerが呼び出せました。助かりました、ありがとうございます。*SS かなり便利でいいですね。
    ふが
    @fugafigs_twitter

    度々すいません。MecabのTokenizerまわりでトラブルが発生したため、なにかご存知の方はお力かしてください。

    下記のようなテーブルを作り

    CREATE TABLE `page_cache` (
      `url` varchar(512) DEFAULT NULL,
      `title` text,
      `description` text,
      `keywords` text,
      `firstview` text,
      `body` mediumtext,
      FULLTEXT KEY `title` (`title`) COMMENT 'tokenizer "TokenMecab" normalizer "NormalizerAuto"',
      FULLTEXT KEY `description` (`description`) COMMENT 'tokenizer "TokenMecab" normalizer "NormalizerAuto"',
      FULLTEXT KEY `keywords` (`keywords`) COMMENT 'tokenizer "TokenMecab" normalizer "NormalizerAuto"',
      FULLTEXT KEY `body` (`body`) COMMENT 'tokenizer "TokenMecab" normalizer "NormalizerAuto"'
    ) ENGINE=Mroonga DEFAULT CHARSET=utf8mb4

    2890件INSERTを終えたところで下記のエラーログがループして1件も進まなくなりました。

    2020-01-21 04:47:06.124404|w|3712|7408e700: [token_next] ignore an empty token: <TokenMecab>: <     >

    INSERTしている内容は、Webサイトをクロールしたデータ(タグは含まず)です。
    また、いったんInnoDBでINSERT後、alter table page_cache engine=Mroonga;でも再現します。

    環境としては、最新のgroonga=9.1.1, mronnga=9.11で、libgroonga.so.0.0.0, ha_mroonga.so.0.0.0は、少し自分でいじりましたが、インストール済みの状態に戻しても再現しました。

    Horimoto Yasuhiro
    @komainu8

    インデックスを作成するためにINSERTされたデータをトークナイズするところで、whileのループを抜けられなくなっているような気がします。

    バグのような気もするので、 https://github.com/mroonga/mroonga/issues にIssueを立ててもらうことはできますか?
    その際に、問題が再現するクエリー(INSERT)も合わせて記載いただけると、こちらで再現させて調査できるので助かります。

    ふが
    @fugafigs_twitter
    こちらに、mroonga/mroonga#300
    issueを記載しました。ご確認いただけると助かります。
    Horimoto Yasuhiro
    @komainu8
    ありがとうございます!
    Lilith-0101
    @Lilith-0101
    こんにちは。mroongaのプラグインをインストールしようとしたときにパスワードを聞かれました。これはMySQLのパスワードですか。初歩的な問題で申し訳ございませんが、宜しくお願い致します。具体的なコマンドはこちらです。「yum install -y --enablerepo=epel mysql57-community-mroonga」
    Horimoto Yasuhiro
    @komainu8

    「yum install -y --enablerepo=epel mysql57-community-mroonga」の実行中にパスワードを聞かれるのでしょうか?
    それとも、上のコマンド実行後、mysql -uroot -pのようにMySQLに接続しようとした時でしょうか?

    Mroongaはパスワードを聞いたりしないと思うので、たぶんMySQLのパスワードだと思いますが、パスワードを聞かれた付近のシェルの表示を見せていただければ何かわかるかもしれません。

    Sutou Kouhei
    @kou
    MySQLのrootのパスワードです。
    インストール中にすでにMroongaがインストールされているか、されているならバージョンはいくつかなどを確認して、必要ならインストール中にMySQLを再起動するために聞いています。
    https://github.com/mroonga/mroonga/blob/master/packages/mysql-server-5.7-mroonga/yum/mysql57-community-mroonga.spec.in#L132
    Lilith-0101
    @Lilith-0101
    ご回答ありがとうございます。とても勉強になりました。
    先にMySQL(5.7)をインストールしパスワードを設定しました。その後Mroongaエンジンのプラグインをインストールしました。
    pinpikokun
    @pinpikokun_twitter

    お世話になっております。
    mariadb-10.1.41-with-mroonga-9.12-winx64.zipを利用してSQLを実行するとMariaDB自体が落ちるという事象が発生しております。
    2017年7月13日のK Torimotoさんの事象に似ていると思います。

    エラーメッセージ
    ・groonga.log:何も出力されていません
    ・mysql.err:以下のエラーが出ています

    200214 21:27:09 [ERROR] mysqld got exception 0xc0000005 ;
    This could be because you hit a bug. It is also possible that this binary
    or one of the libraries it was linked against is corrupt, improperly built,
    or misconfigured. This error can also be caused by malfunctioning hardware.
    
    To report this bug, see https://mariadb.com/kb/en/reporting-bugs
    
    We will try our best to scrape up some info that will hopefully help
    diagnose the problem, but since we have already crashed, 
    something is definitely wrong and this may fail.
    
    Server version: 10.1.44-MariaDB
    key_buffer_size=1048576
    read_buffer_size=6291456
    max_used_connections=2
    max_threads=1001
    thread_count=1
    It is possible that mysqld could use up to 
    key_buffer_size + (read_buffer_size + sort_buffer_size)*max_threads = 1392547 K  bytes of memory
    Hope that's ok; if not, decrease some variables in the equation.
    pinpikokun
    @pinpikokun_twitter
    続きます
    Thread pointer: 0xdd3c21df58
    Attempting backtrace. You can use the following information to find out
    where mysqld died. If you see no messages after this, something went
    terribly wrong...
    libgroonga.dll!grn_table_sort()[db.c:14092]
    ha_mroonga.dll!ha_mroonga::generic_ft_init_ext()[ha_mroonga.cpp:9372]
    ha_mroonga.dll!ha_mroonga::storage_ft_init_ext()[ha_mroonga.cpp:9427]
    mysqld.exe!Item_func_match::init_search()[item_func.cc:6145]
    mysqld.exe!init_ftfuncs()[sql_base.cc:9273]
    mysqld.exe!JOIN::optimize_inner()[sql_select.cc:1849]
    mysqld.exe!JOIN::optimize()[sql_select.cc:1059]
    mysqld.exe!mysql_select()[sql_select.cc:3487]
    mysqld.exe!handle_select()[sql_select.cc:377]
    mysqld.exe!execute_sqlcom_select()[sql_parse.cc:5691]
    mysqld.exe!mysql_execute_command()[sql_parse.cc:3038]
    mysqld.exe!mysql_parse()[sql_parse.cc:7214]
    mysqld.exe!dispatch_command()[sql_parse.cc:1501]
    mysqld.exe!do_command()[sql_parse.cc:1131]
    mysqld.exe!threadpool_process_request()[threadpool_common.cc:272]
    mysqld.exe!io_completion_callback()[threadpool_win.cc:568]
    KERNEL32.DLL!VirtualUnlock()
    ntdll.dll!RtlGetActiveActivationContext()
    ntdll.dll!RtlFreeUnicodeString()
    KERNEL32.DLL!BaseThreadInitThunk()
    ntdll.dll!RtlUserThreadStart()
    続きます
    Trying to get some variables.
    Some pointers may be invalid and cause the dump to abort.
    Query (0xdd3c672ff0): SELECT * FROM customer WHERE customer.company_id IN (SELECT company_id FROM company_search cs WHERE MATCH(cs.company_name) AGAINST('*D+ "a"' IN BOOLEAN MODE)) ORDER BY customer_id  LIMIT 101
    Connection ID (thread ID): 39
    Status: NOT_KILLED
    
    Optimizer switch: index_merge=on,index_merge_union=on,index_merge_sort_union=on,index_merge_intersection=on,index_merge_sort_intersection=off,engine_condition_pushdown=off,index_condition_pushdown=on,derived_merge=on,derived_with_keys=on,firstmatch=on,loosescan=on,materialization=on,in_to_exists=on,semijoin=on,partial_match_rowid_merge=on,partial_match_table_scan=on,subquery_cache=on,mrr=off,mrr_cost_based=off,mrr_sort_keys=off,outer_join_with_cache=on,semijoin_with_cache=on,join_cache_incremental=on,join_cache_hashed=on,join_cache_bka=on,optimize_join_buffer_size=off,table_elimination=on,extended_keys=on,exists_to_in=on,orderby_uses_equalities=off
    
    The manual page at http://dev.mysql.com/doc/mysql/en/crashing.html contains
    information that should help you find out what is causing the crash.
    2020-02-14 21:27:56 1884 [Note] Using unique option prefix 'myisam_recover' is error-prone and can break in the future. Please use the full name 'myisam-recover-options' instead.
    2020-02-14 21:27:57 75c InnoDB: Warning: Using innodb_additional_mem_pool_size is DEPRECATED. This option may be removed in future releases, together with the option innodb_use_sys_malloc and with the InnoDB's internal memory allocator.
    2020-02-14 21:27:57 1884 [Note] InnoDB: Using mutexes to ref count buffer pool pages
    2020-02-14 21:27:57 1884 [Note] InnoDB: The InnoDB memory heap is disabled
    2020-02-14 21:27:57 1884 [Note] InnoDB: Mutexes and rw_locks use Windows interlocked functions
    2020-02-14 21:27:57 1884 [Note] InnoDB: _mm_lfence() and _mm_sfence() are used for memory barrier
    2020-02-14 21:27:57 1884 [Note] InnoDB: Compressed tables use zlib 1.2.11
    2020-02-14 21:27:57 1884 [Note] InnoDB: Using generic crc32 instructions
    2020-02-14 21:27:57 1884 [Note] InnoDB: Initializing buffer pool, size = 1.0G
    2020-02-14 21:27:57 1884 [Note] InnoDB: Completed initialization of buffer pool
    2020-02-14 21:27:57 1884 [Note] InnoDB: Highest supported file format is Barracuda.
    2020-02-14 21:27:58 1884 [Note] InnoDB: The log sequence number 1616707 in ibdata file do not match the log sequence number 27655862 in the ib_logfiles!
    2020-02-14 21:28:08 1884 [Note] InnoDB: Restoring possible half-written data pages from the doublewrite buffer...
    2020-02-14 21:28:22 1884 [Note] InnoDB: Read redo log up to LSN=27656192

    ■SQL
    ・少し加工していますが、ほぼ以下のままのSQLです
    SELECT * FROM customer WHERE customer.company_id IN (SELECT company_id FROM company_search cs WHERE MATCH(cs.company_name) AGAINST('*D+ "a"' IN BOOLEAN MODE)) ORDER BY customer_id LIMIT 101

    ■確認した事
    ・結果が0件でも返ってきてもDBが落ちます
    ORDER BYを除くとDBは落ちずに結果が返ります
    LIMITを除くとDBは落ちずに結果が返ります
    LEFT JOINを追加するとDBは落ちずに結果が返ります

    ■訂正
    上記でmariadb-10.1.41-with-mroonga-9.12-winx64.zipとしていましたが実際は以下を使用しています

    Horimoto Yasuhiro
    @komainu8

    Mroongaの問題かもしれないので、 https://github.com/mroonga/mroonga/issues にIsuueを立ててもらえますでしょうか?

    また、手元で再現するか試してみたいのですが、再現用のデータを提供いただくことはできますでしょうか?

    pinpikokun
    @pinpikokun_twitter
    @komainu8 issue作りました。宜しくお願いします。mroonga/mroonga#303
    Horimoto Yasuhiro
    @komainu8
    ありがとうございます!確認します。