Skip to main content
Documents
Clauses StatementsKeywordsExpressionsFunctionsIndexesPerformance Optimization

MySQL MATCH AGAINST Clauses

The `MATCH ... AGAINST` clause in MySQL is used for full-text search, allowing for complex search queries within text fields. It enables searching for words and phrases in text columns efficiently.

Usage

The `MATCH ... AGAINST` clause is used when you need to perform a full-text search on a text-based column in a table. It requires a full-text index on the columns being searched.

Prerequisites

  • Storage Engine Support: Full-text search is supported by specific storage engines such as InnoDB and MyISAM.
  • Column Types: Only certain column types like CHAR, VARCHAR, and TEXT can be indexed for full-text search.
sql
SELECT column1, column2, ...
FROM table_name
WHERE MATCH (column1, column2, ...) AGAINST ('search_term' [IN NATURAL LANGUAGE MODE | IN BOOLEAN MODE | WITH QUERY EXPANSION]);

In this syntax, `MATCH (column1, column2, ...) AGAINST ('search_term')` specifies the columns to search and the term to search for.

Examples

1. Basic Full-Text Search

sql
SELECT title
FROM articles
WHERE MATCH (title, content) AGAINST ('database');

This example retrieves articles where the `title` or `content` fields contain the word "database".

2. Full-Text Search with Boolean Mode

sql
SELECT title
FROM articles
WHERE MATCH (title, content) AGAINST ('+database -SQL' IN BOOLEAN MODE);

In this query, `+database -SQL` specifies that the word "database" must be present and "SQL" must be absent in the `title` or `content`.

3. Full-Text Search with Query Expansion

sql
SELECT title
FROM articles
WHERE MATCH (title, content) AGAINST ('search' WITH QUERY EXPANSION);

Here, `WITH QUERY EXPANSION` expands the search to include related terms, providing a broader range of results for the term "search".

Search Modes Explained

  • Natural Language Mode: Processes the search term as a natural language phrase, ranking results based on relevance.
  • Boolean Mode: Allows for more complex queries using operators like `+`, `-`, and `*` to refine search results.
  • Query Expansion: Uses the initial search results to further search for related terms, broadening the search scope.

Tips and Best Practices

  • Ensure Full-Text Indexes. Create full-text indexes on columns where you intend to use `MATCH ... AGAINST` for optimal performance.
  • Choose the right search mode. Use natural language mode for simple searches, boolean mode for more complex queries, and query expansion when broader results are desired.
  • Optimize column selection. Include only necessary columns in the `MATCH` clause to improve search speed and relevance.
  • Handle stopwords and minimum word length. Be aware of MySQL's default stopwords and word length settings, which might filter out common or short words from searches.

SQL Upskilling for Beginners

Gain the SQL skills to interact with and query your data.
Start Learning for Free