Как использовать полнотекстовый индекс для точных совпадений?


У меня есть таблица 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 4

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);