ab wievielen Zeichen muss eine Suche funktionieren

Dieses Thema im Forum "Entwicklung von Web-Software" wurde erstellt von Titus, 25 März 2009.

  1. Titus

    Titus Goldmember

    Auf Grund der dortigen Thematik hatte ich die Suche auch schon gequält und wurde bitter enttäuscht :rolleyes:

    wie wenige Zeichen muss eine Suche können?
    Sicherlich Themenabhängig, aber ich sage 2 Zeichen tun manchmal not, 3 sind eigentlich absolutes must have, ab 4 ist es eigentlich nur noch bedingt zu gebrauchen. auf grund dessen ist es manchmal recht unbrauchbar eine MYSQL Volltextsuche zu verwenden die auch nur mit 4 Zeichen halbwegs performant arbeitet

    In einer Welt wo alles mit 2 und 3 stelligen Kürzeln abgedeckt ist, was soll man da noch mit Suchbegriffen die min. 4 Zeichen +X haben müssen!?


    Eigener Denkansatz war dazu mal eine whitelist zu machen welche automatisch bei bestimmten Wörten die zu kurz sind um erfasst zu werden, dem text ein Wort hinzufügt das im Index landet hier wäre z.b. "vb" als whitlistwort, um das zu finden müsste man nun "k3y_vb" optional in einen Hidden BBcode, als Wort dem text hinzufügen, die Suchfunktion müsste da natürlich zu kurze Wörter automatisch umschreiben, anders lässt sich IMO das mysqlgeraffel aber kaum gebrauchen :rolleyes:
     
  2. Gokux

    Gokux O|²

    Ich sage als Benutzer ab einem Zeichen. Leider kostet jedes Zeichen weniger, Perfmorance und Platz.

    Zumindest WL wird sich mit der SQL unterstützung im WCF 1.2 oder 1.3, sicher was neues einfallen lassen (müssen).
     
  3. rellek

    rellek relativ sensationell Mitarbeiter

    Also 3 denk ich mal auf jeden Fall.

    Bei 2 wirds schon schwierig. Gut, "vb" ist nun relativ eindeutig, aber ein "MS" wie Microsoft würde dann auch einen "Hamster" finden. Das wäre auch nicht wirklich im Sinne des Erfinders. Oder die Suchfunktion sucht tatsächlich nur ganze Wörter. Da weiss ich allerdings nicht, wie die beim wBB3 das nun im Konkreten macht. Die Hervorhebung im Beitrag dann zeigt auf jeden Fall auch innerhalb eines Wortes.
    Eine Whitelist wäre ein interessanter Ansatz, im wBB2 (ab 2.2 glaub ich?) gabs ja z.B. eine Whitelist für Suchbegriffe. Wie beliebt die allerdings war, kann ich dir nicht sagen. Meine war aber immer leer. Und die andere Frage bei so einer Whitelist ist ja auch, in wie fern der Admin an alles denkt, was der Benutzer suchen können wollte.

    Andererseits sollte das aber auch wiederrum eindeutig sein, denn beispielsweise Benutzernamen mit 2 Zeichen sind ja oftmals auch erlaubt. Da sollte man auch nach suchen können.
     
  4. Titus

    Titus Goldmember

    seit es Tags gibt kann man ja auch darauf zurückgreifen, wir nutzen aber im vB definitiv die Whitelist mit dem Foreneigenen Suchindes der auf 3 Zeichen läuft, whitelist sind halt kürzel die man zu finden erwartet

    bei einem Computerforum wird man gängige kürzel wie HD GT SD CF usw ja noch mal in einer ruhigen minute zusammenschreiben können, bzw werden in den Communityforen vielleicht auch mal gepflegt ;)

    im Besispiel von MS könnte man durchaus das ganze um eine optionale synonymangabe erweitern, der statt einem standardpräfix wie im Beispiel "K3y_"+kürzel dann eben direkt "Microsoft" angibt, stellt man das in einen bereich der bei der Anzeige im Thread nicht geparst wird sollte das auch kein problem sein

    natürlich besteht immer die Möglichkeit auf google auszuweichen, aber die wenigsten Benutzer werden das wirklich machen bzw ist es bei einer nicht gerade dank SEO-Optimierung vorhandenen Ordnerstruktur das dann schwer auf einen gewissen bereich einzugrenzen
    Die Seiten müssen auch erst mal indexiert sein, was evtl bei geschlossenen bereichen das ganze verunmöglicht
     
  5. Gokux

    Gokux O|²

    Übrigens, wer im WBB3 Wörter mit 2 oder 3 Zeichen suchen will, soll "*" als Platzhalter verwenden. ;)
    Z.B. mit "*vb*" (ohne "") findet man alles mit "vB" und "vBulletin".
     
  6. rellek

    rellek relativ sensationell Mitarbeiter

    [quote='Titus',index.php?page=Thread&postID=628#post628]Die Seiten müssen auch erst mal indexiert sein, was evtl bei geschlossenen bereichen das ganze verunmöglicht [/quote]
    Wobei das mittlerweile recht schnell geht. Gut, brauchts auch erst nen Rank für und sone Sitemap hilft auch weiter, aber das seh ich oft bei WordPress-Weblogs (sogar meins!), da is das 2 Minuten nachm Posten schon bei Google drin.
    Das klappt auch bei Foren. Aber da wohl noch nicht ganz so automatisch... Also WeWoTa brauchts 1-2 Tage durchschnittlich.

    Zu so kürzeln wie HD oder SD oder CF muss man noch sagen, dass die oft auch nicht allein kommen. Also bei HD fällt dann oft noch der Begriff HDMI, der ja durch 4 Zeichen nicht mehr von dem Limit betroffen wäre... GT - da fiele mir jetzt die GeForce 7900GT ein, könnte man nach 7900gt suchen (was ja MySQL-Volltext zulässt), SD findet sich oftmals über SD-Karte und CF (du meinst Cross Fire?) - ja gut das könnte ggf. schwer werden.

    Hm mit der Synonymangabe. Also wenns SO schlimm ist, dann könnte man auch die wBB-Zensurfunktion missbrauchen und dann kommt halt nicht MS sondern Microsoft in die Datenbank rein. Nja gut, anderer Frage wäre wieder, wie wahrscheinlich das ist, dass "MS" das relevanteste an dem ganzen Beitrag ist und Microsoft dennoch nicht einmal ausgeschrieben ist. Weil entweder gehts um ein Produkt von denen, dann ist der Name des Produkts das bessere Stichwort oder es geht um Microsoft selber, dann ists aber nicht sehr wahrscheinlich, dass immer nur MS geschrieben wird. Denk ich zumindest?
     
  7. Titus

    Titus Goldmember

    [quote='Gokux',index.php?page=Thread&postID=629#post629]"*vb*"[/quote]

    wobei nach einem kurzen Test trozdem nur vbulletin stellen gefunden werden, bzw 1x vb<-..... wo eine verbindung existiert und somit als längeres Wort gilt

    @rellek
    ja meist wird das in kombination genutzt, da "-" minus wohl nicht als trenner gesehen wird schon mal ein fortschritt, trozdem möchte ich sehen wie du nach ION suchst, _nur_ eine 8800 GTX findest oder evtl eine GTX 285 wie sie ja korrekt heisst

    wenn du hingegen einen S3 TDI suchst, wirst drauf hoffen müssen das irgendein Held tatsächlich s3tdi geschrieben hat, oder c63 amg keine change in einer normalen 4-Zeichensuche, bei BMW mit M3 M5 usw hast du total die A****-Karte

    Die Zensurfunktion dürfte nur bei der Beitragsausgabe greifen, der Text würde also frühestens erfasst wenn dieser Zitiert wird, also keinerlei hilfe beim Problem
     
  8. rellek

    rellek relativ sensationell Mitarbeiter

    [quote='Titus',index.php?page=Thread&postID=637#post637]Die Zensurfunktion dürfte nur bei der Beitragsausgabe greifen, der Text würde also frühestens erfasst wenn dieser Zitiert wird, also keinerlei hilfe beim Problem [/quote]

    Hm gerade da bin ich mir nicht sicher. Weil in älteren Versionen (wBB 1.1.1, ich glaube auch 2.x noch) hab ich meinen zensierten Beitrag gesehen, auch beim Edit. Wenn das nur für Darstellungszwecke zensiert wird, dann müsst ich ja in der Edit-Box mein böses Wort stehen haben?
     
  9. Titus

    Titus Goldmember

    keine Ahnung, bei anderen Forensystemen wo ich den Code betrachtet hab greift das normal nur bei der Darstellung
    die Nachteile von Plugin/Hooksystemen ist das man nicht mal mehr ungewollt mit dem Quellcode in kontakt kommt wenn man primär Anwender ist :(
     
  10. Sukram

    Sukram Member

    Es kommt meiner Meinung drauf an. Es ist z. B. sinnvoll mal nach Abkürzungen zu suchen, aber wieder zu viel des guten, wenn ich wegen einzelnen Buchstaben da zu viele Ergebnisse bekomme. So pauschal könnte man das von daher nicht sagen. Minimum denke ich allerdings manchmal schon 3 Zeichen, manchmal könnten es aber auch mehr oder weniger sein.
     
  11. GameR

    GameR Guest

    Also prinzipiell müsste man hier eine Kosten- und Nutzenrechnung führen. Je kleiner die Anzahl, des so mehr Speicherplatz benötigst du. Ob die Suche jetzt 2, 3, 4 Buchstaben hat, ist aber für das Prinzip erst mal egal. Wenn du dir die Mühe machst, kannst du aber die Wörter auf 4 Buchstaben beschränken und eine Art Weißen- und Schwarzelist einführen. Wenn man hier nun ordentlich agiert kann man sogar Abkürzungen zulassen oder ganze Produktbezeichnungen aufnehmen. (AMD Athlon X4, Intel Core i7) Mit der Schwarzenliste kannst du dann alle sinnfreien Wörter sperren. (ich, du, er, sie, es, the, das, die, when, do usw.).
    Auch Wildcard kannst du so effektiv einbauen. Das Problem wird hierbei aber dann die Relevanz Berechnung, wobei es dafür schon gute zu finden gibt.
    Kurz um, du kannst mit einer Weißtenliste sowie einer Schwarzenliste viel erreichen und das System flexibel machen ohne das du zu viel Speicherplatz benötigst.

    Zum Thema WoltLab Suche. Diese verwendet die Standardvolltextsuche von MySQL. Dieses ist mit den gängigen Suchalgorithmen vergleichbar. Das heißt, die Suche geht beim Abspeichern den Beitrag Wort für Wort durch, wobei zu kleine Wörter ignoriert werden, ebenso werden Wörter auf einer Schwarzenliste ignoriert. Dann wird das Vorkommen der Wörter gezählt und dies in zusammen Hang gespeichert.
    Code:
    Suchindex:
    
    *--------*-----------*--------*
    | WortID | Vorkommen | TextID |
    *--------|-----------|--------*
    |  5 	 | 10        | 12     |
    *--------|-----------|--------|
    |  5 	 | 5         | 10     |
    *--------*-----------*--------*
    Wenn man das jetzt als Beispiel nimmt, würde eine Person nach dem Wort mit der ID5 suchen. (hier fiktiv die Wort ID), hätte der Text mit der ID 12 die Relevant von 1.00, während der Text mit der ID 10 nur die Relevanz von 0.50 hätte. Das liegt in dem Fall an dem Vorkommen und mehr als 100% kann ein Text nicht haben, nämlich genau dann, wenn das Wort am meisten in ihm vorkommt. Und hier fängt dann an die Syntax der Volltextsuche zu wirken, die du ebenso nachbilden kannst. Du kannst so mit Und, Oder verknüpfen und eine Berechnung der Relevanz ausführen, so das ein Vorkommen beider Wörter stärker wird, als wenn nur eines vorkommt. Der Volltext-Index tut genau dieses. Er ist schnell, komplex und beherrscht viele Möglichkeiten. Nachteil ist aber, dass er unflexibelist.
    Ach ja, bei der MySQL-Volltext suche wird nur "vb*" als Wildcard aktzeptiert, aber nicht "*vb" oder "*vb*", dass ist nur bei der Suche mit LIKE möglich, diese ist aber bei vielen Einträgen in einem Text sau langsam und der ganze Text müsste einen Index haben. Das ist dann der Vorteil der eigenen Volltext-Suche, da hier mit "LIKE" auf den Wortindex zugegriffen wird, und man somit auch "*vb*" oder "*vb" verwenden kann. Wie gesagt, her ist eine Kosten-Nutzenrechnung nötig, sofern man nur für eine Datenbank programmiert. Sobald es mehrer werden, ist es oftmals nötig einen eigenen Volltext-Index zu erstellen und die suche Selbst zu implementieren.
     
  12. Titus

    Titus Goldmember

    [quote='GameR',index.php?page=Thread&postID=650#post650]"vb*" als Wildcard aktzeptiert, aber nicht "*vb" oder "*vb*"[/quote]

    warum findet man mit letzterem dann etwas?
    bei *vb ist klar das nichts gefunden wird, da ja nur wörter mit min. 4 zeichen im Index landen, wäre dann schon zufall wenn da noch was dranhängt

    außerdem ist mir nicht bekannt das man bei mysql eine whitelist führen könnte (blacklist IMO auch nicht), selbst wenn, wird diese nur serverseitig möglich sein zu pflegen, also nicht für jeden nutzbar

    die kosten nutzen rechnung ist irrelevant, da speicherplatz an sich kein kostenfaktor ist, ob man sich mit einem Index ab 2 zeichen aber eine große freude macht
    durch mysql-volltext ist man halt etwas limitiert, da kein eigener Index vorgesehen ist wäre Sphinx-Suche als alternative evtl eine option, aber das wird dem Großteil der Kundschaft auch nicht viel helfen, die anderen könnten auch mysql ausreizen oder halt damit leben nicht alles finden zu können
     
  13. GameR

    GameR Guest

    Titus, ich wäre dir Dankbar, wenn du deine Aussagen auch mit beweisen belegen würdest.

    Volltextsuche MySQL-Volltext suche bietet eine Suchsyntax, diese erlaubt den * nur am Ende des Wortes nicht am Anfang.
    Eine Schwarzeliste ist ebenso Vorhanden, leider aber Hardcoded. (Wer denkt sich so einen Schwachsinn aus? Sun schämt euch.)

    Zudem sagte ich nicht, dass diese Liste Pflegbar ist (Schwarzeliste), noch, dass es eine Weißeliste gibt. Ich wäre dir also ebenso dankbar, wenn du den Text genauer lesen würdest, als eine Behauptung aufzustellen, die ich gar nicht getätigt habe.

    Eine Kosten/Nutzenrechnung ist niemals irrelevant. Alleine aus einem Grund => Zwar mag der Speicherplatz nicht die Rolle spielen, die man vermutet, aber das erstellen des Index tut dieses. Je kleiner die Wörter sind, des so länger braucht ein Algorithmus um den Text zu indexieren. Und gerade der frisst bei sowas die meiste Zeit. Volltextsuche hin, Volltextsuche her, am Ende entscheidet die Person selbst, was er braucht. Einen schnellen, dafür aber eine nicht so flexible Suche (in dem Fall MySQL-Volltext), oder eine flexible suche, die aber langsamer sein kann und den Server stärker belastet. (Eigener Suchindex)
    Vorteile haben beide Arten der Suche.
     
  14. Titus

    Titus Goldmember

    beweisen?! gib im WSF "*vb*" ein (sollte deiner definiton nach garnicht funktionieren wenn ich dich richtig verstehe)
    das dabei womöglich nur das hintere verwendet wird mag ja sein, hatte dafür bisher aber keine anzeichen dafür gesehen - nach einem kurzen quercheck hier mit einem beliebigen suchstring bin ich aber zu der überzeugung gekommen die Suche ist noch schlechter als gedacht :D (glückwunsch)

    nochmal, mir ist es egal welcher Aufwand dahinter steht (schön das du es erklärt hast wie relevanz funktioniert, gesagt hast du damit eigentlich nix was dem thema hilft), es muss funktionieren, das eine Suchfunktion eine recourcenintensive Angelegenheit ist dürfte klar sein, wenn ich aber keine brauchbaren Ergebnisse generieren kann ist selbst geringer Aufwand fürn popo
    das eine Suche mit ft_min_word_len 2 oder 3 aufwendiger ist mag stimmen, evtl sogar probleme verursacht, da "vermutlich" die tabelle gesperrt wird bei erstellen/ändern eines beitrags (kannst du als der mit dem Wissen darum vermutlich besser daherzitieren als ich Laie)

    Schön wäre ja z.b. wenn man 2 techniken kombinieren könnte, z.b. whitelist mit nichterfassten begriffen in php mit eigener Tabelle und rest mit mysql-volltext, aber das wird sicher nicht funktionieren, außer man durchsucht erst den einen index und lässt die ergebnisse dann in das zweite ergebnis einfließen

    ich vermute das eh viele keine wildcards benutzen sondern begriffe eingeben, wenn die sufu dann schon losheult "keine treffer" hat es sich eh meist erledigt, die sehr gut geschriebene hilfe des wBB kennt zudem eh kaum einer (hier wird wurde man bei IPB z.b. etwas direkter drauf hingewiesen was geht, wäre sicher eine Idee das spätestens in der Fehlermeldung zu verlinken)
     

Diese Seite empfehlen

  1. Diese Seite verwendet Cookies, um Inhalte zu personalisieren, diese deinem Erleben anzupassen und dich nach der Registrierung angemeldet zu halten.
    Wenn du dich weiterhin auf dieser Seite aufhältst, akzeptierst du unseren Einsatz von Cookies.
    Information ausblenden