Mysql
 sql >> Base de Dados >  >> RDS >> Mysql

como usar o Fuzzy look up para encontrar a frase no SQL?


Esta não é uma pergunta simples. Sua melhor aposta é usar algum tipo de pesquisa de texto completo . A pesquisa de texto completo pode ser configurada para ter palavras irrelevantes (palavras que são omitidas da pesquisa - como a palavra the ) e também pode ter um limite mínimo de comprimento de palavra (palavras com menos de certos caracteres também são omitidas da pesquisa.

No entanto, se você simplesmente usar
SELECT * FROM testtable
WHERE MATCH (sentence)
AGAINST ('ISBN number on site');

Então o MySQL retornará não apenas o registro com o valor que você estava procurando, mas os registros que possuem apenas algumas das palavras, e em ordem diferente. O que você mostrou provavelmente será um dos mais bem classificados, mas não há garantia de que será o mais bem classificado.

Você pode usar a pesquisa booleana de texto completo e prefixe + para cada palavra de pesquisa para forçar o MySQL a retornar apenas os registros que têm todas as palavras de pesquisa presentes:
SELECT * FROM testtable
WHERE MATCH (sentence)
AGAINST ('+ISBN +number +on +site' IN BOOLEAN MODE);

Mas, on deve ser uma palavra irrelevante (está nas listas de palavras-chave padrão) ou deve ser menor que o comprimento mínimo da palavra, portanto, deve ser omitida da expressão de pesquisa (você não obterá nenhum resultado):
SELECT * FROM testtable
WHERE MATCH (sentence)
AGAINST ('+ISBN +number +site' IN BOOLEAN MODE);

Eu sei que isso requer alteração da expressão de pesquisa, no entanto, isso obterá os melhores resultados usando a funcionalidade interna do MySQL.

A alternativa é usar outros mecanismos de pesquisa de texto completo, como esfinge para realizar a pesquisa para você.