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

Zurück zum Archiv-Index

kentoku kento****@gmail*****
2012年 7月 6日 (金) 12:58:53 JST


斯波です。

> 今試していてわかったのですが、ORDER BY句を指定すると、
> そのカラムにキーワードが含まれていないデータは除外されているようです。
> 例えば(7)では、title・author・publisherの全てに"日本"が含まれているものしかマッチしていないと思われます。
> またその証拠に、(3)と(8)では同じ検索結果が得られています。
ありがとうございます。
バグの可能性も含めて確認させて頂きます。

どうぞ、よろしくお願いいたします。


2012年7月5日 18:17 中谷宗嵩 <nakatani_munet****@flyin*****>:
> 須藤様
>
> 株式会社フライングラインの中谷です。
> 早速ご回答いただき、ありがとうございます。
>
>>パフォーマンス的にはむしろ(b)の方が(a)よりよさそうな気がします。
>>
>>というのは、同じSQL内に同じMATCH AGAINSTが複数あっても実際に
>>は1度しか検索しないからです。
>>
>>冗長ですがORDER BYの数を減らせないということのようなので、
>>(b)が一番効率がよさそうです。
>
> ご説明ありがとうございます。
> なるほど。重複を除いたMATCH AGAINSTの数が重要なのですね。
> それでは(b)の方向で、なるべくMATCH AGAINSTが少なくなるような設計を考えてみます。
> ありがとうございました!
>
>
>>何かのバッファサイズを指定する、とかそういう類の設定というこ
>>とですよね。実は、そういうのは存在しないのです。今後、できる
>>かもしれませんが、今のところはありません。
>
> こちらも了解致しました。
> やはり検索回数を減らす方法で、パフォーマンスを向上させたいと思います。
>
>
>>もしよかったらテーブル定義(create table (...))を教えて頂い
>>てもよいでしょうか?インデックスの張り方を確認したいのと、手
>>元でも試してみたいというのが理由です。
>
> 以下にテーブル構造を貼ります。
> ※実際に使用していたbookテーブルは、先程お伝えしたものより複雑な構造のため、
> book2テーブルで再現してみました。
> こちらでも同じ検索結果が得られました。
>
> mysql> show create table book2 \G
> *************************** 1. row ***************************
>        Table: book2
> Create Table: CREATE TABLE `book2` (
>   `id` int(11) NOT NULL AUTO_INCREMENT,
>   `title` varchar(254) COLLATE utf8_unicode_ci DEFAULT NULL,
>   `author` varchar(254) COLLATE utf8_unicode_ci DEFAULT NULL,
>   `publisher` varchar(254) COLLATE utf8_unicode_ci DEFAULT NULL,
>   PRIMARY KEY (`id`),
>   KEY `book_title` (`title`),
>   KEY `book_title_author` (`title`,`author`),
>   FULLTEXT KEY `full_book_title` (`title`),
>   FULLTEXT KEY `full_book_title_author` (`title`,`author`),
>   FULLTEXT KEY `full_book_author` (`author`),
>   FULLTEXT KEY `full_book_publisher` (`publisher`),
>   FULLTEXT KEY `full_book_title_author_publisher` (`title`,`author`,`publisher`)
> ) ENGINE=mroonga DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci
> 1 row in set (0.00 sec)
>
> こちらには、約20万件のデータが入っています。
> mysql> select count(*) from book2;
> +----------+
> | count(*) |
> +----------+
> |   190818 |
> +----------+
> 1 row in set (0.00 sec)
>
> 参考までに、以下、実行したSQLと取得した結果の件数です。
> (1)SELECT * FROM book2 WHERE MATCH(title,author,publisher)
> AGAINST("日本" in boolean mode);
> ⇒15500件
> (2)SELECT * FROM book2 WHERE MATCH(title,author,publisher)
> AGAINST("日本" in boolean mode) ORDER BY MATCH(title,author,publisher)
> AGAINST("日本" in boolean mode);
> ⇒15500件
> (3)SELECT * FROM book2 WHERE MATCH(title,author,publisher)
> AGAINST("日本" in boolean mode) ORDER BY MATCH(title) AGAINST("日本" in
> boolean mode);
> ⇒7568件の結果
> (4)SELECT * FROM book2 WHERE MATCH(title,author,publisher)
> AGAINST("日本" in boolean mode) ORDER BY MATCH(author) AGAINST("日本" in
> boolean mode);
> ⇒1762件の結果
> (5)SELECT * FROM book2 WHERE MATCH(title,author,publisher)
> AGAINST("日本" in boolean mode) ORDER BY MATCH(publisher) AGAINST("日本"
> in boolean mode);
> ⇒7204件の結果
> (6)SELECT * FROM book2 WHERE MATCH(title,author,publisher)
> AGAINST("日本" in boolean mode) ORDER BY MATCH(title) AGAINST("日本" in
> boolean mode),MATCH(author) AGAINST("日本" in boolean mode);
> ⇒228件の結果
> (7)SELECT * FROM book2 WHERE MATCH(title,author,publisher)
> AGAINST("日本" in boolean mode) ORDER BY MATCH(title) AGAINST("日本" in
> boolean mode),MATCH(author) AGAINST("日本" in boolean
> mode),MATCH(publisher) AGAINST("日本" in boolean mode);
> ⇒31件の結果
> (8)SELECT * FROM book2 WHERE MATCH(title) AGAINST("日本" in boolean mode);
> ⇒7568件の結果
>
> 今試していてわかったのですが、ORDER BY句を指定すると、
> そのカラムにキーワードが含まれていないデータは除外されているようです。
> 例えば(7)では、title・author・publisherの全てに"日本"が含まれているものしかマッチしていないと思われます。
> またその証拠に、(3)と(8)では同じ検索結果が得られています。
>
> テーブル構造などで、何か問題になりそうな箇所がありましたら、
> ご指摘いただけますと幸いです。
>
>
> どうぞよろしくお願い致します。
>
> -----------------------------------------
> 株式会社 フライングライン
> 中谷 宗嵩
>
> 東京都中央区銀座8-11-11 TK銀座8丁目ビル
> URL: http://www.flyingline.co.jp/
> Tel: 03-5537-0390 Fax: 03-5537-0391
> Mail: nakatani_munet****@flyin*****
>
> _______________________________________________
> groonga-dev mailing list
> groon****@lists*****
> http://lists.sourceforge.jp/mailman/listinfo/groonga-dev




groonga-dev メーリングリストの案内
Zurück zum Archiv-Index