Unterschied zwischen Index und Fulltext Index

Unterschied zwischen Index und Fulltext Index

am 06.08.2007 16:35:45 von Christian Aigner

Ich suche nach einer Erklärung, was der Unterschied zwischen einem
"normalen" Index ist und einem Fulltext Index.

Bin für Hinweise bzw. Erklärungen dankbar.

mfg,
Christian

Re: Unterschied zwischen Index und Fulltext Index

am 06.08.2007 16:47:43 von zirias

* Christian Aigner :
> Ich suche nach einer Erklärung, was der Unterschied zwischen einem
> "normalen" Index ist und einem Fulltext Index.

Ganz allgemein: Ein Index indiziert irgendwelchen Inhalt. Ein
Volltext-Index indiziert (bei Text-Inhalt) auch jede mögliche
Teil-Phrase, was die Suche nach einem Datensatz anhand einzelner Wörter
eines Textfelds möglich macht.

Grüße, Felix

--
Felix M. Palmen (Zirias) \ -PGP- /"\ ASCII Ribbon
web: http://zirias.ath.cx/ \ http://zirias.ath.cx/pub.txt \ / Campaign
my open source projects: \ FP ED9B 62D0 BE39 32F9 2488 X Against HTML In
http://zirias.ath.cx/?pg=pro \ 5D0C 8177 9D80 5ECF F683 / \ Mail And News

Re: Unterschied zwischen Index und Fulltext Index

am 07.08.2007 09:52:25 von Christian Aigner

Am Mon, 6 Aug 2007 16:47:43 +0200, schrieb zirias@despammed.com (Felix
M. Palmen):

> * Christian Aigner :
> > Ich suche nach einer Erklärung, was der Unterschied zwischen einem
> > "normalen" Index ist und einem Fulltext Index.
>
> Ganz allgemein: Ein Index indiziert irgendwelchen Inhalt. Ein
> Volltext-Index indiziert (bei Text-Inhalt) auch jede mögliche
> Teil-Phrase, was die Suche nach einem Datensatz anhand einzelner Wörter
> eines Textfelds möglich macht.
>
> Grüße, Felix

Das bedeutet also, daß eine Suche nach "roter Fußball" bei einer
Volltextindizierung schneller zum Ergebnis führt, als bei einfacher
Indizierung?

Re: Unterschied zwischen Index und Fulltext Index

am 07.08.2007 10:17:53 von Christian Kirsch

Am 07.08.2007 09:52 schrieb Christian Aigner:
> Am Mon, 6 Aug 2007 16:47:43 +0200, schrieb zirias@despammed.com (Felix
> M. Palmen):
>
>> * Christian Aigner :
>>> Ich suche nach einer Erklärung, was der Unterschied zwischen einem
>>> "normalen" Index ist und einem Fulltext Index.
>> Ganz allgemein: Ein Index indiziert irgendwelchen Inhalt. Ein
>> Volltext-Index indiziert (bei Text-Inhalt) auch jede mögliche
>> Teil-Phrase, was die Suche nach einem Datensatz anhand einzelner Wörter
>> eines Textfelds möglich macht.
>>
>> Grüße, Felix
>
> Das bedeutet also, daß eine Suche nach "roter Fußball" bei einer
> Volltextindizierung schneller zum Ergebnis führt, als bei einfacher
> Indizierung?

Es gibt übrigens zu MySQL nicht nur eine Newsgruppe, sondern auch eine
Dokumentation. Du findest sie in vielen Sprachen, darunter auch
Deutsch, und Formaten (HTML, PDF etc.) bei dev.mysql.com/doc.

Dort sind solche und andere Fragen umfassend erklärt. Deshalb
empfiehlt es sich, das Ganze wenigstens einmal zu lesen.

--
Christian

Re: Unterschied zwischen Index und Fulltext Index

am 07.08.2007 11:48:59 von Axel Schwenke

