Das Problem
Beim Versuch, Volltextsuchen durchzuführen In einer MySQL-Tabelle mit Produktinformationen werden keine Ergebnisse zurückgegeben, obwohl übereinstimmende Begriffe vorhanden sind. Beispielsweise liefert eine Suche nach „Stift“ oder „ein Stift“ in der Spalte „Produkt“ keine Ergebnisse.
Die Untersuchung
Bei der Untersuchung des Tabellenschemas stellte sich heraus, dass Es wurde festgestellt, dass die Spalte „Produkt“ als FULLTEXT-Index definiert war. Allerdings enthielt die Tabelle nur zwei Datenzeilen, die die Begriffe „Stift“ und „ein Stift“ enthielten.
Die Lösung
1. Zunehmende Datenvielfalt:
Volltextsuchalgorithmen benötigen eine ausreichende Datenmenge, um sinnvolle Muster zu erkennen. Mit nur zwei Datenzeilen war der Algorithmus nicht in der Lage, zwischen häufigen und ungewöhnlichen Wörtern zu unterscheiden, was zu schlechten Suchergebnissen führte.
Beispiel:
CREATE TABLE testproduct ( Id VARCHAR(16), prod_name TEXT, ProductIdType VARCHAR(8), PRIMARY KEY (Id), FULLTEXT (prod_name) ) ENGINE=MyISAM; insert into testproduct (id,prod_name,productidtype) values ('B00005N5PF','one pen and a good price for a pen','ASIN'); insert into testproduct (id,prod_name,productidtype) values ('B570J5XS3C',null,'ASIN');
Durch Einfügen mehr Daten mit einer Vielzahl von Begriffen und Phrasen, der Algorithmus kann Wörter besser klassifizieren und die Suchgenauigkeit verbessern.
2. Stoppwörter überschreiben:
MySQL verwaltet eine Liste gebräuchlicher Wörter, sogenannte Stoppwörter, die normalerweise von Volltextsuchen ausgeschlossen werden. In einigen Fällen können Stoppwörter jedoch für die Suche relevant sein.
Beispiel:
-- Disable stopword filtering SET ft_stopword_file = ''; -- Rebuild FULLTEXT indexes ALTER TABLE testproduct REBUILD INDEX prod_name;
Durch Überschreiben der Standard-Stoppwortliste werden relevante Begriffe wie „Jahre“ angezeigt „ oder „Punktzahl“ können in die Suchergebnisse aufgenommen werden.
3. Verwendung der booleschen und natürlichen Sprachmodi:
Der boolesche Modus erfordert genaue Übereinstimmungen, während der natürliche Sprachmodus Variationen und Synonyme zulässt. Die Verwendung des Modus für natürliche Sprache kann die Suchergebnisse erweitern.
Beispiel:
SELECT * FROM testproduct WHERE MATCH(prod_name) AGAINST('+harpoon +article' IN NATURAL LANGUAGE MODE);
Durch die Verwendung dieser Techniken kann die Volltextsuchfunktion verbessert werden, um genaue Ergebnisse zu liefern und aussagekräftige Ergebnisse für ein breiteres Spektrum an Abfragen.
Das obige ist der detaillierte Inhalt vonWarum schlägt meine MySQL-Volltextsuche aufgrund unzureichender Daten und Stoppwörter fehl?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!