Problem bei Volltextsuche

Problem bei Volltextsuche

am 09.08.2007 16:34:58 von Peter Mairhofer

Hallo!

Ich hab eine Tabelle mit den Spalten "title" und "subtitle" (beide VARCHAR)
und "content" (TEXT).

Hier möchte ich nun zwei Suchen durchführen können:
- Die einfache suche matcht nur auf title+subtitle
- Die erweiterte auf title+subtitle+content

Wie mache ich das? Ich hab bereits alle erdenklichen Kombinationen
ausprobiert (mehrere Indices, Verknüpfung mit OR usw).

Also folgende Indices hab ich bereits probiert:
FULLTEXT(title,subtitle,content)
FULLTEXT(title)+FULLTEXT(subtitle)+FULLTEXT(content)
FULLTEXT(title,subtitle)+FULLTEXT(content)
FULLTEXT(title,subtitle)+FULLTEXT(title,subtitle,content).

Und alle diese Moeglichkeiten hab ich sowohl mit verschiedenen MATCH(...)
als auch Kombinationen daraus (mit OR MATCH) probiert.

Fuer jegliche Hinweise waer ich sehr dankbar.

lg,
Peter

Re: Problem bei Volltextsuche

am 10.08.2007 12:19:49 von Daniel Fischer

Peter Mairhofer!

> Ich hab eine Tabelle mit den Spalten "title" und "subtitle" (beide VARCHAR)
> und "content" (TEXT).
>
> Hier möchte ich nun zwei Suchen durchführen können:
> - Die einfache suche matcht nur auf title+subtitle

ALTER TABLE ... ADD FULLTEXT INDEX (title, subtitle);
SELECT ... FROM ... WHERE MATCH(title, subtitle) AGAINST ("...");

> - Die erweiterte auf title+subtitle+content

ALTER TABLE ... ADD FULLTEXT INDEX (title, subtitle, content);
SELECT ... FROM ... WHERE MATCH(title, subtitle, content ) AGAINST ("...");

Verknüpfung mehrerer einzelner Indizes mit OR oder + (je nachdem, ob in
WHERE oder weiter vorn) geht schon auch, aber...

> Wie mache ich das? Ich hab bereits alle erdenklichen Kombinationen
> ausprobiert (mehrere Indices, Verknüpfung mit OR usw).

Es gibt da noch eine Falle, in die man beim Testen leicht fällt:

Wenn ein Wort in mindestens 50% aller Zeilen vorkommt, dann wird es nicht
bei der Suche berücksichtigt. Volltextsuche in einer Tabelle mit nur zwei
Zeilen, oder wenigen sehr ähnlichen Zeilen, ist daher verhältnismäßig
langweilig.

Du kannst dir da aber behelfen, in dem du, wenn deine Anforderungen das
zulassen, die Suche IN BOOLEAN MODE durchführst:
SELECT ... WHERE MATCH(...) AGAINST("..." IN BOOLEAN MODE);

In diesem Modus gilt diese 50%-Einschränkung nicht.

Weitere Eigenschaften von IN BOOLEAN MODE:
http://dev.mysql.com/doc/refman/5.0/en/fulltext-boolean.html


Gruß
Daniel

Re: Problem bei Volltextsuche

am 13.08.2007 14:20:20 von Peter Mairhofer

Daniel Fischer wrote in
news:pan.2007.08.10.10.19.49.947718@df.erinye.com:
> Peter Mairhofer!
>
>> Ich hab eine Tabelle mit den Spalten "title" und "subtitle" (beide
>> VARCHAR) und "content" (TEXT).
>>
>> Hier möchte ich nun zwei Suchen durchführen können:
>> - Die einfache suche matcht nur auf title+subtitle
>
> ALTER TABLE ... ADD FULLTEXT INDEX (title, subtitle);
> SELECT ... FROM ... WHERE MATCH(title, subtitle) AGAINST ("...");
>
>> - Die erweiterte auf title+subtitle+content
>
> ALTER TABLE ... ADD FULLTEXT INDEX (title, subtitle, content);
> SELECT ... FROM ... WHERE MATCH(title, subtitle, content ) AGAINST
> ("...");

