PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Fulltext-Search in MySQL


Jonas
03.07.2002, 21:00
Sodele, da wollt ich das Feature doch auch mal ausprobiern ;)

Allerdings habe ich das Gefühl, daß diese Suche nicht soo der bringer ist, zum Beispiel hab ich einen Text in der DB:
Hallo Welt!
So, wenn ich jetzt nach "Hallo" oder "Welt" suche, findet er den Eintrag
Suche ich allerdings nach "Hal" oder "Hal lo" oder so, findet er nix.
Das heisst er sucht nur nach ganzen Wörtern, nicht nach Teilstücken.

Kann man das Verhalten irgendwie beeinflussen? Ist die Suche in der 4er-Version von MySQL besser geworden?


Cord Worthmann
03.07.2002, 23:00
ich würde sagen, das ist doch eher eine frage des sql-statements - wenn man fragt:
SELECT ... WHERE field = 'Hallo Welt!',
dann wird die db auch nix anderes ausspucken.
da musst du schon anders formulieren:
SELECT ... WHERE field = 'Hallo' Or field = 'Welt'
usw...



grtz
chief

Jonas
03.07.2002, 23:20
Nein nein, es geht um die Fulltext-Suchfunktion bei MySQL:


CREATE TABLE search (
id mediumint(8) unsigned NOT NULL auto_increment,
text text NOT NULL default '',
PRIMARY KEY (id),
FULLTEXT KEY text (text),
);

INSERT INTO search VALUES (NULL,'Hallo Welt');

SELECT id FROM search WHERE MATCH (text) AGAINST (Hal');


das letzte Statement liefert nichts...

Naja, muss ich ne eigene Suchfunktion baun...

Bauchi
03.07.2002, 23:22
mal ganz doof ins blaue geschossen:

select id from blablabla where feldname regexp 'regulärer ausdruck';

gut.. ist sicher nicht das was du meinst, aber wenn man aus dem unix umfeld kommt, macht man irgenwann fast alles mit regex *G* :-)

Jan Krüger
03.07.2002, 23:28
ich weiß es jetzt nicht auswendig, aber ich glaube, % wird als wildcard benutzt...

Jonas
04.07.2002, 10:12
Ja das ist mir schon klar daß es auch mit
text LIKE '%Hal%'
funktioniert, aber ich hab mich ja jetzt speziell auf dieses Fulltext-Feature von MySQL bezogen, von welchem ich aber derzeitig Ausdrücklich abrate, da es wirlich nicht gut ist!
Wie es in der 4.x-Version funktioniert - ka, da funktioniert ja auch diese BOOLEAN-Suche [wo man wirklich wörter explizit ein- bzw. ausschließen kann und so]

Naja ich ab mir jetzt ne eigene Suchfunktion gebastelt, funktioniert wesentlich besser :)

Jan Krüger
04.07.2002, 12:01
der eigentliche sinn der fulltext-funktion ist es, die suchen schnell zu machen.
und soweit ich weiß, gibt es keine datenbank-volltextsuche, die nach wortteilen sucht... das macht noch nicht mal die windows-hilfe. und google etc. ja schließlich auch nicht. ;)

und wenn ich mir das vorstelle, eine vollständige binärsuche über z.b. eine tabelle mit 100000 reihen... dann denke ich mir, dass es schon gut ist, dass nur nach ganzen wörtern gesucht wird.

Jonas
04.07.2002, 15:24
naja, was bringt mir eine schnelle suche, die nichts findet?!

Keine Ahnung woran es liegt, jedenfalls liefert die Suche von MySQL nicht wirklich sinnvolle Ergebnisse...

Vor allem wird es daran liegen, daß nur mit ODER verknüpft wird, meistens ist aber UND die bessere Wahl...

Decorator
17.07.2002, 11:38
Um Namen zu finden, die mit b oder B beginnen :

SELECT * FROM tier WHERE name REGEXP "^[bB]";

Um Namen zu finden, die mit fy enden:

SELECT * FROM tier WHERE name REGEXP "fy$";

Um Namen zu finden, die w oder W enthalten:

SELECT * FROM tier WHERE name REGEXP "[wW]";

Um Namen zu suchen, die exakt 5 Buchstaben Länge haben:

SELECT * FROM tier WHERE name REGEXP "^.....$";

Derselbe Ausdruck mit Hilfe des "repeat" Operators:

SELECT * FROM tier WHERE name REGEXP "^.{5}$";