Hallo zusammen,
meine (selbst zusammengeschraubte) Website-Suche kann Und-Abfragen (z.B. constantin dorit), Nicht-Abfragen (constantin -dorit) und Oder-Abfragen (constantin or dorit). Die Und-Suche funktioniert ganz normal, die nicht-suche ist schon um einiges langsamer und bei der oder-suche steht der Server still und liefert auch nach Minuten kein Ergebnis.
Die Suche involviert drei Tabellen:
w_pages (Tabelle mit den indizierten Seite meiner site)
w_keyword (Suchbegriffe)
w_occ ("Vorkommen"-Tabelle)
w_pages und w_keyword haben als PK eine ID und stehen in einer n:n Beziehung zueinander. Beide sind über ihren PK mit der Vorkommen-Tabelle verknüpft. Die Vorkommen-Tabelle nutzt die beiden Fremdschlüssel ihrerseits als zusammengesetzten PK.
Die Tabellenstruktur und meine Abfragensyntax stimmen, so viel ist sicher. Denn wenn ich die Datensatzanzahl bei der Keyword-Tabelle und bei der Vorkommen-Tabelle zu Testzwecken radikal verkleinere, dann funktioniert auch die Oder-Suche.
Hier die Syntax meiner Oder-Suche:
SELECT
title,description,url,SUM(v.score) hscore
FROM
w_pages s,w_keyword t,w_occ v, (SELECT s.id FROM
w_pages s,w_keyword t,w_occ v
WHERE
t.keyword LIKE '%constantin%' AND
v.word_id = t.keyword_id AND
s.id = v.page_id) a0
WHERE
v.word_id = t.keyword_id AND
s.id = v.page_id AND
t.keyword like '%dorit%' OR s.id = a0.id AND
s.typ = 'g' AND
s.lang = 'd'
GROUP BY
url
ORDER BY
hscore DESC, url ASC
Limit 0, 100
An der Server-Konfiguration kann ich nichts ändern, da ich nur ein einfaches Webhosting-Paket ohne eigenen Server habe. Andererseits bin ich sicherlich kein Experte für die Feinheiten bei MySql und vermute, dass sich bei meiner Suche Einiges optimieren lässt.
Könnt Ihr mir Tipps geben, was ich verbessern kann, bzw. wo ich ansetzen sollte?
Vielen Dank,
Constantin