2012-03-06 12 views
4

私はこのように、フルテキストインデックスを使用してMySQLのMyISAMテーブルを持っている:完全一致にフルテキストインデックスを使用するにはどうすればよいですか?

CREATE TABLE `tblsearch` (
    `id` int(11) NOT NULL AUTO_INCREMENT, 
    `title` varchar(100) NOT NULL, 
    `brand` varchar(100) DEFAULT NULL, 
    PRIMARY KEY (`id`), 
    FULLTEXT KEY `index_all` (`title`,`brand`) 
) ENGINE=MyISAM AUTO_INCREMENT=1316109 DEFAULT CHARSET=utf8; 

今、私は正確なタイトルとブランドを持つすべてのエントリを見つけるために、このようなクエリを記述する必要があります。

SELECT id FROM tblsearch WHERE title=?title AND brand=?brand; 

クエリでは完全一致のみが重要です。私はすでに持っている全文索引を使用できるようにしたいと思います。それはフルテキストインデックスを使用するようにクエリを記述することは可能ですか?このような

答えて

2

何か:

SELECT id 
    FROM tblsearch 
WHERE MATCH (title, brand) AGAINST ("exact phrase") 
    AND CONCAT(title, ' ', brand) LIKE '%exact phrase%'; 

は、あなたが正確なタイトルやブランドを見つける必要がある場合、あなたは、古典的なインデックスと等しい演算子を使用する必要があり、それは

+0

2つの異なるパラメータとしてtitleと?brandの両方が必要ですが、それは可能ですか? – Martin

+0

あなたは、タイトルとブランドのパラメータを組み合わせて、「完全なフレーズ」の代わりに使用してください。 –

+0

ありがとう!このクエリでやっているように、 "like '%exact phrase%'"という部分を使っても構いませんか?それとも、パフォーマンスに悪いですか?この表には約1百万のエントリがあります。 – Martin

1

を役に立てば幸い:

ALTER TABLE tblsearch ADD INDEX search_idx(title, brand); 
SELECT id FROM tblsearch WHERE title = 'foo' AND brand = 'bar'; 

タイトルとブランドに正確な単語を一致させるだけでよい場合:

SELECT id FROM tblsearch WHERE 
MATCH(title) AGAINST('+foo' IN BOOLEAN MODE) 
AND MATCH(brand) AGAINST('+bar' IN BOOLEAN MODE); 
関連する問題