AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Datenbanken Was ist die beste Lösung für eine Keywort-Filterung per SQL ?
Thema durchsuchen
Ansicht
Themen-Optionen

Was ist die beste Lösung für eine Keywort-Filterung per SQL ?

Ein Thema von Rollo62 · begonnen am 9. Jul 2021 · letzter Beitrag vom 12. Jul 2021
 
Delphi.Narium

Registriert seit: 27. Nov 2017
2.616 Beiträge
 
Delphi 7 Professional
 
#6

AW: Was ist die beste Lösung für eine Keywort-Filterung per SQL ?

  Alt 10. Jul 2021, 14:42
Vor Jahren hab' ich mir mal 'ne Suchmaschine für alle meine Quelltexte geschrieben. Die Dateien liegen halt auf diversen Festplatten rum.

Dazu gibt es nun eine Tabelle Quelltexte: Sie enthält eine eindeutige ID je Quelltext und den vollständigen Pfad zu dem Quelltext.

Dann gibt es eine Tabelle Wörter: Sie enthält alle gefundenen Wörter und eine eindeutige ID für das Wort. (Jedes Wort kommt in dieser Tabelle natürlich nur einmal vor.)

Dann gibt es noch eine Tabelle WortQuelltext: Sie stellt die Verbindung zwischen Quelltexte und Wörter her: Spalten sind WortID und QuelltextID.

Die Tabelle Wörter wird banal und einfach aufgebaut: Alles, was kein Buchstabe ist, wird durch einen Zeilenumbruch ersetzt. Das Ergebnis wird eindeutig sortiert. Groß-/Kleinschreibung wird dabei ignoriert. Jede Zeile enthält nun ein Wort.

Die Wörter werden (soweit nicht schon vorhanden) in die Tabelle Wörter eingefügt. Die Tabelle WortQuelltext wird mit den IDs der Wörter und der ID des Quelltextes befüllt.

Per SQL geht die Abfrage in etwa so:

SQL-Code:
select Wörter.Wort, Quelletxte.* from Quelletxte, WortQuelltext, Wörter
where Quelltexte.id = WortQuelltext.QuelltextID
and WortQuelltext.WortID = Wörter.id
and Wörter.Wort in ('eins',zwei'drei','ganz','viele',Wörter']
Index auf jede ID und auf die Wörter.

Ist verblüffend schnell und war in 'nem Tag implementiert, kann man analog natürlich auch auf Blob-Spalten, ... anwenden.

Prinzipiell entspricht die Struktur Deinem Vorschlag aus dem Eingangspost.

Soll das Ganze dann noch etwas fehlertoleranter werden, kann man neben den Wörtern auch noch diverse Spalten für SoundEx, phonetische Suchen (wie z. B. Kölner Phonetik), ... in der Tabelle Wörter anlegen. Da kommt es halt dann ein bisserl auf die konkreten Anforderungen an.

Achso: Da das so gut geklappt hat, gibt es das inzwischen auch für alle HTML-Seiten (wie z. B. ct-Archive von CDs), diverse Tutorials von anno schlagmichtot, Rezepte, ... (egal ob die zu durchsuchenden Texte nun irgendwo auf Datenträgern rumschwirren oder in Datenbanken gesammelt sind). Das Prinzip ist immer das Gleiche und das Schöne daran ist: Die Datenbank ist völlig egal.
  Mit Zitat antworten Zitat
 


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 18:29 Uhr.
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz