phpbar.de logo

Mailinglisten-Archive

[php] SQL mit Wichtung

[php] SQL mit Wichtung

Hans Egg hans.egg at swissonline.ch
Mi Apr 6 18:14:20 CEST 2011


Hallo Stephan

Am 06.04.2011 um 16:16 schrieb Stephan Krauß:

> Wenn ich MATCH die Spaltenanzahl wie folgt angebe
> (title, body)
> dann erhalte ich die Fehlermeldung.
> Beide Spalten haben den Fulltext - Index.
> 
> ----------
> Can't find FULLTEXT index matching the column list
> ----------

Ich nehme an, du hast zwei Spalten separat indiziert:
... ADD FULLTEXT `title` (`title`) ...
... ADD FULLTEXT `body` (`body`) ...

Du brauchst für die obige Abfrage aber (zusätzlich) einen Gesamtindex:
... ADD FULLTEXT `gesamtindex` (`title` ,`body`) ...

Du musst für jede Spalte bzw. jede Spaltenliste, in der du suchen willst, einen Index aufbauen oder den BOOLEAN MODE verwenden:

Das ist gemeint mit dem fünften Listenpunkt bei 12.7.4. Beschränkungen der Volltextsuche
http://dev.mysql.com/doc/refman/5.1/de/fulltext-search.html
<zitat>Die MATCH()-Spaltenliste muss exakt mit der Spaltenliste in einer FULLTEXT-Indexdefinition der Tabelle übereinstimmen, sofern für MATCH() nicht der Modus IN BOOLEAN MODE aktiviert ist. Die boolesche Suche kann auch in nichtindizierten Spalten erfolgen, ist dann allerdings recht langsam.</zitat>

MySQL fügt die Inhalte der Spalten für die Indexierung aneinander und weiss dann nicht, in welcher Spalte des Tupels der Suchbegriff vorkommt. Du kannst aber zusätzlich in den Einzelspalten suchen und anhand der unterschiedlichen Relevanz erkennen, in welcher Spalte der Suchbegriff vorkommt. 

Gruß, Hans

php::bar PHP Wiki   -   Listenarchive