Acabei de ler um post mencionando "pesquisa de texto completo" no SQL.
Eu só queria saber qual é a diferença entre STF e LIKE. Eu li alguns artigos, mas não consegui encontrar nada que explicasse bem.
fonte
Acabei de ler um post mencionando "pesquisa de texto completo" no SQL.
Eu só queria saber qual é a diferença entre STF e LIKE. Eu li alguns artigos, mas não consegui encontrar nada que explicasse bem.
Em geral, há uma troca entre "precisão" e "recall". Alta precisão significa que menos resultados irrelevantes são apresentados (sem falsos positivos), enquanto alta recordação significa que menos resultados relevantes estão faltando (sem falsos negativos). O uso do operador LIKE fornece 100% de precisão, sem concessões para recall. Um recurso de pesquisa de texto completo oferece muita flexibilidade para ajustar a precisão para melhor recuperação.
A maioria das implementações de pesquisa de texto completo usa um "índice invertido". Este é um índice em que as chaves são termos individuais e os valores associados são conjuntos de registros que contêm o termo. A pesquisa de texto completo é otimizada para calcular a interseção, união, etc. desses conjuntos de registros e geralmente fornece um algoritmo de classificação para quantificar a força com que um determinado registro corresponde às palavras-chave da pesquisa.
O operador SQL LIKE pode ser extremamente ineficiente. Se você aplicá-lo a uma coluna não indexada, uma varredura completa será usada para encontrar correspondências (como qualquer consulta em um campo não indexado). Se a coluna estiver indexada, a correspondência poderá ser realizada com relação às chaves de índice, mas com muito menos eficiência do que a maioria das pesquisas de índice. Na pior das hipóteses, o padrão LIKE terá curingas principais que exigem que todas as chaves de índice sejam examinadas. Por outro lado, muitos sistemas de recuperação de informações podem habilitar o suporte para caracteres curingas líderes, pré-compilando árvores de sufixos em campos selecionados.
Outros recursos típicos da pesquisa de texto completo são
O STF envolve a indexação de palavras individuais em um campo de texto para agilizar a pesquisa em muitos registros. O uso de LIKE ainda exige que você faça uma pesquisa de sequência (linear ou similar) dentro do campo.
fonte
O MySQL cria um índice a partir das palavras da coluna de pesquisa de texto completo ativada e realiza pesquisas nesse índice. O MySQL usa um algoritmo sofisticado para determinar as linhas correspondentes à consulta de pesquisa.
Além disso, a partir desta resposta SO :
fonte
O Like usa apenas curingas e não é tão poderoso.
O texto completo permite uma pesquisa muito mais complexa, incluindo E, Ou, Não, até resultados de som semelhantes (SOUNDEX) e muitos outros itens.
Gostaria de começar a examinar os itens SQL CONTAINS () FREETEXT () e de pesquisa de texto completo relacionados para ajudar a entender melhor o que está disponível.
fonte
A diferença real são as metodologias de varredura. Para pesquisa em texto completo, as palavras (termos) são usadas como chaves de hash - cada uma delas associada a uma matriz de documentos nas quais as chaves (termos) aparecem. É assim:
Agora, a matriz termo-documento (qual membro do termo de qual documento) pode ser representada como:
Quando chega a solicitação, solicitando "Obter todos os documentos que contenham a palavra / termo t1" - o conjunto de documentos
{d1, d5, d9,.. dn
} é retornado.Você pode invadir um esquema de tabela não normalizada para armazenar documentos - cada linha da tabela MySQL será considerada como "documento" e uma coluna TEXT poderá conter um parágrafo etc. O índice invertido conterá os termos como chaves de hash e os IDs de linha como os IDs do documento.
Lembre-se de que esta consulta SQL terá mais ou menos desempenho O (1). A consulta será independente de
Por exemplo, esse SQL pode ser disparado para extrair todas as linhas correspondentes à palavra XYZ:
Advertência: Se você adicionar ORDER BY a essa consulta, seus tempos de execução variarão com base nos vários parâmetros, um dos quais é o número de linhas / documentos correspondentes. Então cuidado.
O LIKE, no entanto, não tem nada disso. É forçado a digitalizar linearmente a frase / string e encontrar todos os termos correspondentes. Adicionar curinga adiciona à bagunça. Funciona muito bem para seqüências de caracteres pequenas, como você pode imaginar, mas falhará miseravelmente em frases mais longas. E definitivamente não é comparável quando se tem um parágrafo ou uma página inteira de texto, etc.
fonte
O FTS é mais eficiente, poderoso (especialmente para Word Breakers e funcionalidades derivadas) ... mas verifique seus requisitos, porque às vezes os DBs não suportam todos os idiomas, por exemplo, o MSSQL não suporta o grego (verifique nesta página http: // msdn. microsoft.com/en-us/library/ms176076(v=sql.110).aspx )
fonte