Herzlich willkommen im Archiv vom ABAKUS Online Marketing Forum
Du befindest Dich im Archiv vom ABAKUS Online Marketing Forum. Hier kannst Du Dich für das Forum mit den aktuellen Beiträgen registrieren.
Versuche es mal mitBurns hat geschrieben:Hallo an alle,
ich arbeite gerade an einer Volltextsuche mit PHP und MySql und soweit funktioniert auch alles prima. NUR wenn z.B nach 10.00 oder 100.000 suche, wird das ignoriert bzw. nichts gefunden. Es müsste aber was gefunden werden. Ich nehme an, der entfernt den . und erhält somit 10 und 000. dannach sucht der aber nicht weil die Zeichenzahl kleiner als 4 ist.
Hat jemand ne Idee wie ich das umgehen kann ?
SELECT * FROM `tabelle` WHERE match(title,description) against('100.000' IN BOOLEAN MODE)
Gruß
Code: Alles auswählen
$sql="SELECT * FROM `tabelle` WHERE MATCH ( title,description) AGAINST ( '".$suchwort."' ) OR title LIKE '%".$suchwort."%' OR description LIKE '%".$suchwort."%' LIMIT 30";
sorry, aber LIKE '%keyword%' is moppelkotze. selbst bei ein paar tausend datensaetzen kann die db da schnell mal 10 sekunden und laenger beschaeftigt sein. index hilft dir bei LIKE %keyword% nix weil ja trotzdem alle records komplett gescannt werden muessen ob keyword IRGENDWO darin vorkommt - ungefaehr als musst du das telefonbuch nach allen leuten mit vornamen "klaus" durchsuchen - der index ist aber nur auf nachnamen gesetzt.Outman hat geschrieben: Versuche es mal mitsolltest aber auf jeden fall eine index für title und description anlegen, sonst hast Du eine Mysql killer.Code: Alles auswählen
$sql="SELECT * FROM `tabelle` WHERE MATCH ( title,description) AGAINST ( '".$suchwort."' ) OR title LIKE '%".$suchwort."%' OR description LIKE '%".$suchwort."%' LIMIT 30";
Naja ich habe eine Index über zwei Spalten und komme mit der Abfrage ohne Probleme mit knapp 20000 Datensätze auf 0.0378s Abfragezeit hin. Es ist halt die Frage wie viele Datensätze gesucht werden sollen und wie viele Datensätze sich in der Tabelle befinden und ob sich der aufwand dafür lohnt das Script so zu erweitern.nerd hat geschrieben:sorry, aber LIKE '%keyword%' is moppelkotze. selbst bei ein paar tausend datensaetzen kann die db da schnell mal 10 sekunden und laenger beschaeftigt sein. index hilft dir bei LIKE %keyword% nix weil ja trotzdem alle records komplett gescannt werden muessen ob keyword IRGENDWO darin vorkommt - ungefaehr als musst du das telefonbuch nach allen leuten mit vornamen "klaus" durchsuchen - der index ist aber nur auf nachnamen gesetzt.Outman hat geschrieben: Versuche es mal mitsolltest aber auf jeden fall eine index für title und description anlegen, sonst hast Du eine Mysql killer.Code: Alles auswählen
$sql="SELECT * FROM `tabelle` WHERE MATCH ( title,description) AGAINST ( '".$suchwort."' ) OR title LIKE '%".$suchwort."%' OR description LIKE '%".$suchwort."%' LIMIT 30";
du solltest einen suchindex erstellen (id, keyword - index auf keyword) und dann eine 2. tabelle in der du vermerkst in welchem eintrag x das wort y vorkommt. der wortindex bleibt dabei ziehmlich klein; in der umgangssprache werden nur ca. 3-5000 woerter verwendet. ausserdem sollest du dabei stopwoerter wie "der, die, das, dessen, wenn, um, aus, ..." rausfiltern die keine eigentliche bedeutung haben aber in fast jedem satz vorkommen.
wenn du dann nach einem wort suchst laesst du dir zuerst eine liste mit ergebnissen aus einem join der 2 tables ausgeben, und machst dann einen zweiten durchgang mit "like" an dem der ersten abfrage falls du ein exact match brauchst.