Christian Aigner wrote:
> Am Mon, 6 Aug 2007 16:47:43 +0200, schrieb zirias@despammed.com (Felix
> M. Palmen):
>>
>> Ganz allgemein: Ein Index indiziert irgendwelchen Inhalt. Ein
>> Volltext-Index indiziert (bei Text-Inhalt) auch jede mögliche
>> Teil-Phrase, was die Suche nach einem Datensatz anhand einzelner Wörter
>> eines Textfelds möglich macht.
>>
>> Grüße, Felix
>
> Das bedeutet also, daß eine Suche nach "roter Fußball" bei einer
> Volltextindizierung schneller zum Ergebnis führt, als bei einfacher
> Indizierung?

Es kommt drauf an, was du "Suche" nennst.

SELECT ... WHERE textfeld = 'roter Fußball'
SELECT ... WHERE textfeld LIKE 'roter Fußball'
SELECT ... WHERE textfeld LIKE 'roter Fußball%'
SELECT ... WHERE textfeld LIKE '%roter Fußball%'

Die ersten drei könnten einen normalen B-Tree-Index auf (textfeld)
verwenden, finden "roter Fußball" aber eben nur am Anfang des
Textfelds. Die letzte Query kann keinen normalen Index verwenden.
Ein normaler Index beruht darauf, die Informationen sortiert abzu-
legen. Dann kann man bei der Suche im Index Intervallschachtelung
betreiben und kommt so mit O(log(n)) Vergleichen hin.

Wenn "roter Fußball" aber *irgendwo* in den Daten stehen kann, dann
hilft die Sortierung bei der Suche nicht weiter.


XL

Re: Unterschied zwischen Index und Fulltext Index

am 07.08.2007 20:54:43 von Thomas Rachel

Christian Aigner schrieb:

> Das bedeutet also, daß eine Suche nach "roter Fußball" bei einer
> Volltextindizierung schneller zum Ergebnis führt, als bei einfacher
> Indizierung?

Nein. Das bedeutet, daß die Suche nach "roter" oder auch nach "Fußball"
in einer Tabelle, in der in dem durchsuchten Feld "roter Fußball"
steht[1], schneller zum Ergebnis führt.


Thomas

[1] Oder meinetwegen auch "da ist ein roter Fußball", damit "roter"
nicht am Anfang steht, was auch ein einfacher Index bewältigen könnte.

Re: Unterschied zwischen Index und Fulltext Index

am 08.08.2007 10:22:44 von Daniel Fischer

Christian Aigner!

> Ich suche nach einer Erklärung, was der Unterschied zwischen einem
> "normalen" Index ist und einem Fulltext Index.

Ich probier's auch mal.

Ein "normaler" Index über eine Spalte in einer Datenbank indiziert den
exakten Inhalt dieser Spalte. Das heißt, man kann mit ihm Datensätze
finden, die in einer Spalte genau das stehen haben, was man sucht.

Bei manchen Implementierungen kann man mit so einem Index zusätzlich
auch Datensätze finden, bei denen dieser Wert bestimmte Kriterien a là
"zwischen Wert1 und Wert2" erfüllt (das schließt bei Textspalten auch
die Suche nach Werten ein, die mit bestimmten Zeichen beginnen, etc.).


Ein Volltextindex ermöglicht dagegen die Suche nach irgendwelchen
Wörtern, die irgendwo in einem Text vorkommen.


Typische Anwendungen für einen normalen Index sind "gib mir alle
Bücher, die zwischen 1900 und 1950 veröffentlicht wurden", "gib mir alle
Bücher von Hans Dominik", und "gib mir die Daten zu dem Buch 'Land aus
Feuer und Wasser' (von Hans Dominik)".

Eine typische Anwendung für einen Volltextindex ist dagegen google. Oder
um bei Büchern zu bleiben, sowas wie "gib mir alle Bücher, die den
Begriff 'Bier' im Titel haben", oder "gib mir alle Bücher, bei denen der
Begriff 'Wasser' im Klappentext auftaucht".


