[groonga-dev,00984] Re: mroonga検索スコア順のソートについて

Back to archive index

磯部 和広 k-iso****@rozet*****
2012年 7月 6日 (金) 15:52:32 JST


いつもお世話になっております。

ちょっと気になったのですが・・・

まず、今回の要望はスコアの高い順にしたいのだと思うので
order by desc にする必要がありますので、ちょっとSQLを加工しました。

[k-isobe @ PMJ-MySQL1 ~]$ function get_sql { echo "SELECT
id,title,author,publisher FROM book2 WHERE
MATCH(title) AGAINST('$1' in boolean mode) or
MATCH(author) AGAINST('$1' in boolean mode) or
MATCH(publisher) AGAINST('$1' in boolean mode)
order by MATCH(title) AGAINST('$1' in boolean mode) desc,
MATCH(author) AGAINST('$1' in boolean mode) desc,
MATCH(publisher) AGAINST('$1' in boolean mode) desc"; }
[k-isobe @ PMJ-MySQL1 ~]$

を用意して。

[k-isobe @ PMJ-MySQL1 ~]$ get_sql 日本
SELECT id,title,author,publisher FROM book2 WHERE
MATCH(title) AGAINST('日本' in boolean mode) or
MATCH(author) AGAINST('日本' in boolean mode) or
MATCH(publisher) AGAINST('日本' in boolean mode)
order by MATCH(title) AGAINST('日本' in boolean mode) desc,
MATCH(author) AGAINST('日本' in boolean mode) desc,
MATCH(publisher) AGAINST('日本' in boolean mode) desc
[k-isobe @ PMJ-MySQL1 ~]$ get_sql 日本 | do_sql
1 日本の心 日本人 大日本出版
2 宇宙人の心 日本人 大宇宙出版
3 ルーピーの心 鳩山 大日本出版
[k-isobe @ PMJ-MySQL1 ~]$ get_sql 宇宙 | do_sql
2 宇宙人の心 日本人 大宇宙出版
[k-isobe @ PMJ-MySQL1 ~]$ get_sql 大日本 | do_sql
1 日本の心 日本人 大日本出版
3 ルーピーの心 鳩山 大日本出版
[k-isobe @ PMJ-MySQL1 ~]$ get_sql 人 | do_sql
2 宇宙人の心 日本人 大宇宙出版
1 日本の心 日本人 大日本出版
[k-isobe @ PMJ-MySQL1 ~

とやると、期待通りの出力が得られるのですが。

問題は実行計画です。

[k-isobe @ PMJ-MySQL1 ~]$ (echo -n explain '' ; get_sql 人) | do_sql
1 SIMPLE book2 ALL NULL NULL NULL NULL 3 Using where; Using filesort
[k-isobe @ PMJ-MySQL1 ~]$ echo "explain $SQL1" | do_sql
1 SIMPLE book2 fulltext full_book_title_author_publisher
full_book_title_author_publisher 0 1 Using where with pushed condition
[k-isobe @ PMJ-MySQL1 ~]$
[k-isobe @ PMJ-MySQL1 ~]$ echo "$SQL1"
SELECT id,title,author,publisher FROM book2 WHERE
MATCH(title,author,publisher) AGAINST('日本' in boolean mode)
[k-isobe @ PMJ-MySQL1 ~]$

となり、複合インデックスに対するSQLではインデックスが使われているのですが
orで繋いだものはインデックスが使われていないように見えます。

全文検索部分でmroongaが使われているので大丈夫だとは思いますが
件数が多くなると色々あるかもしれませんね・・・




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