ブログ  前の記事  次の記事  2007-08-24 

たけまる / Senna - BOOLEAN MODE で Can't find FULLTEXT index を回避できる?


2007-08-24

_ Senna - BOOLEAN MODE で Can't find FULLTEXT index を回避できる? [senna]

[2007-08-06-1] で,"Can't find FULLTEXT index matching the column
list" エラーを回避する方法を紹介しました.このエントリに対して,
id:aki77 さんから,はてブでコメントをいただきました.

はてなブックマーク - たけまる / Senna - 2ind 機能の奇妙なノウハウ
"Can't find FULLTEXT index matching the column list"のケースは
AGAINST('*D+ abc' IN BOOLEAN MODE) で回避できるかも

試してみましたが,うまくいきませんでした.

CREATE TABLE tb (
  id INT, 
  tx TEXT, 
  PRIMARY KEY (id), 
  FULLTEXT INDEX USING NGRAM (tx)
) ENGINE=MyISAM DEFAULT CHARSET=utf8;

INSERT INTO tb VALUES (1,'abc');
INSERT INTO tb VALUES (2,'def');

SELECT * FROM tb FORCE INDEX(PRIMARY)
  WHERE id = 1 AND MATCH(tx) AGAINST('*D+ abc' IN BOOLEAN MODE);

1件がヒットするはずですが,1件もみつかりませんでした.2ind_patch
が働いていないのかもしれません.

思い付きで,このクエリの前に,Normal インデックスのみを使うクエリ
を追加してみました.

SELECT * FROM tb WHERE id = 1;

SELECT * FROM tb FORCE INDEX(PRIMARY)
  WHERE id = 1 AND MATCH(tx) AGAINST('*D+ abc' IN BOOLEAN MODE);

この順であれば,正しく 1件ヒットします.ただし,AND や OR 検索では
正しい結果を返さなかいようなので,BOOLEAN MODE で使うのは難しそう
です (そもそも実装してないのかも).

一言メッセージをこっそり送信できます (非公開)
 今年の西暦→