Der Martin: Konzept zur Keyword-Suche

Beitrag lesen

problematische Seite

Hallo,

gibt es irgendwo eine Norm oder ein Usus (Brauch), nach was gesucht werden muss, wenn der User bestimmte Begriffe eingibt?

ob es festgeschriebene Regeln oder einen Standard gibt, weiß ich nicht. Üblich ist aber:

  • Groß- und Kleinschreibung wird nicht beachtet
  • mehrere Suchbegriffe werden durch Leerzeichen getrennt
  • meist gilt implizit eine UND-Verknüpfung der Suchbegriffe (d.h. alle müssen vorkommen)

Vor Jahren gab es das mal bei Google, zuerst sollten die Treffer kommen, die sämtliche Worte des Suchbegriffs enthalten. Ist nicht mehr so.

Nein? Ich meine schon. Zuerst die, die alle Suchbegriffe enthalten (UND), weiter hinten auch die, die nur eine Teilmenge der Suchbegriffe enthalten (ODER).

Nehmen wir mal shanty-chor, das kann im Namen von Mitgliedern oder in Titeln von Veranstaltungen enthalten sein. Andere Suchbegriffe können auch Ortsnamen finden.

Wer danach sucht, erwartet wohl auch Treffer wie shantychor und shanty chor, aber nicht Wort-Drehungen wie chor für shantys.

Vielleicht nicht bewusst. Wenn diese Stelle aber auch bei den Treffern auftaucht, wird sich mancher an die Stirn klatschen: Ach ja, stimmt eigentlich!

Anstatt einzelner Suchbegriffe auch Wortkombinationen zu finden, dürfte etwas kniffliger sein.

(COLLATE utf8_bin sorgt dafür, dass bei Suche nach ö NICHT AUCH nach o gesucht wird)

Elegant wäre aber, wenn bei der Suche nach 'ö' alternativ auch 'oe' gefunden wird. Zumindest im Deutschen - in Schwedisch, Türkisch oder Ungarisch wäre das vermutlich Unsinn.

Es wäre wohl falsch, alle Sonderzeichen und Leerzeichen des Suchbegriffs mit % als SQL-Platzhalter zu ersetzen? Aber wenn ich nur Leerzeichen ersetze, findet shanty-chor die anderen Schreibweisen nicht.

Ich würde einen anderen Ansatz wählen:

  • trenne den Suchstring an allen Zeichen auf, die keine Buchstaben sind
  • wirf die Fragmente weg, die dann nur noch einen Buchstaben haben (z.B. weil Gustav's in Gustav und s zerlegt wurde)
  • suche nach jedem der übriggebliebenen Begriffe einzeln
  • Bilde am Schluss die Schnittmenge (UND) oder Obermenge (ODER) der erhaltenen Teilmengen So eliminierst du auch die Reihenfolge der Keywords.

Bei Eingabe mit Gänsefüßen "shanty chor" ist das Leerzeichen relevant.

Okay, das ist dann ein Sonderfall, den du beim Parsen in Schritt 1 berücksichtigen musst.

Alternativer Ansatz: Nach mehreren Worten suche ich einzeln, dann werden auch Dreher gefunden und Feldinhalte, in denen die Worte in anderer Reihenfolge vorkommen:

Ach, genau. Eben sag ich's noch ... ;-)

Wie könnte ich die Ausgabe sortieren, dass die meisten Übereinstimmungen zuerst kommen?

Indem du zu jeder Teilsuche die Zahl der Treffer mitführst?

So long,
 Martin

--
Wovon träumt eine Katze nachts? - Von einem prächtigen Muskelkater.