Volltextsuche n. Schlagwörtern, die nicht nur am Anfang steh

Alles, was MariaDB und MySQL betrifft, kann hier besprochen werden.

Volltextsuche n. Schlagwörtern, die nicht nur am Anfang steh

Postby kiki » 06. June 2008 09:40

Hallo

Ich recherchiere schon seit Tagen nach einer Möglichkeit, in MySQL eine Volltextsuche nach Schlagwörtern zu realisieren, die nicht nur allein oder am Anfang stehen. D.h.:

Code: Select all
select uid from <table> where MATCH(subject,description) AGAINST ('installation*' IN BOOLEAN MODE);


Diese Abfrage findet alle uid's, in denen das Wort "Installation" oder "Installationsanleitung" usw. steht.

Meine Frage ist:
Wie muss ich die Abfrage modifizieren, dass auch Wörter wie "Neuinstallation" oder "Neuinstallationen" gefunden werden? Also Wörter, die vor und nach dem gesuchten Schlüsselwort noch Zeichen stehen haben.

Bisher realisiere ich die Abfrage mit "LIKE" und "%{keyword}%". Davon will ich aus Gründen der Performance wegkommen.
Nach dem Thema zu googeln hat mich auch nicht weitergebracht...


Hat jemand 'ne Idee oder ein Workaround?

Danke im Voraus

Grüße
Kiki
Last edited by kiki on 04. July 2008 09:45, edited 1 time in total.
Wissen ist Macht
kiki
 
Posts: 6
Joined: 04. January 2006 08:43
Location: Erfurt

Postby wmeinhart » 13. June 2008 20:31

Dein Ansatz ist schon richtig, du wirst in der Situation kaum um einen Volltable-Scan herumkommen. Zur Performance: mehr speicher zuweisen.
User avatar
wmeinhart
 
Posts: 36
Joined: 10. June 2003 19:45
Location: Hamburg

Postby kiki » 04. July 2008 09:49

@wmeinhart: Danke für die Antwort. Speichererhöhung ist schon mal ein gutes Stichwort.

Jetzt muss ich nur noch das andere Problem lösen :D

Grüße
Kiki
Wissen ist Macht
kiki
 
Posts: 6
Joined: 04. January 2006 08:43
Location: Erfurt

Postby Nobbie » 04. July 2008 11:21

Und was spricht dagegen:

Code: Select all
select uid from <table> where MATCH(subject,description) AGAINST ('*installation*' IN BOOLEAN MODE);


Allerdings ist das sinnlos - das ist dann nämlich genau so lahm wie LIKE '%installation%' und dann bringt FULLTEXT auch nichts mehr. Falls es überhaupt so geht (ich habe es nicht ausprobiert). Falls es so nicht geht, mußt Du eben mit OR zwei mal MATCH AGAINST machen:

Code: Select all
select uid from <table> where MATCH(subject,description) AGAINST ('installation*' IN BOOLEAN MODE) OR MATCH(subject,description) AGAINST ('*installation' IN BOOLEAN MODE);


Ggf. solltest du die beiden MATCH AGAINST noch klammern (obwohl es nicht nötig sein müßte).
Nobbie
 
Posts: 8769
Joined: 09. March 2008 13:04

Postby kiki » 04. July 2008 11:34

@Nobbie:

Daran habe ich auch schon gedacht. Aber MySQL interpretiert das erste Joker-Zeichen dabei nicht.

Das Sternchen dient als Kürzungs- oder Jokeroperator. Anders als andere Operatoren wird es an das betreffende Wort angehängt. Eine Übereinstimmung liegt bei Wörtern vor, die mit dem vor dem Operator * stehenden Wort beginnen.

Quelle: http://dev.mysql.com/doc/refman/5.1/de/fulltext-boolean.html

Grüße
Kiki
Wissen ist Macht
kiki
 
Posts: 6
Joined: 04. January 2006 08:43
Location: Erfurt

Postby Nobbie » 04. July 2008 13:24

Das bestätigt dann ja nur die Tatsache, dass das dann in der Tat auch keinen Sinn mehr hätte, weil LIKE '%balbla%' zum gleichen Erfolg führt.

Eine FULLTEXT-Suche würde da nicht mehr performanter sein, weil auch bei FULLTEXT dann alle Wörter überprüft werden müssen auf Teilbegriffe.
Nobbie
 
Posts: 8769
Joined: 09. March 2008 13:04


Return to MariaDB - MySQL

Who is online

Users browsing this forum: No registered users and 2 guests