Как использовать полнотекстовый индекс для точных совпадений?
У меня есть таблица 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%';
Надеюсь, это поможет
Если вам нужно найти точное название или бренд, вам нужно использовать оператор equal с классическим индексом:
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);