MySQL

Full-Text search

Introduction#

MySQL offers FULLTEXT searching. It searches tables with columns containing text for the best matches for words and phrases.

Remarks#

FULLTEXT searching works strangely on tables containing small numbers of rows. So, when you’re experimenting with it, you may find it helpful to obtain a medium-sized table online. Here’s a table of book items, with titles and authors. You can download it, unzip it, and load it into MySQL.

FULLTEXT search is intended for use with human assistance. It’s designed to yield more matches than an ordinary WHERE column LIKE 'text%' filtering operation.

FULLTEXT search is available for MyISAM tables. It is also available for InnoDB tables in MySQL version 5.6.4 or later.

Simple FULLTEXT search

    SET @searchTerm= 'Database Programming';
 SELECT MATCH (Title) AGAINST (@searchTerm IN NATURAL LANGUAGE MODE) Score,
        ISBN, Author, Title 
   FROM book
  WHERE MATCH (Title) AGAINST (@searchTerm IN NATURAL LANGUAGE MODE)
  ORDER BY MATCH (Title) AGAINST (@searchTerm IN NATURAL LANGUAGE MODE) DESC;

Given a table named book with columns named ISBN, ‘Title’, and ‘Author’, this finds books matching the terms 'Database Programming'. It shows the best matches first.

For this to work, a fulltext index on the Title column must be available:

ALTER TABLE book ADD FULLTEXT INDEX Fulltext_title_index (Title);

Simple BOOLEAN search

    SET @searchTerm= 'Database Programming -Java';
 SELECT MATCH (Title) AGAINST (@searchTerm IN BOOLEAN MODE) Score,
        ISBN, Author, Title 
   FROM book
  WHERE MATCH (Title) AGAINST (@searchTerm IN BOOLEAN MODE)
  ORDER BY MATCH (Title) AGAINST (@searchTerm IN BOOLEAN MODE) DESC;

Given a table named book with columns named ISBN, Title, and Author, this searches for books with the words 'Database' and 'Programming' in the title, but not the word 'Java'.

For this to work, a fulltext index on the Title column must be available:

ALTER TABLE book ADD FULLTEXT INDEX Fulltext_title_index (Title);

Multi-column FULLTEXT search

    SET @searchTerm= 'Date Database Programming';
 SELECT MATCH (Title, Author) AGAINST (@searchTerm IN NATURAL LANGUAGE MODE) Score,
        ISBN, Author, Title 
   FROM book
  WHERE MATCH (Title, Author) AGAINST (@searchTerm IN NATURAL LANGUAGE MODE)
  ORDER BY MATCH (Title, Author) AGAINST (@searchTerm IN NATURAL LANGUAGE MODE) DESC;

Given a table named book with columns named ISBN, Title, and Author, this finds books matching the terms ‘Date Database Programming’. It shows the best matches first. The best matches include books written by Prof. C. J. Date.

(But, one of the best matches is also The Date Doctor’s Guide to Dating : How to Get from First Date to Perfect Mate. This shows up a limitation of FULLTEXT search: it doesn’t pretend to understand such things as parts of speech or the meaning of the indexed words.)

For this to work, a fulltext index on the Title and Author columns must be available:

ALTER TABLE book ADD FULLTEXT INDEX Fulltext_title_author_index (Title, Author);

This modified text is an extract of the original Stack Overflow Documentation created by the contributors and released under CC BY-SA 3.0 This website is not affiliated with Stack Overflow