Verschiedene Fehler und Probleme bei der Suche

Hallo,

wenn ich im Shop meines Kunden (knapp 4800 Produkte) die Suche auf die „UND“-Logik stelle, erzeugt der Endpunkt „/search“ mit einem zweiteiligen Suchbegriff (z.B. „sabre 350“) einen HTTP-500-Fehler:

SQLSTATE[HY000]: General error: 1436 Thread stack overrun: 164768 bytes used of a 196608 byte stack, and 32000 bytes needed. Use 'mysqld --thread_stack=#' to specify a bigger stack.

Wenn ich in der Konfiguration des MySQL-Servers den „thread_stack“ auf 1024K stelle, kommt der Fehler nicht mehr, allerdings ist die Suche sehr unperformant (braucht einige Sekunden, sowohl bei der Suchvorschau als auch bei der Suche für alle Ergebnisse).

Mir kommt die problematische Query auch echt umfangreich vor, ich paste sie mal hier rein:

[musste ich kürzen, da das Forum hier limitiert]

SELECT `product`.`id`, SUM(IF(`product.searchKeywords`.`keyword` = ? , '1.3' * `product.searchKeywords`.`ranking`, 0) + IF(`product.searchKeywords`.`keyword` = ? , '1.3' * `product.searchKeywords`.`ranking`, 0) + IF(`product.searchKeywords`.`keyword` = ? , '1.3' * `product.searchKeywords`.`ranking`, 0) + IF(`product.searchKeywords`.`keyword` = ? , '1.3' * `product.searchKeywords`.`ranking`, 0) + IF(`product.searchKeywords`.`keyword` = ? , '1.3' * `product.searchKeywords`.`ranking`, 0) + IF(`product.searchKeywords`.`keyword` = ? , '1.3' * `product.searchKeywords`.`ranking`, 0) + IF(`product.searchKeywords`.`keyword` = ? , '1.3' * `product.searchKeywords`.`ranking`, 0) + IF(`product.searchKeywords`.`keyword` = ? , '1.3' * `product.searchKeywords`.`ranking`, 0) + IF(`product.searchKeywords`.`keyword` = ? , '1.3' * `product.searchKeywords`.`ranking`, 0) + IF(`product.searchKeywords`.`keyword` = ? , '0.9' * `product.searchKeywords`.`ranking`, 0) + IF(`product.searchKeywords`.`keyword` = ? , '0.9' * `product.searchKeywords`.`ranking`, 0) + IF(`product.searchKeywords`.`keyword` = ? , '0.9' * `product.searchKeywords`.`ranking`, 0) + IF(`product.searchKeywords`.`keyword` = ? , '0.9' * `product.searchKeywords`.`ranking`, 0) + IF(`product.searchKeywords`.`keyword` = ? , '0.9' * `product.searchKeywords`.`ranking`, 0) + IF(`product.searchKeywords`.`keyword` = ? , '0.9' * `product.searchKeywords`.`ranking`, 0) + IF(`product.searchKeywords`.`keyword` = ? , '0.9' * `product.searchKeywords`.`ranking`, 0) + IF(`product.searchKeywords`.`keyword` = ? , '0.9' * `product.searchKeywords`.`ranking`, 0) + IF(`product.searchKeywords`.`keyword` = ? , '0.9' * `product.searchKeywords`.`ranking`, 0) + IF(`product.searchKeywords`.`keyword` = ? , '0.9' * `product.searchKeywords`.`ranking`, 0) + IF(`product.searchKeywords`.`keyword` = ? , '0.9' * `product.searchKeywords`.`ranking`, 0) + IF(`product.searchKeywords`.`keyword` = ? , '0.9' * `product.searchKeywords`.`ranking`, 0) + IF(`product.searchKeywords`.`keyword` = ? , '0.9' * `product.searchKeywords`.`ranking`, 0) + IF(`product.searchKeywords`.`keyword` = ? , '0.9' * `product.searchKeywords`.`ranking`, 0) + IF(`product.searchKeywords`.`keyword` = ? , '0.9' * `product.searchKeywords`.`ranking`, 0) + IF(`product.searchKeywords`.`keyword` = ? , '0.9' * `product.searchKeywords`.`ranking`, 0) + IF(`product.searchKeywords`.`keyword` = ? , '0.9' * `product.searchKeywords`.`ranking`, 0) + IF(`product.searchKeywords`.`keyword` = ? , '0.9' * `product.searchKeywords`.`ranking`, 0) + IF(`product.searchKeywords`.`keyword` = ? , '0.9' * `product.searchKeywords`.`ranking`, 0) + IF(`product.searchKeywords`.`keyword` = ? , '0.9' * `product.searchKeywords`.`ranking`, 0) + IF(`product.searchKeywords`.`keyword` = ? , '0.9' * `product.searchKeywords`.`ranking`, 0) + IF(`product.searchKeywords`.`keyword` = ? , '0.9' * `product.searchKeywords`.`ranking`, 0) + IF(`product.searchKeywords`.`keyword` = ? , '0.9' * ...

Stelle ich die Suche auf die „ODER“-Logik, ist sowohl der Speicherbedarf für den Thread-Stack als auch die Performance nicht zu beanstanden, allerdings habe ich dann das Problem, dass z.B. die Suche für „sabre 350“ nicht alle Artikel anzeigt, in denen auch „Sabre 350“ im Titel vorkommt.

Gibt es da Abhilfe?

Danke