Announcement

Collapse
No announcement yet.

Volltext Recherche in großen Datenbanken

Collapse
X
  • Filter
  • Time
  • Show
Clear All
new posts

  • Volltext Recherche in großen Datenbanken

    Unsere Anwendung umfäßt mehrere Katalogdatenbanken (dBase). Die Datenbanken umfassen bis zu 600000 Datensätze je Datenbank .Um Volltextabfragen zu realisieren, arbeiten wir bei der Recherche derzeit mit LIKE "%...%". Die Recherchezeit ist jedoch auf Dauer nicht zufriedenstellend. Zu VFP gibt's das Zusatzmodul phDBASE (Korenthal Associates, Inc), welches über einen speziellen Index, Volltextrecherchen sogar über mehere Felder gleichzeitig, in Sekundenschnelle realisiert. Leider gibt es das wohl nicht für Delphi ...<br><br>
    Kennt jemand andere Möglichkeiten, Volltextrecherchen zu realisieren ?

  • #2
    Hallo,

    falls ein Umstieg auf eine SQL-Datenbank in Frage kommt, hätte der Microsoft SQL Server 7 eine indizierte Volltextsuche (d.h. er übernimmt die verschiedenen Wörter in ein spezielles Wörterbuch, so dass die Suche sehr schnell ist)

    Comment


    • #3
      Hallo Ralf, hallo Andreas,

      ich arbeite ebenfalls an der Verwaltung grosser Artikelstände, jedoch in einer InterBase Datenbank. Auch diese ist ja bei LIKE '%..%' nicht gerade schnell ;-) . Ich muss dieses Problem zwar noch nicht lösen, weiss aber das es bald kommen wird.

      Mein erster Gedanke daran war, die Funktion des "speziellen Wörterbuches" des SQL Server in einigen Tabellen nachzubilden. Die Verwaltung würde ich in einer DLL unterbringen und als UDF einbinden.

      Ich brauche hier wohl eine Tabelle zur Aufnahme der Wörter, wobei jedes gefundene Wort hier mit einem Integer-Wert als PK eingetragen wird. Weiterhin muss eine Übersetzungs-Tabelle her, die den PK des Datensatz und den PK der Wörter enthält (evtl. noch um Tabellenname und Feldname erweitert). Sinnvoll wäre sicherlich noch eine Tabelle mit Wörtern, die nicht indiziert werden sollen weil sie zu allgemein sind (z.B. ein, die, das,...).

      Diese Tabellen werden dann durch Aufruf der DLL-Funktionen in den verschiedenen Triggern gewartet, eine Abfrage muss entsprechend angepasst werden.

      Da dies bisher nur mein Gedanke war, wie solche eine Funktion nachgebaut werden kann, nun meine Frage an die Entwickler-Gemeinde:

      - Ist dieser Lösungsansatz mit vertretbarem Aufwand umsetzbar?
      - Habe ich Grundlegendes vergessen?
      - Schiesse ich mir wohl ein Performance-Eigentor? Ich muss ja nach jedem Insert oder Modify den Inhalt der Datensatzfelder auseinandernehmen, analysieren und weitere Tabellen verändern.
      - Ist die Forderung nach einer Volltextrecherche bereits ein K.O.-Kriterium für bzw. gegen ein Datenbanksystem?

      Würde mich freuen eure Meinungen zu hören.

      Gruß, Fran

      Comment


      • #4
        Hallo,

        eine Forderung nach einer Volltextrecherche ist aus meiner Sicht ein K.O.-Kriterium für oder gegen eine SQL-Datenbank. Im Fall des SQL Servers kann Microsoft auf die jahrelang erproble Technologie des Index Servers zurückgreifen, der ja auch für komplette Webs (inklusive DOC, PDF, XLS und HTML-Seiten) eine sehr leistungsfähige Volltextsuche bereitstellt (der Nachfolger des Index Servers ist ab Windows 2000 fest im Betriebssystem integriert und wird dort für die Suche nach Dateien über den Dateiinhalt verwendet). Wenn man sich dann einmal die Grösse der Indexdateien anschaut, können keine vollständigen Wörter gespeichert werden, sondern wohl eher kurze Hash-Werte. Außerdem wird für die erweiterten Suchfunktionen (NEAR etc.) auch eine Positionsangabe eines bestimmten Wortes im Text benötigt, um nahe beieinanderstehende Wörter suchen zu können.

        Eine eigene Lösung ist nur dann sinnvoll, wenn der Einsatz sich auf moderate Datenmengen und wenige Suchfelder beschränkt, bei denen eventuell sogar die Anzahl der unterschiedlichen Suchbegriffe relativ niedrig ist. Ein derartige Wörter-Index macht auch nur dann Sinn, wenn der Text bei jedem INSERT/UPDATE neu auseinandergenommen und in den eigenen Index-Tabellen abgelegt wird

        Comment


        • #5
          Ich habe in der Zwischenzeit Rubicon gekauft .Das sind mehrere Komponenten, die genau das machen, was Du da entwickeln möchtest. Eine Volltextrecherche über 600000 Records dauert jetzt zwischen 1-3 Sekunden. Allerdings hatte ich damit so einige Startprobleme. Info's unter www.FullTextSearch.com .

          Gruß Ral

          Comment

          Working...
          X