2009-04-28 13 views
1

Ich arbeite an der Suchfunktion auf meiner Website. Ich möchte Benutzern einen optimalen Suchmechanismus bieten. Ich benutze PHP/MySQL.MySQL Volltextsuche?

Angenommen, Benutzer suchten nach "Sport".

Ich habe 30 Datensätze mit Wort "Sport" und 5 Datensätze mit Wort "Sport", aber wenn ich nach Sport suche, dann gibt folgende Abfrage nur das Ergebnis 30 zurück, die das Wort "Sport" haben. Aber eigentlich denke ich, dass der beste Weg, ein gutes Suchergebnis zu erzielen, darin besteht, alle 30 + 5 Datensätze anzuzeigen, alle Datensätze, die Sport oder Sport haben.

SELECT DISTINCT p.id, p.title, p.descr, p.tags FROM pdata p WHERE MATCH (p.title, p.tags, p.descr) AGAINST ('sport') 

Bitte sagen Sie mir einige Artikel oder einige Tipps & Tricks, die ich in der Lage sein, ein gutes Suchfunktionalität bereitzustellen.

Antwort

2
...MATCH (p.title, p.tags, p.descr) AGAINST ('sport*' IN BOOLEAN MODE) 

Kann den Trick tun.

Bearbeiten, die MySQL documentation ist eine ausgezeichnete Ressource für diese Art von Problemen! :)

+0

Hit das Ziel :) wow. Hey, es funktioniert perfekt. Aber ich verstehe nicht, warum es mir vorher keine Daten gegeben hat (ohne * und IN BOOLEAN MODE-Schlüsselwort) ?? Erzähl es mir bitte. – Prashant

+0

Aber noch ein Problem .. Wenn ich nach AGAINST suche ('ipl *' IM BOOLEAN-MODUS), dann gibt es nur ein Ergebnis, während ich ungefähr 5 Datensätze habe, die ein "ipl" -Wort in Titel, Tags und descr-Spalten haben. Warum dann sein einziges Ergebnis? und wenn ich "ICL" suche, dann gibt es 0 zurück, während ich einen Datensatz habe, der ICL enthält. – Prashant

0

Verwenden Sie einfach den% Wildcard auf Ihre Suchzeichenfolgen. Dadurch können alle Wörter, die von der Suchzeichenfolge gebildet werden, übereinstimmen. Leider müssen Sie im Booleschen Modus sein, damit dieser Platzhalter funktioniert. Außerdem müssen alle Suchbegriffe länger als 3 Zeichen sein, um mit der Volltextsuche angezeigt zu werden. dies kann in den MySQL-Systemeinstellungen geändert werden, aber der Standard ist 3.

0

In Ihrem Fall würde ich die folgende Abfrage machen:

SELECT p.id, p.title, p.descr, p .tags VON pdata p WHERE (p.title LIKE '% SPORT%' OR p.tags LIKE '% SPORT%' OR p.descr LIKE '% SPORT%')

Diese Abfrage finden würde alle Artikel, die Sportmagazine, Sommersportarten usw. abdecken.