Dieter: Sitesearch - Ein halbes Dutzend Fragen

Hallo Forumer

ich beschäftige mich gerade mit verschiedenen Möglichkeiten um eine Suche auf einer Website zu realisieren und habe daher ein paar Fragen:

Generell zur Funktionsweise einer Indexbasierten Suche:

So wie ich es verstanden habe "frisst" sich ein Skript durch die WebSite und baut einen Index mit allen vorkommenden Worten (bzw. erst ab einer Mindestlänge von z.B. 3 Chars), den es in einer DB-Table oder einer TXT-Datei ablegt.
Also z.B.

Apfel -> 1,4
Banane-> 5,6
Baum->1,4,5,6
Haus->2

wobei die Ziffern wiederum IDs einer anderen Table (Seiten-Table) sind wo dann z.B. steht

(ID,URL,Title)
1 -> www.meineSeite.de/apfelbaum.html, Der Apfelbaum
etc.

Die Suchfunktion greift dann zuerst auf die Index-Datei zu und präsentiert dann die Ergebnisse anhand der Seiten-Table.

Frage, habe ich das nicht richtig verstanden, oder liege ich völlig falsch? ;-)

Wenn ich jetzt eine Wichtung einbauen möchte müsste das dann ja ungefähr so aussehen:

Apfel -> 1(10),4(20)
Banane-> 5(4),6(10)
Baum->1(3),4(6),5(8),6(9)
Haus->2(10)

oder besser ?
Apfel -> 1,10
Apfel -> 4,20
Banane-> 5,4
Banae -> 6,10

etc. wobei die zweite Zahl jeweils die Wertigkeit darstellen soll

Da bekomme ich natürlich viel mehr Records als bei Variante 1, welches ist der bessere Ansatz?

Wenn der Content der WebSite schon in einer Datenbank (MySQL) steckt, lohnt es sich dann trotzdem ein extra Skript zu verwenden welches einen Index baut, oder ist MySQL ausreichend schnell, was meint ihr?

Kennt jemand dieses Skript und kann es ggf. empfehlen bzw. davon abraten?
http://www.perlfect.com/freescripts/search

So bevor das hier noch länger wird höre ich lieber auf, da lange Postings doch eher abtörnend sind.

Ich freue mich auf Eure Antworten und auch URLs zu diesem Thema.

Viele Grüße

