Ich habe gerade einen Beitrag gelesen, in dem "Volltextsuche" in SQL erwähnt wird.
Ich habe mich nur gefragt, was der Unterschied zwischen FTS und LIKE ist. Ich habe ein paar Artikel gelesen, konnte aber nichts finden, was es gut erklärt.
quelle
Ich habe gerade einen Beitrag gelesen, in dem "Volltextsuche" in SQL erwähnt wird.
Ich habe mich nur gefragt, was der Unterschied zwischen FTS und LIKE ist. Ich habe ein paar Artikel gelesen, konnte aber nichts finden, was es gut erklärt.
Im Allgemeinen gibt es einen Kompromiss zwischen "Präzision" und "Rückruf". Hohe Präzision bedeutet, dass weniger irrelevante Ergebnisse angezeigt werden (keine falsch positiven Ergebnisse), während ein hoher Rückruf bedeutet, dass weniger relevante Ergebnisse fehlen (keine falsch negativen Ergebnisse). Die Verwendung des LIKE-Operators bietet Ihnen 100% Präzision ohne Zugeständnisse für den Rückruf. Eine Volltextsuche bietet Ihnen viel Flexibilität, um die Genauigkeit für einen besseren Abruf zu verringern.
Die meisten Implementierungen für die Volltextsuche verwenden einen "invertierten Index". Dies ist ein Index, in dem die Schlüssel einzelne Begriffe sind und die zugehörigen Werte Datensätze sind, die den Begriff enthalten. Die Volltextsuche ist optimiert, um den Schnittpunkt, die Vereinigung usw. dieser Datensatzgruppen zu berechnen, und bietet normalerweise einen Ranking-Algorithmus, um zu quantifizieren, wie stark ein bestimmter Datensatz mit Suchschlüsselwörtern übereinstimmt.
Der SQL LIKE-Operator kann äußerst ineffizient sein. Wenn Sie es auf eine nicht indizierte Spalte anwenden, wird ein vollständiger Scan verwendet, um Übereinstimmungen zu finden (genau wie bei jeder Abfrage in einem nicht indizierten Feld). Wenn die Spalte indiziert ist, kann der Abgleich mit Indexschlüsseln durchgeführt werden, jedoch mit weitaus geringerer Effizienz als bei den meisten Indexsuchen. Im schlimmsten Fall verfügt das LIKE-Muster über führende Platzhalter, bei denen jeder Indexschlüssel überprüft werden muss. Im Gegensatz dazu können viele Informationsabrufsysteme die Unterstützung führender Platzhalter ermöglichen, indem Suffixbäume in ausgewählten Feldern vorkompiliert werden.
Weitere für die Volltextsuche typische Funktionen sind:
Bei FTS werden die einzelnen Wörter in einem Textfeld indiziert, um das Durchsuchen vieler Datensätze zu beschleunigen. Für die Verwendung von LIKE müssen Sie weiterhin eine Zeichenfolgensuche (linear oder ähnlich) innerhalb des Felds durchführen.
quelle
MySQL erstellt einen Index aus den Wörtern der aktivierten Volltextsuchspalte und führt Suchvorgänge für diesen Index durch. MySQL verwendet einen ausgeklügelten Algorithmus, um die mit der Suchabfrage übereinstimmenden Zeilen zu bestimmen.
Auch aus dieser SO Antwort :
quelle
Like verwendet nur Platzhalter und ist nicht so mächtig.
Volltext ermöglicht eine viel komplexere Suche, einschließlich And, Or, Not, sogar ähnlich klingender Ergebnisse (SOUNDEX) und vieler weiterer Elemente.
Ich würde mich mit SQL CONTAINS () FREETEXT () und verwandten Volltextsuchelementen befassen, um ein besseres Verständnis der verfügbaren Elemente zu erhalten.
quelle
Der wirkliche Unterschied liegt in den Scanmethoden. Bei der Volltextsuche werden die Wörter (Begriffe) als Hash-Schlüssel verwendet, von denen jeder einem Array von Dokumenten zugeordnet ist, in denen die Schlüssel (Begriffe) angezeigt werden.
Nun kann die Term-Dokument-Matrix (welches Term-Mitglied in welchem Dokument) wie folgt dargestellt werden:
Wenn die Anfrage nach "Alle Dokumente mit dem Wort / Begriff t1 abrufen" eingeht, wird der Dokumentensatz
{d1, d5, d9,.. dn
} zurückgegeben.Sie können ein de-normalisiertes Tabellenschema hacken, um Dokumente zu speichern. Jede Zeile in der MySQL-Tabelle wird als "Dokument" betrachtet und eine TEXT-Spalte kann einen Absatz usw. enthalten. Der invertierte Index enthält die Begriffe als Hash-Schlüssel und die Zeilen-IDs als Dokument-IDs.
Denken Sie daran, dass diese SQL-Abfrage mehr oder weniger O (1) -Leistung aufweist. Die Abfrage ist unabhängig von
Zum Beispiel könnte diese SQL ausgelöst werden, um alle Zeilen zu extrahieren, die dem angegebenen Wort XYZ entsprechen:
Vorsichtsmaßnahme: Wenn Sie dieser Abfrage ORDER BY hinzufügen, variieren Ihre Laufzeiten basierend auf den verschiedenen Parametern, von denen einer die Anzahl der übereinstimmenden Zeilen / Dokumente ist. Hüte dich.
Das LIKE hat jedoch nichts davon. Es ist gezwungen, den Satz / die Zeichenfolge linear zu scannen und alle übereinstimmenden Begriffe zu finden. Das Hinzufügen von Platzhaltern trägt zum Durcheinander bei. Es funktioniert hervorragend für kleine Saiten, wie Sie sich vorstellen können, wird aber bei längeren Sätzen kläglich scheitern. Und definitiv nicht vergleichbar, wenn Sie einen Absatz oder eine ganze Textseite usw. haben.
quelle
FTS ist effizienter, leistungsfähiger (insbesondere für Word Breaker und Stemming-Funktionen) ... aber überprüfen Sie Ihre Anforderungen, da DBs manchmal nicht alle Sprachen unterstützen, z. B. unterstützt MSSQL kein Griechisch (siehe auf dieser Seite http: // msdn). microsoft.com/en-us/library/ms176076(v=sql.110).aspx )
quelle