Das hatte ich bereits probiert.

phpMyAdmin vermeldet nun stolz:

Warning: More than one FULLTEXT key was created for column `title`

Ist das einfach zu ignorieren? Ich ignoriere ungerne solche Warnings ;-)

> [...]
>
> Es gibt da noch eine Falle, in die man beim Testen leicht fällt:
>
> Wenn ein Wort in mindestens 50% aller Zeilen vorkommt, dann wird es
> nicht bei der Suche berücksichtigt. Volltextsuche in einer Tabelle mit
> nur zwei Zeilen, oder wenigen sehr ähnlichen Zeilen, ist daher
> verhältnismäßig langweilig.
> [...]

Juhuu, genau DAS war offenbar mein Problem! mit "IN BOOLEAN MODE" haut
alles so hin wie ichs mir vorstelle :-)
Danke,

Peter

Re: Problem bei Volltextsuche

am 13.08.2007 23:52:53 von Axel Schwenke

Peter Mairhofer <63832452@gmx.net> wrote:
>
> phpMyAdmin vermeldet nun stolz:
>
> Warning: More than one FULLTEXT key was created for column `title`
> Ist das einfach zu ignorieren? Ich ignoriere ungerne solche Warnings ;-)

Ja prima. Immer dieses unausgegorene Dreckstool (Tschuldigung).
Kannst du ignorieren. Die Warnung is berechtigt bei Btree-Indexes,
weil dann ein mehrteiliger Index auch immer als Index für alle
Prefixe verwendet werden kann. (Beispiel: ein index (a,b,c) kann
auch als index (a,b) oder index (a) verwendet werden).

Falls dir das am Herzen liegt, reporte einen Bug in phpMyAdmin.
Oben genannte Warnung ist für FULLTEXT Indexe nicht angebracht.
Ich schnitze derweil eine neue Kerbe in das "warum man phpMy-
Admin besser meidet" Holz ;-)


XL

Re: Problem bei Volltextsuche

am 16.08.2007 13:31:18 von Christian Aigner

Am Mon, 13 Aug 2007 23:52:53 +0200, schrieb Axel Schwenke
:

> Ich schnitze derweil eine neue Kerbe in das "warum man phpMy-
> Admin besser meidet" Holz ;-)

Welche Alternativen zu PHPmyadmin und der Kommandozeile gibt es noch?
Bin immer für neues offen.

mfg,
Christian

Re: Problem bei Volltextsuche

am 16.08.2007 13:42:17 von Claus Reibenstein

Christian Aigner schrieb:

> Welche Alternativen zu PHPmyadmin und der Kommandozeile gibt es noch?

http://www.mysql.de/products/tools/

Gruß. Claus

Re: Problem bei Volltextsuche

am 16.08.2007 14:20:18 von Sebastian Suchanek

Claus Reibenstein schrieb:
> Christian Aigner schrieb:
>
>> Welche Alternativen zu PHPmyadmin und der Kommandozeile gibt es noch?
>
> http://www.mysql.de/products/tools/

*seufz*
Was hat den Wäbbdiesainer schon wieder geritten, daß man den
Downloadlink erst via Google suchen muß? :-(


Tschüs,

Sebastian

Re: Problem bei Volltextsuche

am 16.08.2007 16:09:22 von Claus Reibenstein

Sebastian Suchanek schrieb:

> Claus Reibenstein schrieb:
>
>> Christian Aigner schrieb:
>>
>>> Welche Alternativen zu PHPmyadmin und der Kommandozeile gibt es noch?
>>
>> http://www.mysql.de/products/tools/
>
> *seufz*
> Was hat den Wäbbdiesainer schon wieder geritten, daß man den
> Downloadlink erst via Google suchen muß? :-(

Wieso brauchst Du dazu Google? Einfach auf "Home", dann "Downloads" und
schließlich "GUI-Tools" klicken - und schon bist Du da. Um das zu
finden, braucht man kein Google. Offene Augen und ein bisschen
Denkvermögen tun's auch.

Gruß. Claus