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 >