O que é pesquisa de texto completo vs LIKE

acabei de ler um post que menciona "pesquisa de texto completo" em SQL.

Só queria saber qual é a diferença entre FTS e afins. Li alguns artigos, mas não encontrei nada que o explicasse bem.

Author: MPelletier, 2008-10-22

6 answers

Em geral, há uma troca entre" precisão "e"recordar". Alta precisão significa que menos resultados irrelevantes são apresentados( sem falsos positivos), enquanto que alta recall significa que menos resultados relevantes estão faltando (sem falsos negativos). Usar o operador similar lhe dá 100% de precisão, sem concessões para a recolha. Uma instalação completa de pesquisa de texto lhe dá muita flexibilidade para afinar a precisão para melhor recordar.

A maioria das implementações de pesquisa de texto completo usa um "índice invertido". Este é um índice onde 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 intersecção, união, etc. destes conjuntos de registros, e geralmente fornece um algoritmo de classificação para quantificar quão fortemente um dado registro corresponde a palavras-chave de pesquisa.

O operador semelhante ao SQL pode ser extremamente ineficiente. Se você aplicá-lo a uma coluna não indexada, uma varredura completa será usada para encontrar correspondências (assim como qualquer consulta num campo não indexado). Se a coluna é indexada, a correspondência pode ser realizada contra 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 similar terá caracteres especiais principais que exigem que cada chave de índice seja examinada. Em contraste, muitos sistemas de recuperação de informação podem permitir o suporte para os wildcards líderes, pré-compilação de árvores sufixos em campos selecionados.

Outras características típicas da pesquisa de texto completo são

  • lexical análise ou tokenização-quebra de a bloco de texto não estruturado em palavras, frases e fichas especiais
  • morfológico análise ou variações em colapso de uma dada palavra num índice; por exemplo, tratar "ratos" e "rato" ou "electrificação" e "eléctrico" como a mesma palavra
  • ranking-medindo o semelhança de um registo correspondente a o texto da Pesquisa
 132
Author: erickson, 2016-02-11 10:17:24

FTS envolve indexar as palavras individuais dentro de um campo de texto, a fim de fazer a pesquisa através de muitos registros rapidamente. Usar o LIKE still requer que você faça uma pesquisa de string (linear ou similar) dentro do campo.

 36
Author: Ignacio Vazquez-Abrams, 2008-10-22 07:04:44
O tipo só usa wildcards, e não é assim tão poderoso.

O texto completo permite uma pesquisa muito mais complexa, incluindo e, ou não, Mesmo resultados sonoros similares (SOUNDEX) e muitos mais itens.

Eu iria começar a olhar para o SQL contém() FREETEXT () e itens de pesquisa de texto completo relacionados para ajudar a obter uma melhor compreensão do que está disponível.

 15
Author: Mitchel Sellers, 2008-10-22 07:05:11

O MySQL cria um índice a partir das palavras da coluna de pesquisa de texto completo activa e efectua pesquisas neste índice. O MySQL usa um algoritmo sofisticado para determinar as linhas correspondentes à pesquisa.

Há algumas vantagens em procurar texto completo.

Indexação:

Algo do género:

Onde o Foo gosta de '% Bar'; Não é possível tirar partido de um índice. Tem de olhar para cada fila e ver se corresponde. Um índice fulltext, no entanto, pode. Na verdade, os índices fulltext podem oferecer muito mais flexibilidade em termos de ordem de correspondência de palavras, quão perto essas palavras estão juntas, etc.

Steming:

Uma pesquisa de texto completo pode conter palavras. Se você procurar correr, você pode obter resultados para" ran "ou"running". A maioria dos motores fulltext têm dicionários em uma variedade de línguas.

Resultados Ponderados:

Um índice de texto completo pode abranger várias colunas. Por exemplo, você pode procurar por " pêssego pie", e o índice pode incluir um título, palavras-chave, e um corpo. Os resultados que coincidem com o Título podem ser ponderados mais, como mais relevantes, e podem ser ordenados para mostrar perto do topo.

Desvantagens:

Um índice de texto completo pode potencialmente ser enorme, muitas vezes maior do que um índice de árvore B padrão. Por esta razão, muitos provedores hospedados que oferecem instâncias de banco de dados desativam este recurso, ou pelo menos cobrar extra por ele. Por exemplo, da última vez que verifiquei, o Windows Azure não suportava consultas de texto completo.

Os índices Fulltext também podem ser mais lentos de atualização. Se os dados mudarem a lote, pode haver alguns índices de actualização do gal em comparação com o padrão Index.

 14
Author: Vipin Jain, 2016-04-06 06:42:15
A verdadeira diferença são as metodologias de digitalização. Para pesquisa de texto completo, as palavras (termos) são usadas como chaves de hash - cada uma das quais está associada a uma série de documentos em que as chaves (termos) aparecem. É assim:
Document sets = {d1, d2, d3, d4, ... dn}
Term sets = {t1, t2, t3, .. tn}

Now term-document matrix (which term member of which document) can be represented as:

t1 -> {d1, d5, d9,.. dn}
t2 -> {d11, d50, d2,.. dn}
t3 -> {d23, d67, d34,.. dn}
:
tn -> {d90, d87, d57,.. dn}

Quando o pedido chegar em pedir "Traga - me todos os documentos que contêm a palavra/termo t1" - então o conjunto de documentos {d1, d5, d9,.. dn é devolvido.

Tu could hack a des-normalized table schema to store documents-each row in MySQL table will be considered as "document" and a TEXT column could contain a paragraph etc. O índice invertido irá conter os termos como teclas de hash e as linhas-ids como ids do documento.

Lembre-se que esta consulta SQL terá mais ou menos Desempenho O(1). A consulta será independente de

  1. Número de palavras / termos na coluna de texto
  2. o número de linhas / documentos correspondentes ao critérios
  3. o comprimento das palavras/termos

Por exemplo, este SQL pode ser disparado para extrair todas as linhas correspondentes à palavra indicada XYZ:

SELECT * 
FROM   my_table 
WHERE  MATCH (my_text_column) against ('XYZ' IN boolean mode) ;

Caveat: se adicionar ordem a esta consulta, a sua execução irá variar com base nos vários parâmetros, um dos quais é o número de linhas/documentos correspondentes. Por isso, cuidado.

No entanto, o semelhante não tem nada a ver com isto. Ele é forçado a analisar linearmente a sentença / cadeia e encontrar todos os termos correspondentes. Adicionar uma carta selvagem a bagunca. Ele funciona muito bem para pequenas cordas de comprimento, como você pode imaginar, mas vai falhar miseravelmente para frases mais longas. E definitivamente não é comparável quando se tem um parágrafo ou uma página inteira de texto, etc.
 9
Author: Kingz, 2015-04-01 05:04:35

O FTS é mais eficiente, poderoso (especialmente para quebra-palavras e funcionalidades derivadas) ... mas verifique os seus requisitos porque, por vezes, o DBs não suporta todas as línguas, por exemplo, o MSSQL não suporta o grego (veja nesta página http://msdn.microsoft.com/en-us/library/ms176076 (V=sql.110).aspx )

 3
Author: kamskyleo, 2012-02-09 15:13:22