Suchgeschwindigkeit

pekudel

Grünschnabel
Hallo!

Ich muss für einen Webshop eine Suchfunktion programmieren. Es kann nach Seriennummern für Artikel gesucht werden. Es gibt aber zu jedem Produkt verschiedene Seriennummern. Die Suche sieht so aus, dass man in einem Teil nach Hersteller+Gerätetyp suchen kann.

Wenn man nach Hersteller+Gerätetyp sucht, bekommt man 4-5 verschiedene Seriennummern heraus... (diese Seriennummern können alle zu einem Artikel führen, aber auch zu verschiedenen... da die Produkte "alte" und "neue" Seriennummern haben...)

Mit diesen Seriennummern soll in der Artikel-Tabelle gesucht werden. In der Spalte für die Artikelnummer sind sind mit Leerzeichen getrennt verschiedene Seriennummern zu einem Produkt (eben auch "alte" und "neue" Seriennumer etc. verschiedene Schreibweisen, einmal mit "/" einmal ohne oder mit "-" oder ohne "-"...), also eine Art Searchindex.

Ich habe das jetzt mal so gelöst:

Code:
SELECT * FROM shop_items WHERE searchindex REGEXP '{$articleids}'

...Das funktioniert zwar einwandfrei, allerdings dauert die Suche zu lang :( ....Mit LIKE ist das auch nicht die perfekte Lösung, müsste wahrschienlich dann so aussehen:


Code:
SELECT * FROM shop_items WHERE searchindex LIKE %seriennummer1% OR searchindex LIKE %seriennummer2%...

..Bei der Lösung wird die Abfrage aber ewig lang... ich denke, dass das sich das auch nicht gerade fördernd auf die Geschwindigkeit auswirkt.


Könnt ihr mir helfen?
 
MySQL? Wenn ja, ersetze die Leerzeichen durch Kommas und dann kannst du mit FIND_IN_SET() suchen.
 
Mit der nachfolgenden Struktur wird leider nichts gefunden:(

Code:
SELECT articlenr FROM shop_items WHERE FIND_IN_SET('seriennumer,seriennummer1,seriennummer3',searchindex)
 
Habe beide Variante ausprobiert. Leider werden aber keine Ergebnisse angezeigt.

Es sind in der "searchindex"-Spalte verschiedene Werte, z.B. a,b,c,d,e,f,g
Auf den Inhalt dieser Spalte muss zumindest ein Wert zutreffen, nach dem gesucht wird. Dies kann wieder ein Bündel an Werten sein, bsp.: g,h,i,jk,l ...und irgend ein Wert in dieser Menge aus Werten muss passen (wenn nicht, gibt es den Artikel nicht...). Ich versuche eben eine Funktion oder Methode herauszufinden, wie ich gemeinsame Werte ausfindig machen kann ...da es aber möglich ist, das in der Searchindex-Spalte nach dem WErt z.b: "g" noch ein Zusatz dabeisteht z.B. "g001" ...muss ich irgendwie mit LIKE suchen ... sprich, dass der wert "g" trotzdem gefunden wird, obwohl "g001" in der Searchindex-Spalte steht...

Kann ich da mit einer FULLTEXT-Suche arbeiten mit MATCH AGAINST?
 

Neue Beiträge

Zurück