phpbar.de logo

Mailinglisten-Archive

[php] mysql volltextsuche?

[php] mysql volltextsuche?

Andi phpbar at mein-himmel.de
Fre Jan 2 00:25:56 CET 2009


Hallo zusammen,

Ich muss zu meiner Schande gesetehen das ich mich in der Vergangenheit 
noch nie mit der Volltextsuchfunktionalität der mysql beschäftigt habe,
auch sonst mit der Materie nicht, bis jetzt hatten simple Abfragen 
gereicht ohne große Suchwunder :-)

Also kommen wir zum Punkt:
Ich hab 2 Tabellen (ich nehm mal einfache beispiele)

manufacturer
---------------
ID mediumint
title varchar(128)

product
---------------
ID mediumint
title varchar(128)
manufacturer_id mediumint

Der title von beiden records der Tabellen besteht in der Regel aus 
mehreren Worten z.b. "Kleines grünes Rohr" von "Rohr Hersteller des Jahres"

Nun will ich das man einen Suchbegriff eingeben kann. Diese Suche soll 
im Title des Manufacturers und im Title des Product suchen und die 
Treffer zurückliefern.
*(Eigentlich ist mit den Suchbegriffen auch noch eine Tag cloud 
wünschenswert da hab ich auch noch keine Ahnung wie ich die anfange)

*Ich hab manufacturer mit 50.000 und product mit 100.000 zufälligen 
einträgen gefüttert, das ist auch so ungefähr das maximum an Datensätzen 
das ich erwarte.
Einen Fulltext index hab ich jeweils auf die title felder der beiden 
Tabellen gelegt.

Wenn ich nun mit queries wie folgendem rangehe (Abfrage dauert immer so 
2 - 2,2 sec solange sie nicht aus dem cache kommt)

select product.id,product.title,manufacturer.id,manufacturer.title from 
product, manufacturer where
    match (product.title,manufacturer.title) against('wolle grün hamster 
sofa' in boolean mode) 
    and product.manufacturer_id = manufacturer.id

dann klappt das an sich auch schonmal nicht schlecht..... aber irgendwie 
bin ich nicht glücklich damit.
eine like suche kann ich logischerweise nicht machen, wenn ich dann z.b. 
nach grün suche krieg ich auch grüner gründings usw, das verwässert das
Ergebnis zu sehr.
Was meint ihr dazu? gehts irgendwie schneller als 2 sec? Hab ich 
irgendwo einen Denkfehler? Btw die Natural suche wäre mir glaub ich 
sogar lieber
aber diese funktioniert nur auf eine Tabelle.

Mich würde wirklich interessieren wie das andere gelöst haben ganz 
besonders auch noch in Verbindung mit einer Tag Cloud.

Eigentlich ist das ein wenig Offtopic, wobei der Project in PHP (Zend 
Framework) geschrieben wird, bitte seht es mir nach :-)

Gruß
Andi













php::bar PHP Wiki   -   Listenarchive