Jiro Iwamoto
jirok****@gmail*****
2013年 8月 13日 (火) 19:22:07 JST
林さん
岩本です。素早い回答ありがとうございます。
このクエリで動くようになりました。ありがとうございます。
もう一つ質問なのですが、パフォーマンスについてです。
下記のようなテーブルでデータが50万件ほどある場合、
CREATE TABLE `CombinedData` (
`guid` varchar(36) NOT NULL,
`orgId` varchar(36) NOT NULL,
`objId` varchar(36) NOT NULL,
`id` int(11) NOT NULL,
`content` text NOT NULL,
PRIMARY KEY (`guid`),
KEY `orgId` (`orgId`,`objId`),
FULLTEXT KEY `content` (`content`),
CONSTRAINT `FK_CombinedData_Data` FOREIGN KEY (`guid`) REFERENCES `Data`
(`guid`) ON DELETE CASCADE
) ENGINE=mroonga DEFAULT CHARSET=utf8 COMMENT='engine "innodb"'
下記のクエリを投げた時に15件データが取得できるのですが、50秒ほどかかります。これは正常な状態なのでしょうか?
転置インデックスで動作しているのであればもっと素早くとってこれるような気がしているのですが、、、、
select orgId, objId, guid from CombinedData where match(content)
against('ポートピア連続殺人事件' IN BOOLEAN MODE) and orgId='9832' and objId='1234';
質問ばかりで申し訳ありませんがよろしくお願いします。
2013年8月13日 19:02 HAYASHI Kentaro <hayas****@clear*****>:
>
> 林です。
>
> On Tue, 13 Aug 2013 18:06:12 +0900
> Jiro Iwamoto <jirok****@gmail*****> wrote:
>
> > こんにちわ。
> >
> > 岩本です。
> >
> > mroongaをubuntu13.04で試していますが、どうも期待している動作と異なる挙動をします。
> > 「明日はいい天気になると良いね」という文字列に対して「明月は」と検索すると
> > 検索にマッチしないのではないかと思うのですが、下記のように検索にマッチしてしまいます。
> > なにか設定か何かが間違っているのでしょうか?
> >
> > なお、全てaptでインストールしています。
> >
>
> この場合は、クエリの書き方を変更すると良いです。具体的には、IN BOOLEAN MODEを指定します。
>
> 変更前:
>
> select * from diaries where match(content) against ('明月は');
>
> 変更後:
>
> select * from diaries where match(content) against ('明月は' IN BOOLEAN
> MODE);
>
> match (content) against("...")を使うと類似文書検索になるのでこの場合ヒットしています。
> 今回の場合、類似文書検索をしたいわけではないので、IN BOOLEAN MODEにすると良いです。
>
>
> 以下のように試してみると意図通りに動作することがわかると思います。
>
> mysql> select * from diaries where match(content) against ('明月は');
> +----+--------------------------------------------+
> | id | content |
> +----+--------------------------------------------+
> | 1 | 明日はいい天気になると良いね |
> +----+--------------------------------------------+
> 1 row in set (0.01 sec)
>
> mysql> select * from diaries where match(content) against ('明月は' IN
> BOOLEAN MODE);
> Empty set (0.00 sec)
>
> mysql> select * from diaries where match(content) against ('明日は' IN
> BOOLEAN MODE);
> +----+--------------------------------------------+
> | id | content |
> +----+--------------------------------------------+
> | 1 | 明日はいい天気になると良いね |
> +----+--------------------------------------------+
> 1 row in set (0.00 sec)
>
> > 以上よろしくお願いします。
> >
> > mysql> show create table diaries\G
> > *************************** 1. row ***************************
> > Table: diaries
> > Create Table: CREATE TABLE `diaries` (
> > `id` int(11) NOT NULL AUTO_INCREMENT,
> > `content` varchar(255) DEFAULT NULL,
> > PRIMARY KEY (`id`),
> > FULLTEXT KEY `content` (`content`) COMMENT 'parser "TokenMecab"'
> > ) ENGINE=mroonga AUTO_INCREMENT=2 DEFAULT CHARSET=utf8 COMMENT='engine
> > "innodb"'
> > 1 row in set (0.00 sec)
> >
> > mysql> select * from diaries;
> > +----+--------------------------------------------+
> > | id | content |
> > +----+--------------------------------------------+
> > | 1 | 明日はいい天気になると良いね |
> > +----+--------------------------------------------+
> > 1 row in set (0.00 sec)
> >
> > mysql> select * from diaries where match(content) against('明月は');
> > +----+--------------------------------------------+
> > | id | content |
> > +----+--------------------------------------------+
> > | 1 | 明日はいい天気になると良いね |
> > +----+--------------------------------------------+
> > 1 row in set (0.00 sec)
> > _______________________________________________
> > groonga-dev mailing list
> > groon****@lists*****
> > http://lists.sourceforge.jp/mailman/listinfo/groonga-dev
>
>
> --
> HAYASHI Kentaro <hayas****@clear*****>
>
> _______________________________________________
> groonga-dev mailing list
> groon****@lists*****
> http://lists.sourceforge.jp/mailman/listinfo/groonga-dev
>