Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

How to use a full text index for exact matches?

I have a MySql MyISAM table with a full text index, like this:

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;

Now I need to write a query like this to find all entries with the exact title and brand:

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

It is important that the query only give exact matches. I would like to be able to use the full text index that I already have. Is it possible to write the query so it uses the full text index?

like image 830
Martin Avatar asked Oct 09 '22 11:10

Martin


2 Answers

Something like this:

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

Hope it helps

like image 178
Sudhir Bastakoti Avatar answered Oct 13 '22 12:10

Sudhir Bastakoti


If you need to find the exact title or brand, you need to use the equal operator with a classical index :

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

Now if you just need to match exact words into the title and brand:

SELECT id FROM tblsearch WHERE
MATCH(title) AGAINST('+foo' IN BOOLEAN MODE)
AND MATCH(brand) AGAINST('+bar' IN BOOLEAN MODE);
like image 21
Stéphane Avatar answered Oct 13 '22 11:10

Stéphane