Mailinglisten-Archive |
Hallo an alle!
Ich grübel hier über ein Problem bei dem ich nicht weiterkomme:
Ich habe folgende Tabelle:
+-------+--------------+------+-----+---------+----------------+
| Field | Type | Null | Key | Default | Extra |
+-------+--------------+------+-----+---------+----------------+
| id | int(11) | | PRI | NULL | auto_increment |
| bar | varchar(250) | | | | |
| foo | varchar(250) | | MUL | | |
+-------+--------------+------+-----+---------+----------------+
und folgende Query:
select foo, bar, match(foo) against('$query' $bool_mode) as ranking from
foobar where match(foo) against('$query' $bool_mode) order by ranking desc
limit 0,1000
Bei einer Eingabe von boolschen Operatoren wird $bool_mode auf 'in boolean
mode' gesetzt.
Ich habe die Stopwords der Volltextsuche entfernt und die minimale Länge bei
der Volltextsuche auf ein Zeichen gesetzt, damit auch Wörter wie 'to', 'an'
o.ä. gefunden werden.
Soviel zum Aufbau - das funktioniert auch ganz gut bis auf eine Kleinigkeit
bei der ich einfach auf dem Schlauch stehe.
Wenn ich nun nach einem String suche, der ein Wort enthält welches in der
Tabelle oft vorkommt, dann bekomme ich einfach nicht die relevanten
Ergebnisse aus der DB, weil das Limit vor dem order by greift.
Wenn ich das Limit entferne, dann wäre es zwar okay, aber die Abfrage dauert
dann so lange, daß es einen Timeout gibt. Ich möchte also eigentlich alles so
lassen, allerdings sollen auch bei den Suchbegriffen, die sehr viele Treffer
erzeugen, die ersten 1000 nach dem MySQL-Ranking sortierten Treffer gezeigt
werden.
Ich hoffe ich habe mein Problem einigermaßen verständlich rüberbringen können
und hoffe auf einen Lösungsansatz, der mich mal wieder vom Schlauch
herunterschubst ;)
Achso, ich setze MySQL 4.0.18 ein, falls das noch wichtig sein sollte.
Vielen Dank und nen lieben Gruß,
Jürgen
--
Infos zur Mailingliste, zur Teilnahme und zum An- und Abmelden unter
-->> http://www.4t2.com/mysql
php::bar PHP Wiki - Listenarchive