InnoDBだってシュッと全文検索したい!
- 5. SELECT * FROM table WHERE
text LIKE ‘%foo%’;
普通のインデックスだとLIKE検索は前方一致
でないとインデックスが使用されない
- 10. MySQL 5.6.4 から フルテキストイ
ンデックスが InnoDB でも使え
る!
※ただし日本語のような個々の単語に区切り文字がない言語はサポートしないものとする
- 11. MySQL 5.6.4 から フルテキストイ
ンデックスが InnoDB でも使え
る!
※ただし日本語のような個々の単語に区切り文字がない言語はサポートしないものとする
どういうこと?
- 12. 日本語を区切るためには?
mecab
すもももももももものうち
すもも 名詞,一般,*,*,*,*,すもも,スモモ,スモモ
も 助詞,係助詞,*,*,*,*,も,モ,モ
もも 名詞,一般,*,*,*,*,もも,モモ,モモ
も 助詞,係助詞,*,*,*,*,も,モ,モ
もも 名詞,一般,*,*,*,*,もも,モモ,モモ
の 助詞,連体化,*,*,*,*,の,ノ,ノ
うち 名詞,非自立,副詞可能,*,*,*,うち,ウチ,ウチ
分かち書き
- 15. CREATE TABLE `test` (
`id` AUTO_INCREMENT NOT NULL PRIMARY KEY,
`text` varchar(255) NOT NULL,
FULLTEXT KEY `ngram_idx` (`text`)
) Engine=InnoDB DEFAULT CHARSET=utf-8;
INSERT INTO `test` (`text`) VALUES (
“すもも も もも も もも の うち”
);
INSERT INTO `test` (`text`) VALUES (
“こん んに にち ちは”
);
- 18. CREATE TABLE `test` (
`id` AUTO_INCREMENT NOT NULL PRIMARY KEY,
`text` varchar(255) NOT NULL,
FULLTEXT KEY `ngram_idx` (`text`) WITH PARSER ngram
) Engine=InnoDB DEFAULT CHARSET=utf-8;
INSERT INTO `test` (`text`) VALUES (
“すもももももももものうち”
);
ngram の n の値は ngram_token_size で設定可能(デフォルトは2)
- 20. SELECT * FROM table WHERE
(MATCH (text) AGAINST
(‘“foo”’ IN BOOLEAN MODE));
- 22. MySQL + groonga = mroonga
他の選択肢
更新・挿入性能は mroonga のほうが上
検索性能は InnoDB fulltext index のほうが上っぽい