Gruß
Daniel

Re: Unterschied zwischen Index und Fulltext Index

am 09.08.2007 10:17:34 von Christian Aigner

Am Wed, 08 Aug 2007 10:22:44 +0200, schrieb Daniel Fischer
:

> Christian Aigner!
>
> > Ich suche nach einer Erklärung, was der Unterschied zwischen einem
> > "normalen" Index ist und einem Fulltext Index.
>
> Ich probier's auch mal.
>
> Ein "normaler" Index über eine Spalte in einer Datenbank indiziert den
> exakten Inhalt dieser Spalte. Das heißt, man kann mit ihm Datensätze
> finden, die in einer Spalte genau das stehen haben, was man sucht.
>
> Bei manchen Implementierungen kann man mit so einem Index zusätzlich
> auch Datensätze finden, bei denen dieser Wert bestimmte Kriterien a là
> "zwischen Wert1 und Wert2" erfüllt (das schließt bei Textspalten auch
> die Suche nach Werten ein, die mit bestimmten Zeichen beginnen, etc.).
>
>
> Ein Volltextindex ermöglicht dagegen die Suche nach irgendwelchen
> Wörtern, die irgendwo in einem Text vorkommen.
>
>
> Typische Anwendungen für einen normalen Index sind "gib mir alle
> Bücher, die zwischen 1900 und 1950 veröffentlicht wurden", "gib mir alle
> Bücher von Hans Dominik", und "gib mir die Daten zu dem Buch 'Land aus
> Feuer und Wasser' (von Hans Dominik)".
>
> Eine typische Anwendung für einen Volltextindex ist dagegen google. Oder
> um bei Büchern zu bleiben, sowas wie "gib mir alle Bücher, die den
> Begriff 'Bier' im Titel haben", oder "gib mir alle Bücher, bei denen der
> Begriff 'Wasser' im Klappentext auftaucht".
>
>
> Gruß
> Daniel

Ich glaub, ich hab's verstanden.

Kann ich mit einer Volltextsuche auch Wortteile finden? Gibt es z.B.
die Möglichkeit, nach "dampf" zu suchen, und er findet
Donaudampfschiffahrtsgesellschaftskapitän?

Die Volltextsuche nach "donau*" würde dieses Wort finden. Aber ich hab
keine Möglichkeit gefunden, nach "*dampf*" zu suchen.

Bei einem normalen Index kann ich mit LIKE "%dampf%" suchen, aber bei
einem Volltextindex geht das nicht, oder doch?

LG,
Christian

Re: Unterschied zwischen Index und Fulltext Index

am 09.08.2007 10:22:01 von Christian Aigner

Am Tue, 07 Aug 2007 10:17:53 +0200, schrieb Christian Kirsch
:

> Es gibt übrigens zu MySQL nicht nur eine Newsgruppe, sondern auch eine
> Dokumentation. Du findest sie in vielen Sprachen, darunter auch
> Deutsch, und Formaten (HTML, PDF etc.) bei dev.mysql.com/doc.
>
> Dort sind solche und andere Fragen umfassend erklärt. Deshalb
> empfiehlt es sich, das Ganze wenigstens einmal zu lesen.

Ich hab die Doku gelesen. Auch ein dickes Buch von Paul DuBois. Aber
überall steht nur, daß es verschiedene Arten von Indizes gibt und wie
man sie verwendet. Ich hab nirgendwo eine Erklärung gefunden, worin
die Unterschiede bestehen. Vielleicht hab ich sie auch überlesen.

Falls Du eine Stelle kennst, wo das in der Doku erklärt wird, dann
würde ich mich über einen Link freuen.

mfg,
Christian

Re: Unterschied zwischen Index und Fulltext Index

am 09.08.2007 10:58:26 von Sebastian Suchanek

