Volltextsuche für MySQL Datenbank

Du suchst ein Programm für einen bestimmten Zweck?
Antworten
og2
Beiträge: 34
Registriert: 18.02.2007 14:35:08

Volltextsuche für MySQL Datenbank

Beitrag von og2 » 15.05.2012 15:31:47

Hallo,

ich habe eine SQL-Datenbank mit einigen Tabellen und zahlreichen Feldern. Jetzt möchte ich für eine Web-Anwendung ein Suchfeld (á la Google) bereitstellen, hab aber keine Ahnung wie und wo ich beginnen soll.

Kurz zur gewünschten Funktion: Der Anwender soll einfach eintippen was er will und im Hintergrund soll dann in der Datenbank gesucht werden. Die dafür in Frage kommenden Tabellen und Felder möchte ich bestimmen können. Eine besondere Suchsyntax soll hier nicht zum Einsatz kommen. Die Ergebnisse möchte ich gern nach "relevanz" sortiert darstellen. D.H. wo die Suchworte am besten treffen zuerst.

Ideal wäre wenn das ganze in PHP verfügbar ist. Wie gehe ich das ganze an?

Cae
Beiträge: 6349
Registriert: 17.07.2011 23:36:39
Wohnort: 2130706433

Re: Volltextsuche für MySQL Datenbank

Beitrag von Cae » 15.05.2012 16:32:19

Code: Alles auswählen

SELECT * FROM foo WHERE foo.bar LIKE '$suchbegriff%' LIMIT 15;
oder etwas in der Richtung? Ja, es gibt auch tonnenweise PHP+MySQL-Tutorials, aber zum Thema PHP… *g*

Gruß Cae
If universal surveillance were the answer, lots of us would have moved to the former East Germany. If surveillance cameras were the answer, camera-happy London, with something like 500,000 of them at a cost of $700 million, would be the safest city on the planet.

—Bruce Schneier

Benutzeravatar
FANA
Beiträge: 482
Registriert: 30.03.2005 17:50:55

Re: Volltextsuche für MySQL Datenbank

Beitrag von FANA » 15.05.2012 18:15:16

Welche Storage Engine verwendest du? MyISAM kann Volltextsuche: http://phpperformance.de/volltextsuche-in-datenbanken/

hec_tech
Beiträge: 1094
Registriert: 28.06.2007 21:49:36
Wohnort: Wien
Kontaktdaten:

Re: Volltextsuche für MySQL Datenbank

Beitrag von hec_tech » 18.05.2012 17:13:46

Hilfe wenn ich den Query lese tut es schon weh.
Das ist so ziemlich das schlimmste was man einem Datenbankserver antun kann. Damit muss der DB Server bit für bit vergleichen.
Volltextsuche ist leider etwas Problematisch. PostgreSQL bietet hier nette Funktionen.
Um wieviele Datensätze geht es denn?
Denke daran prepared Querys zu nutzen. Sonst hast du ein ärgstes Sicherheitsproblem.
Wenn du sowas wie das Suchfeld bei google haben willst dann brauchst du irgendwas Javascript mäßiges. jQuery ist hier ein Stichwort.
Bei Java würde ich das ganze mit JSF und Primefaces lösen. Da ist das ganze schnell erledigt. Mit PHP habe ich eher wenig zu tun. Es wird aber sicherlich genauso Frameworks geben die einem die ganze Arbeit erleichtern.

Cae
Beiträge: 6349
Registriert: 17.07.2011 23:36:39
Wohnort: 2130706433

Re: Volltextsuche für MySQL Datenbank

Beitrag von Cae » 18.05.2012 21:02:45

hec_tech hat geschrieben:Hilfe wenn ich den Query lese tut es schon weh.
Das ist so ziemlich das schlimmste was man einem Datenbankserver antun kann. Damit muss der DB Server bit für bit vergleichen.
Jupp, aber versuch' mal mit der Aussage
og2 hat geschrieben:eine SQL-Datenbank
etwas besseres zu bauen. Der TE vermeidet da jegliche Präzision.

Gruß Cae
If universal surveillance were the answer, lots of us would have moved to the former East Germany. If surveillance cameras were the answer, camera-happy London, with something like 500,000 of them at a cost of $700 million, would be the safest city on the planet.

—Bruce Schneier

og2
Beiträge: 34
Registriert: 18.02.2007 14:35:08

Re: Volltextsuche für MySQL Datenbank

Beitrag von og2 » 21.05.2012 08:24:45

Zunächst einmal Danke für die Hinweise. Die Datenbank hat derzeit eine Größe von 670MB, besteht aus 10 Tabellen und jede davon hat zwischen 20 und 100 Feldern. Die größten Felder haben Varchar(255). Als DB-Enginge wird MyISAM eingesetzt (weiß nicht genau warum, war vielleicht default?!).

Also soweit ich mich mit der Theorie der Volltextsuche beschäftigt habe ist das wichtigste ein Volltext-Index, bzw. ein Index für jedes zu durchsuchende Feld, sonst ist es mit der Performance der Suche nicht weit her. Der hier genannte Link zu http://phpperformance.de/volltextsuche-in-datenbanken/ ist schon sehr wertvoll und gibt Einblick in die grundlegende Funktionsweise von DB-Suche mit MySQL. Ob Postgres hier was besseres bietet kann schon sein, ich möchte aber lieber bei MySQL bleiben, mit PG habe ich zuwenig Erfahrung und ein zweites DB-System möchte ich nicht aufsetzen. Zudem ist die zu durchsuchende Datenbank mit MySQL vorgegeben, da kann ich nichts ändern.

Ich glaube mal das es für eine Echtzeit-Suche mit direkter Trefferanzeige enorm viel DB-Leistung benötigt (nach den ersten paar Buchstaben muss man ja schon lossuchen...). Die habe ich aber nicht zur Verfügung. Daher wollte ich mich auf Eingabe -> Suche abschicken -> Ergebnisse darstellen beschränken.

Es tut mir leid wenn ich da anfangs etwas unpräzise formuliert habe, aber wie gesagt, ich fange gerade erst an mich damit zu beschäftigen.

Benutzeravatar
FANA
Beiträge: 482
Registriert: 30.03.2005 17:50:55

Re: Volltextsuche für MySQL Datenbank

Beitrag von FANA » 21.05.2012 10:06:23

og2 hat geschrieben:Als DB-Enginge wird MyISAM eingesetzt (weiß nicht genau warum, war vielleicht default?!).
Ja, bis 5.5 ist MyISAM die Default Storage Engine. Ab 5.5 ist InnoDB default.
og2 hat geschrieben: Zudem ist die zu durchsuchende Datenbank mit MySQL vorgegeben, da kann ich nichts ändern.
Falls du bei einem Projekt mal die Möglichkeit hast, das Datenbanksystem selbst zu wählen,
schau dich mal bei den neuen Datenbanken um.
Vor allem MongoDB ist sehr zu empfehlen.

http://www.computerwoche.de/software/so ... r/2496589/
http://www.mongodb.org/
http://www.mongodb.org/display/DOCS/Ful ... h+in+Mongo
http://www.computerwoche.de/software/so ... r/2489786/

Antworten