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 MODE
modificador 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 MODE
opção explicitamente naAGAINST()
função para realizar pesquisas booleanas de texto completo. - Combine os operadores booleanos para realizar pesquisas de texto booleano.