Suchfunktion für PHP/MySQL-Site
heinetz
- datenbank
Hallo Forum,
ich versuche gerade, die Suchfunktion auf einer Website auszubauen. Gesucht wird zur Zeit in 4 Feldern einer MySQL-Tabelle:
1. link,
2. title,
3. description,
4. content
... woraus sich die Gewichtung ergibt, dass das Suchergebnis mit einem Treffer im Feld link höher bewertet wird, als eines mit einem Treffer im Feld title usw. Das Feld content stellt eine Ausnahme dar, weil es im Gegensatz zu den anderen keinen Plaintext sondern HTML enthält, das durchsucht werden muss. Konkret lösen ich das im Prinzip wie folgt:
(SELECT * FROM table WHERE link LIKE "%string%" ORDER BY field LIMIT o, 1000)
UNION
(SELECT * FROM table WHERE title LIKE "%string%" ORDER BY field LIMIT o, 1000)
UNION
(SELECT * FROM table WHERE description LIKE "%string%" ORDER BY field LIMIT o, 1000)
UNION
(SELECT * FROM table WHERE content LIKE "%string%" ORDER BY field LIMIT o, 1000)
Das funktioniert soweit ganz gut und ich habe mir vorgestellt, ich könne die gewichtung der Ergebnisse weiter verfeinern, indem ich ...
nach: '%<h1>%string%</h1>%'
UND danach
nach: '%string%'
... suche.
Auch das funktionierte soweit, bis mir klar wurde, dass LIKE sich generell nicht eignet, um im HTML zu suchen, weil soetwas wie <a title="string"> auch gefunden wird.
Nachdem ich das ganze umgebaut hatte, musste ich feststellen, dass ich plötzlich knappe 5 Sekunden auf meine Suchergebnisse warten musste und baute einen einfachen Versuch auf:
... WHERE content REGEXP "Test" => 0.3957 sek.
... WHERE content LIKE "%Test%" => 0.0435 sek.
Hat irgendwer einen Tipp, wie ich mein Problem lösen kann?
danke und
beste gruesse,
heinetz
Hi,
Hat irgendwer einen Tipp, wie ich mein Problem lösen kann?
Stichwort: Volltextsuche.
MfG ChrisB
Hi,
Hat irgendwer einen Tipp, wie ich mein Problem lösen kann?
Stichwort: Volltextsuche.
Du meinst die MySQL-Volltextsuche? Danke für den Tipp.
Das kannte ich noch nicht und es sieht ziemlich interessant aus ...
beste gruesse,
heinetz