Christian Aigner schrieb:

> [...]
> Kann ich mit einer Volltextsuche auch Wortteile finden? Gibt es z.B.
> die Möglichkeit, nach "dampf" zu suchen, und er findet
> Donaudampfschiffahrtsgesellschaftskapitän?

Selbstverständlich.

> Die Volltextsuche nach "donau*" würde dieses Wort finden. Aber ich hab
> keine Möglichkeit gefunden, nach "*dampf*" zu suchen.
>
> Bei einem normalen Index kann ich mit LIKE "%dampf%" suchen, aber bei
> einem Volltextindex geht das nicht, oder doch?

Soweit ich weiß, funktionieren die möglichen (My)SQL-Suchmuster *immer*
auf *jeder* Datenbankspalte. Ein (Volltext-)Index sorgt lediglich dafür,
daß evtl. Treffer schneller gefunden werden.


Tschüs,

Sebastian

Re: Unterschied zwischen Index und Fulltext Index

am 09.08.2007 11:53:14 von Christian Aigner

Am Thu, 09 Aug 2007 10:58:26 +0200, schrieb Sebastian Suchanek
:

> Christian Aigner schrieb:
>
> > [...]
> > Kann ich mit einer Volltextsuche auch Wortteile finden? Gibt es z.B.
> > die Möglichkeit, nach "dampf" zu suchen, und er findet
> > Donaudampfschiffahrtsgesellschaftskapitän?
>
> Selbstverständlich.

Wie?

Volltextsuche mit MATCH() AGAINST() läßt sowas meines Wissens nicht
zu. Ich irre mich in diesem Punkt aber gern.


> Soweit ich weiß, funktionieren die möglichen (My)SQL-Suchmuster *immer*
> auf *jeder* Datenbankspalte. Ein (Volltext-)Index sorgt lediglich dafür,
> daß evtl. Treffer schneller gefunden werden.

Mir ist schon klar, daß ein LIKE "%wort%" immer funktioniert, aber
Volltextsuche ist doch MATCH() AGAINST(), oder?

mfg,
Christian

Re: Unterschied zwischen Index und Fulltext Index

am 09.08.2007 12:35:17 von Christian Kirsch

Am 09.08.2007 10:22 schrieb Christian Aigner:

> Ich hab die Doku gelesen. Auch ein dickes Buch von Paul DuBois. Aber
> überall steht nur, daß es verschiedene Arten von Indizes gibt und wie
> man sie verwendet. Ich hab nirgendwo eine Erklärung gefunden, worin
> die Unterschiede bestehen. Vielleicht hab ich sie auch überlesen.
>
> Falls Du eine Stelle kennst, wo das in der Doku erklärt wird, dann
> würde ich mich über einen Link freuen.
>

Zur Erklärung, wie "normale" Indizes funktionieren:

http://dev.mysql.com/doc/refman/5.0/en/mysql-indexes.html

Zu Fulltext hier:

http://dev.mysql.com/doc/refman/5.0/en/fulltext-search.html

Eine exakte Gegenüberstellung, was wie funktioniert, findest Du dort
vielleicht nicht - aber die lässt sich durch Nachdenken aus den
angegebenen Quellen extrahieren ;-)

HTH
--
Christian

Re: Unterschied zwischen Index und Fulltext Index

am 09.08.2007 12:49:21 von Daniel Fischer

Christian Aigner!

>> Selbstverständlich.
>
> Wie?
>
> Volltextsuche mit MATCH() AGAINST() läßt sowas meines Wissens nicht
> zu. Ich irre mich in diesem Punkt aber gern.
[...]
> Mir ist schon klar, daß ein LIKE "%wort%" immer funktioniert, aber
> Volltextsuche ist doch MATCH() AGAINST(), oder?

Da hast du Recht.

Die Verwechslung würde auch auch die weiter oben stehende
Antwort erklären.


Gruß
Daniel