Euer Dieter

  1. hallo,

    ich beschäftige mich gerade mit verschiedenen Möglichkeiten um eine Suche auf einer Website zu realisieren
    So wie ich es verstanden habe "frisst" sich ein Skript durch die WebSite und baut einen Index mit allen vorkommenden Worten

    nö. Der Mechanismus, den du beschreibst, mag bei dem Beispiel, das du dir angeschaut hast so, funktionieren, ist aber keineswegs allgemein immer _so_ anzutreffen.

    Suchfunktionen werden in Scripts (PERL, PHP ...) über reguläre Ausdrücke realisiert. Damit kann man ziemlich sehr viel machen (nicht nur suchen und/oder ersetzen), wenn man weiß, wie's geht. Ich halte den korrekten und gekonnten Umgang mit regulären Ausdrücken für die "Krone" der Programmierung mit Scriptsprachen.

    Christoph S.

  2. Hi Dieter,

    ich beschäftige mich gerade mit verschiedenen Möglichkeiten um eine
    Suche auf einer Website zu realisieren

    faongen wir doch gleich mal da an, wo man immer anfangen sollte.
    Nämlich:

    Wie lautet die Aufgabenstellung?

    Im Klartext: Was bedeutet in Deinem Kontext "Suchen"?

    Möchtest Du nur (!) in der Lage sein, Worte (und logische Verknüpfungen derselben) zu finden? Oder sollen es auch (!) Phrasen sein (also Textstellen beliebiger Länge mit beliebigen Zeichen drin)?

    Die Archiv-Suche des hiesigen Portals ist eine Phrasen-Suche.

    Generell zur Funktionsweise einer Indexbasierten Suche:

    Ah, ja - das schränkt Dich möglicherweise auf Worte ein.
    (Obwohl man das andererseits auch korrigieren kann - Christian, falls Du mitliest: Deinen Ansatz für die neue Self-Suche mit dem nachgeschalteten Phrasenfilter habe ich bei mir inzwischen erfolgreich implementiert.)

    So wie ich es verstanden habe "frisst" sich ein Skript durch die
    WebSite und baut einen Index mit allen vorkommenden Worten

    Kann sein - muß aber nicht.

    (bzw. erst ab einer Mindestlänge von z.B. 3 Chars),

    Kann auch sein. Bei mySQL ist die Mindestlänge beispielsweise 4 Zeichen (sofern man sie nicht im mySQL-Quelltext patched wie ich ...).

    den es in einer DB-Table oder einer TXT-Datei ablegt.

    Yep. Wobei TXT-Datei massiv kontraproduktiv wäre. (-> ersetzt O(log n) durch O(n))

    Apfel -> 1,4
    Banane-> 5,6
    Baum->1,4,5,6
    Haus->2
    wobei die Ziffern wiederum IDs einer anderen Table (Seiten-Table)
    sind wo dann z.B. steht

    Deine Syntax suggeriert die Semantik linearer Listen - was wiederum zu langsam wäre.
    Denn dann hinge der Erfolg Deiner Struktur von der Projektivität der Worte ab, und es gäbe sehr "schlechte" Suchanfragen, welche Deine Suche in die Knie zwingen könnten. (Stichwort: "Stop-Wort-Listen" - löst das Problem zwar nicht, bekämpft aber die Symptome.)

    (ID,URL,Title)
    1 -> www.meineSeite.de/apfelbaum.html, Der Apfelbaum
    etc.

    Dies wiederum (der zweite Teil der Abbildung) ist durchaus sinnvoll.

    Die Suchfunktion greift dann zuerst auf die Index-Datei zu und
    präsentiert dann die Ergebnisse anhand der Seiten-Table.

    Im Prinzip ja. (Es kommt allerdings darauf an, wann und wie Du weitere Anforderungen einfließen lassen willst. (Stichwort: "Ranking")

    Frage, habe ich das nicht richtig verstanden, oder liege ich völlig
    falsch? ;-)

    Für einen bestimmten Teilbereich liegst Du richtig.
    Ersetze jetzt noch "Listen" durch "Bäume", dann kommt das schon sehr gut hin.

    Wenn ich jetzt eine Wichtung einbauen möchte müsste das dann ja
    ungefähr so aussehen:
    Apfel -> 1(10),4(20)
    Banane-> 5(4),6(10)
    Baum->1(3),4(6),5(8),6(9)
    Haus->2(10)
    oder besser ?
    Apfel -> 1,10
    Apfel -> 4,20
    Banane-> 5,4
    Banae -> 6,10

    Das zweite ist besser.
    (Überlege Dir, warum Du wie auf die Ergebnisse zugreifen willst ...)

    Da bekomme ich natürlich viel mehr Records als bei Variante 1,
    welches ist der bessere Ansatz?

    Trotzdem. ;-)

    Wenn der Content der WebSite schon in einer Datenbank (MySQL)
    steckt, lohnt es sich dann trotzdem ein extra Skript zu verwenden
    welches einen Index baut, oder ist MySQL ausreichend schnell,
    was meint ihr?

    Lesetip: mySQL / FULLTEXT-Index. (Oben bereits erwähnt, funktioniert prima, bereits in 3.23.x - in 4.y wird es noch viel besser werden.)

    Kennt jemand dieses Skript und kann es ggf. empfehlen bzw. davon
    abraten?

    Aufgabenstellung? Wie viele Dokumente? Brauchst Du Phrasen oder nicht?

    So bevor das hier noch länger wird höre ich lieber auf, da lange
    Postings doch eher abtörnend sind.

    Ganz im Gegenteil: Du stammelst nicht eine bruchstückhafte Frage (oder gar Forderung) hin, sondern Du sinnierst ganz allgemein über die Grundlagen der Materie - da mache ich gerne mit.
    (Dieses Posting ist mehr zur 'Verbreiterung' des Threads als zur Beantwortung aller Fragen gedacht.)

    Viele Grüße
          Michael