Pesquisas booleanas de texto completo do MySQL

Resumo : neste tutorial, você aprenderá como realizar pesquisas booleanas de texto completo no MySQL, utilizando operadores booleanos para formar consultas de pesquisa muito complexas.

Introdução às pesquisas de texto completo booleanas do MySQL

Além da  pesquisa de texto completo em linguagem natural , o MySQL suporta uma forma adicional de pesquisa de texto completo chamada pesquisa booleana de texto completo. No modo booleano, o MySQL procura por palavras em vez do conceito , como na busca em linguagem natural.

O MySQL permite realizar uma pesquisa de texto completo com base em consultas altamente complexas no modo Booleano, aproveitando operadores Booleanos. É por isso que a pesquisa de texto completo no modo booleano é mais adequada para usuários experientes.

Vamos criar uma tabela de exemplo e realizar uma pesquisa de texto completo usando o modo booleano para entender como funciona.

DROP TABLE IF EXISTS documents;

CREATE TABLE documents (
    id INT AUTO_INCREMENT PRIMARY KEY,
    contents TEXT,
    FULLTEXT ( contents )
);

INSERT INTO documents(contents)
VALUES
('MySQL Database'),
('MySQL'),
('Database'),
('SQL'),
('A fork of MySQL'),
('SQLite');Linguagem de código:  SQL (linguagem de consulta estruturada)  ( sql )

O exemplo a seguir mostra como pesquisar documentos cujo conteúdo contenha a palavra “MySQL”:

SELECT 
  id, 
  contents 
FROM 
  documents 
WHERE 
  MATCH (contents) AGAINST ('mysql' IN BOOLEAN MODE);Linguagem de código:  SQL (linguagem de consulta estruturada)  ( sql )

Saída:

+----+-----------------+
| id | contents        |
+----+-----------------+
|  1 | MySQL Database  |
|  2 | MySQL           |
|  5 | A fork of MySQL |
+----+-----------------+
3 rows in set (0.00 sec)Linguagem de código:  JavaScript  ( javascript )

Neste exemplo, usamos o modo booleano com o IN BOOLEAN MODEmodificador na AGAINST()função para realizar pesquisas booleanas de texto completo.

Para encontrar os documentos que possuem a palavra MySQL, mas não possuem a palavra bancos de dados, você pode usar o operador booleano de exclusão ( -) da seguinte maneira:

SELECT 
  id, 
  contents 
FROM 
  documents 
WHERE 
  MATCH (contents) AGAINST ('mysql -database' IN BOOLEAN MODE);Linguagem de código:  SQL (linguagem de consulta estruturada)  ( sql )

Saída:

+----+-----------------+
| id | contents        |
+----+-----------------+
|  2 | MySQL           |
|  5 | A fork of MySQL |
+----+-----------------+
2 rows in set (0.00 sec)Linguagem de código:  JavaScript  ( javascript )

O resultado da pesquisa mostra apenas documentos com a palavra-chave MySQL, excluindo os documentos com a palavra bancos de dados.

Operadores de pesquisa de texto completo booleanos do MySQL

A tabela a seguir ilustra os operadores booleanos de pesquisa de texto completo e seus significados:

Operador Descrição
+ Incluir, a palavra deve estar presente.
Excluir, a palavra não deve estar presente.
> Incluir e aumentar o valor da classificação.
< Incluir e diminuir o valor da classificação.
() Agrupe palavras em subexpressões (permitindo que sejam incluídas, excluídas, classificadas e assim por diante como um grupo).
~ Negue o valor de classificação de uma palavra.
* Curinga no final da palavra.
“” Define uma frase (ao contrário de uma lista de palavras individuais, a frase inteira é correspondida para inclusão ou exclusão).

Os exemplos a seguir ilustram como usar o operador booleano de texto completo +para procurar linhas que contenham a palavra “banco de dados”:

SELECT 
  id, 
  contents 
FROM 
  documents 
WHERE 
  MATCH (contents) AGAINST ('+database' IN BOOLEAN MODE);Linguagem de código:  SQL (linguagem de consulta estruturada)  ( sql )

Saída:

+----+----------------+
| id | contents       |
+----+----------------+
|  1 | MySQL Database |
|  3 | Database       |
+----+----------------+
2 rows in set (0.00 sec)Linguagem de código:  JavaScript  ( javascript )

Para procurar linhas que contenham a palavra “mysql”, mas coloque a classificação mais alta para as linhas que contenham “banco de dados”:

SELECT 
  id, 
  contents, 
  MATCH (contents) AGAINST ('mysql +database' IN BOOLEAN MODE) relevancy 
FROM 
  documents 
WHERE 
  MATCH (contents) AGAINST ('mysql +database' IN BOOLEAN MODE);Linguagem de código:  SQL (linguagem de consulta estruturada)  ( sql )

Saída:

+----+----------------+---------------------+
| id | contents       | relevancy           |
+----+----------------+---------------------+
|  1 | MySQL Database |  0.3182637691497803 |
|  3 | Database       | 0.22764469683170319 |
+----+----------------+---------------------+
2 rows in set (0.00 sec)Linguagem de código:  JavaScript  ( javascript )

Para encontrar as linhas que contêm palavras começando com “sql”, como “sql”, “sqlite”, etc., use o seguinte:

SELECT 
  id, 
  contents
FROM 
  documents 
WHERE 
  MATCH (contents) AGAINST ('sql*' IN BOOLEAN MODE);Linguagem de código:  SQL (linguagem de consulta estruturada)  ( sql )

Saída:

+----+----------+
| id | contents |
+----+----------+
|  4 | SQL      |
|  6 | SQLite   |
+----+----------+
2 rows in set (0.00 sec)Linguagem de código:  JavaScript  ( javascript )

Resumo

  • Use a IN BOOLEAN MODEopção explicitamente na AGAINST()função para realizar pesquisas booleanas de texto completo.
  • Combine os operadores booleanos para realizar pesquisas de texto booleano.

Deixe um comentário

O seu endereço de email não será publicado. Campos obrigatórios marcados com *