Wie funktioniert Suche in Foren?



  • Die Texte der Forenbeiträge werden ja wohl in einer DB gespeichert. Wird da für die Suche noch ein extra Index angelegt? Wird das auch über eine DB gemacht oder irgendwie anders?



  • Ölkjhgfdsa schrieb:

    Die Texte der Forenbeiträge werden ja wohl in einer DB gespeichert. Wird da für die Suche noch ein extra Index angelegt? Wird das auch über eine DB gemacht oder irgendwie anders?

    Die Suche in Foren funktioniert garnicht 😃 Ich lasse die meisten Foren per Google durchsuchen und erhalten weit aus bessere Ergebnisse wie die eingebaute Suche.

    Die Beiträge sind meist in einer Datenbank gesichert und dort kannst du auch nach Text in deinen Datensätzen suchen lassen, aber anscheinend hat Google das weit besser drauf 😉

    Schau dir doch bei Interesse ein paar OpenSource-Foren an...

    Gruß Chris



  • Ölkjhgfdsa schrieb:

    Die Texte der Forenbeiträge werden ja wohl in einer DB gespeichert. Wird da für die Suche noch ein extra Index angelegt?

    DBMS haben mittlerweile eingebaute Volltextsuchmaschinen die ggf. über Indizierung die Texte durchsuchen können. Daneben gibt es auch noch externe Frameworks, die das ganze DBMS unabhängig machen können.



  • Ölkjhgfdsa schrieb:

    Die Texte der Forenbeiträge werden ja wohl in einer DB gespeichert. Wird da für die Suche noch ein extra Index angelegt? Wird das auch über eine DB gemacht oder irgendwie anders?

    Das phpBB macht das so:

    Es wird zusätzlich zur Speicherung der Texte in einer DB-Tabelle eine Wortliste angelegt, und eine Verknüpfungstabelle.

    Wird ein neuer Eintrag gespeichert, läuft das so ab:

    1. Beitrag in der DB speichern, als kompletten Datensatz.
    2. Das Posting in alle enthaltenen Wörter splitten
    3. foreach dieser Wörter dieses Wort in einer Wortlist-Tabelle als neues Wort eintragen, oder falls das Wort bereits vorhanden ist die WORDID dieses Worts in einer Liste speichern
    4. Jetzt haben wir eine Liste, die für alle Wörter des Postings die WORDIDs enthält
    5. foreach dieser IDs nun in einer Referenztabelle einen Eintrag speichern, der aus (WORDID, POSTINGID) besteht

    Das funktioniert soweit auch noch ganz gut, allerdings werden diese Tabellen RIESIG. Die hat schnell Einträge im oberen zweistelligen Millionenbereich.

    Für neue Postings ist der Algorithmus jetzt noch relativ einfach, man kann sich aber vorstellen, daß er für Edit-Operationen schon unschön wird, man muß für die Posting-ID alle Verknüpfungen entfernen, und dann die Sache wiederholen. Das phpBB kommt da bei langsamen Datenbank leicht mal ins Schleudern, wenn das Script via Timeout abgebrochen wird.

    Eine Suche läuft dann so ab:

    Der Suchstring wird mit Hilfe der Wordlist tokenisiert, d.h. man ermittelt für alle gesuchten Begriffe die IDs aus WORDLIST, und macht sich dann auf die Suche nach den zugehörigen Posting-IDs.

    Das geht auch noch ziemlich zuverlässig, aber für Wildcards ist das nicht mehr ganz so nett - denn jedes Wildcard erzeugt nicht EINE WORDLIST-ID, sondern n Stück! Und dadurch kann man rasch eine nette Treffermenge erzeugen. Um das im Griff zu behalten, hat das phpBB eine einfache Methode: ein LIMIT auf der SQL-Treffermenge. 🤡

    Und deswegen sind die Forensuchen üblicherweise schlecht.

    Eine Konsequenz daraus ist aber auch, daß die Forensuche umso besser funktioniert, je "individueller" die Begriffe sind. Eine Suche nach "for Beispiel" liefert nur Müll, da zu viele Treffer, und dann wird einfach via LIMIT gekappt. Hier gewinnt Google klar, weil da diese ganzen kontextsensitiven Sachen (Abstand der Wörter, Wiederholungen, etc) zur Sortierung verwendet werden.

    Sucht man aber einfach nur nach "Ohrenschmalz", hat man ein schnelles und eindeutiges Trefferergebnis.



  • Danke für den ausführlichen Einblick, das war sehr interessant zu lesen.

    Gruß Chris



  • Ich frage mich wieviele in Anschluss an diesen Thread nach "Ohrenschmalz" gesucht haben ... 😃



  • Ich habs auch getan 😃
    Und um es den anderen zu ersparen: Das wort kam (bis jetzt) schon in 8 Threads vor.



  • Kleine Ergänzung:

    Es macht Sinn, "Unworttabellen" zu verwenden (zB "und", "oder" und so) und eine
    bestimmte Mindestlänge der Suchbegriffe festzulegen. Das ufert sonst entsetzlich
    aus und wird irgendwann (bei zB 2 Mio "und") sinnlos bis unbrauchbar.

    kA ob das in der Forensoftware auch so ist, nur meine Erfahrung ...



  • Suche nach "und" liefert "Keine Beiträge entsprechen Ihren Kriterien."
    Also nehme ich an, dass es bei der Forensoftware so ist.

    Aber tief im Inneren ist sie strohdumm. Fuck you, Forensoftware!



  • Oft wird der von Marc++us beschriebene Prozess auch noch mit Hilfe eines sog. "Stemmers" optimiert.
    Dabei wird jedes Wort auf seinen Stamm "reduziert" (grammatikalisch, das Wort wird dadurch nicht unbedingt kürzer sondern manchmal auch länger).

    Die so modifizierten Wörter werden dann in die Wortliste eingetragen bzw. in dieser gesucht.

    Also quasi
    "Häuser" => "Haus"
    "Hauses" => "Haus"
    "gegangen" => "gehen"
    "gehe" => "gehen"
    etc.

    Wobei das für verschiedene Sprachen verschieden gut funktioniert. Und ganz doof wird es wenn ein Sprachen-Mix verwendet wird, wie es in Informatik Fach-Foren ja nicht unüblich ist (Deutsch & Englisch).

    Das führt einerseits zu "besseren" Ergebnissen (ich will ja üblicherweise Beiträge mit "ist kaputtgegangen" finden wenn ich nach "kaputtgehen" suche), einer kleineren Wortliste, sowie auch zu einer kleineren Verknüpfungsliste.

    Andrerseits führt es auch zu mehr Ergebnissen. Wenn das Suchergebnis einfach mit LIMIT begrenzt wird, und vorher nicht "schlau" sortiert, kann das auch ein Nachteil sein.

    ----

    Scheppertreiber schrieb:

    Es macht Sinn, "Unworttabellen" zu verwenden (zB "und", "oder" und so)

    Ich kenne das als Stoppwort-Liste.



  • Ohrenkneifer schrieb:

    Fuck you

    Da hat aber jemand die Forensoftware ausgetrickst. Fuck you sollte da eigentlich stehen 😃


Anmelden zum Antworten