[groonga-dev,02738] Re: Mroonga スコアリングについて

Back to archive index

Satoshi Mitani samit****@yahoo*****
2014年 9月 1日 (月) 21:40:57 JST


お世話になっております。三谷です。

須藤さん、森さん、確認ありがとうございます!
バグということで了解致しました。

> 森と申します。
> 
> すみません。これはプログラムの方がバグっています。
> わざわざIDF値を計算した挙げ句にトークンIDの方でソートしていました。
> かれこれ5年間も無駄なことに皆さんのCPU資源を使っていたかと思うと
> 申し訳ない気持ちでいっぱいです。
> 
> ご指摘いただいた三谷さんありがとうございます!
> 
> 須藤さんもパッチありがとうございます。
> そのままpushしていただけると幸いです。
> 
> 
> 
> 2014-09-01 19:35 GMT+09:00 Kouhei Sutou <kou****@clear*****>:
> 
> > 須藤です。
> >
> > In <64A69****@yjwex*****>
> >   "[groonga-dev,02731] Mroonga スコアリングについて" on Mon, 1 Sep 2014 04:22:10
> > +0000,
> >   Satoshi Mitani <samit****@yahoo*****> wrote:
> >
> > > Mronnga を検証しておりまして、ドキュメントに記載されている内容と異なる挙動がありました。
> >
> > 報告ありがとうございます!
> >
> > > http://mroonga.org/ja/docs/reference/full_text_search/scoring.html
> > > に記載されている、「4.重みが大きい上位N個のトークンを取り出す」のステップで、「明日」だけが残るという認識なのですが、
> > > 実際は、「天気」も対象になっているようです。
> >
> > 次のSQLで確認しました!
> > 具体的なSQLも提示してもらえたので再現SQLを作りやすかったです。
> > ありがとうございます。
> >
> > --
> > SET GLOBAL mroonga_default_parser = "TokenMecab";
> >
> > DROP TABLE IF EXISTS groonga_test2;
> >
> > CREATE TABLE groonga_test2 (
> >   id int(11) NOT NULL DEFAULT '0',
> >   keywords varchar(64) DEFAULT NULL,
> >   PRIMARY KEY (id),
> >   FULLTEXT KEY keywords (keywords)
> > ) ENGINE=Mroonga DEFAULT CHARSET=utf8 COMMENT 'engine "InnoDB"';
> >
> > INSERT INTO groonga_test2 VALUES(1, "明日は明日の風が吹く。");
> > INSERT INTO groonga_test2 VALUES(2, "また明日ね");
> > INSERT INTO groonga_test2 VALUES(11, "ひどい天気.");
> > INSERT INTO groonga_test2 VALUES(12, "快晴の天気");
> > INSERT INTO groonga_test2 VALUES(13, "のどかな天気");
> > INSERT INTO groonga_test2 VALUES(14, "蒸し暑い天気");
> > INSERT INTO groonga_test2 VALUES(15, "天気が穏かになる");
> > INSERT INTO groonga_test2 VALUES(16, "明日の天気が心配です。");
> >
> > SELECT keywords, MATCH(keywords) AGAINST('明日の天気')
> >        FROM groonga_test2
> >        WHERE MATCH(keywords) AGAINST('明日の天気');
> > --
> >
> > 実際は、「天気も」ではなく、「天気だけ」対象になっていました。
> >
> > ドキュメントでは「重みが大きい上位N個のトークン」と書いてい
> > ますが、実際は「トークンIDが大きい上位N個のトークン」という
> > 挙動でした。
> >
> > > バグでしょうか?アドバイスいただけると助かります。
> >
> > ドキュメント通りの挙動にするには↓と変更すればよいのですが、
> > 今の挙動が期待した挙動なのか、ドキュメントに書かれている挙動
> > が期待した挙動なのか、というところですね。
> >
> > 森さん、森さんがこのコードを書いた時、期待する挙動はなんだっ
> > たか覚えていますか?
> >
> > --
> > diff --git a/lib/ii.c b/lib/ii.c
> > index d19049f..9679992 100644
> > --- a/lib/ii.c
> > +++ b/lib/ii.c
> > @@ -5702,7 +5702,7 @@ grn_ii_similar_search(grn_ctx *ctx, grn_ii *ii,
> >      grn_ii_cursor *c;
> >      grn_ii_posting *pos;
> >      grn_wv_mode wvm = grn_wv_none;
> > -    grn_table_sort_optarg arg = {GRN_TABLE_SORT_DESC, NULL, (void
> > *)sizeof(grn_id), 0};
> > +    grn_table_sort_optarg arg =
> > {GRN_TABLE_SORT_DESC|GRN_TABLE_SORT_BY_VALUE, NULL, (void 
> > *)sizeof(grn_id), 0};
> >      grn_array *sorted = grn_array_create(ctx, NULL, sizeof(grn_id), 0);
> >      if (!sorted) {
> >        GRN_LOG(ctx, GRN_LOG_ALERT, "grn_hash_sort on 
> > grn_ii_similar_search failed !");
> > --
> >
> >
> > --
> > 須藤 功平 <kou****@clear*****>
> > 株式会社クリアコード <http://www.clear-code.com/>
> >
> > Groongaベースの全文検索システムを総合サポート:
> >   http://groonga.org/ja/support/
> > パッチ採用 - プログラミングが楽しい人向けの採用プロセス:
> >   http://www.clear-code.com/recruitment/
> > コードリーダー育成支援 - 自然とリーダブルコードを書くチームへ:
> >   http://www.clear-code.com/services/code-reader/
> >
> > _______________________________________________
> > groonga-dev mailing list
> > groon****@lists*****
> > http://lists.sourceforge.jp/mailman/listinfo/groonga-dev
> >
> 
> ------------------------------
> 
> _______________________________________________
> groonga-dev mailing list
> groon****@lists*****
> http://lists.sourceforge.jp/mailman/listinfo/groonga-dev
> 




groonga-dev メーリングリストの案内
Back to archive index