MATCH AGAINST (MySQL)
Markus
- datenbank
Hallo,
ich haben folgende Frage:
ich möchte gerne in einer Spalte einer MysQL-Tabelle nach "Geburt" suchen, sodass als Ergebnis folgende Datensätze (wie folgt nach Relevanz sortiert) angezeigt werden:
1.) Ergebnisse in denen "Geburt" direkt vorkommt.
2.) Ergebnisse wie z.B. "Geburtsvorbereitung"
3.) Ergebnisse wie z.B. "Frühgeburt"
Den Joker * kenne ich bereits, wie bekomme ich jedoch mit dem Suchwort "Geburt" auch Ergebnisse wie "Frühgeburt" angezeigt?
Wie kann ich die Ergebnise entsprechend 1-3 nach Relevanz anzeigen?
Vielen Dank für Eure Hilfe,
Markus
Hi Markus,
Aus der Überschrift würde ich erlesen, daß sich deine Fragen auf eine Volltextsuche beziehen. Was du aber möchtest, läßt sich meines Wissens so nicht realisieren.
Den Joker * kenne ich bereits, wie bekomme ich jedoch mit dem Suchwort "Geburt" auch Ergebnisse wie "Frühgeburt" angezeigt?
Als Joker dient in der der Volltextsuche der Stern und dieser kann lediglich hinten angestellt werden (zb: Geburt*) Er funktioniert auch nur im boolean Mode. Die Relevanz-Sortierung in diesem Modus macht eine deinen Ansprüchen entsprechende Sortierung auch schwierig, aber nicht unmöglich (zb per Subselects im gelieferten Result).
ich möchte gerne in einer Spalte einer MysQL-Tabelle nach "Geburt" suchen, sodass als Ergebnis folgende Datensätze (wie folgt nach Relevanz sortiert) angezeigt werden:
1.) Ergebnisse in denen "Geburt" direkt vorkommt.
2.) Ergebnisse wie z.B. "Geburtsvorbereitung"
3.) Ergebnisse wie z.B. "Frühgeburt"
Wie kann ich die Ergebnise entsprechend 1-3 nach Relevanz anzeigen?
Wenn die Tabelle nicht allzu groß ist, würde ich über die Spalte, auf die sich dein WHERE bezieht einen normalden Index legen und dann per LIKE suchen. Dabei sollte man sich bewußt sein, daß bei einem vorangestellten Joker (bei LIKE ein %) generell die Performance etwas einbricht.
Die Sortierung wäre auf diese Art kein großes Abenteuer. Bei einer Übersteinstimmung der Bedingung in der ORDER BY Anweisung gibt MySql 1 zurück, ansonsten 0.
SELECT * FROM my_table
WHERE my_column LIKE '%Geburt%'
ORDER BY
my_column LIKE 'geburt' DESC,
my_column LIKE 'geburt%' DESC,
my_column LIKE '%geburt' DESC
herzliche Grüße,
Jonny 5
Danke Jonny,
SELECT * FROM my_table
WHERE my_column LIKE '%Geburt%'
ORDER BY
my_column LIKE 'geburt' DESC,
my_column LIKE 'geburt%' DESC,
my_column LIKE '%geburt' DESC
Also mit MATCH AGAINST hat man hier kein Glück?
Ich dachte immer MATCH AGAINST wäre eine Weiterentwicklung zu LIKE ;)
Grüsse,
Markus