2012-03-27 10 views
5

Ich habe eine Tabelle wie folgtMySQL Volltextsuche Plural/Singular Form von Worten

CREATE TABLE jobs(
    id INT UNSIGNED AUTO_INCREMENT NOT NULL PRIMARY KEY, 
    title VARCHAR(200), 
    body TEXT, 
    FULLTEXT (title,body) 
) ENGINE=MyISAM; 

Und zwei Einträge in dieser Tabelle

... 
7. 10 Senior PHP Developers (Leaders) 
8. 30 PHP Developers.. 
... 

Und zwei Anfragen:

  1. Geben Sie 2 Datensätze über

    zurück

  2. Return leere Menge

    SELECT * FROM jobs WHERE MATCH (title,body) AGAINST ('developer')

Ich dachte, dass MySQL kann diese Datensätze mit 'Entwickler' gefunden. Aber warum hat es nicht funktioniert?

Antwort

4

Sie können mit Booleschen Operatoren zum Volltext wechseln: http://dev.mysql.com/doc/refman/5.5/en/fulltext-boolean.html

und Suche nach:

SELECT * FROM jobs WHERE MATCH (title,body) AGAINST ('developer*' IN BOOLEAN MODE) 

Sie Streichhölzer bekommen für ‚Entwickler‘ zuerst, dann ‚Entwickler‘ oder eine beliebige Zeichenfolge, beginnend mit 'Entwickler'. Es ist in Ordnung für lange präzise Worte als "Entwickler", aber Suche nach "Auto *" zum Beispiel könnte zu vielen unerwarteten Ergebnissen wie "Karte", "Kardamom", ... führen.

Ich glaube nicht, dass es Grammatikanalyse in MySQL Volltextsuche. Ich habe dieses Thema heute recherchiert und nichts Besseres gefunden.

EDIT

Diese Methode wird für Wörter wie 'Partei' nicht (Plural: 'Parteien'). Wenn dein Suchformular auf Englisch beschränkt ist, denke ich, dass du die meisten Fälle mit ein paar einfachen Grammatikregeln abdecken kannst und für jedes Wort das Wort und seinen Plural suchst. Und es ist falsch, es wird wahrscheinlich zu einem ungültigen Wort führen, das bei Ihrer Suche neutral sein sollte.

+0

danke, ich denke, dass es keine stemmer innerhalb mysql Volltext-Suchmaschine ist. Ich versuche zu verstehen und finde eine beste Lösung für MySQL nicht für diesen speziellen Fall ^^. – hungneox

3
select * from index_table where item_name rlike '[[:<:]]preform[s]*[es]*[ies]*[[:>:]]'; 

Überprüfen Sie, ob dies hilft. Mein Fall hat geklappt. Obwohl nicht für alle Pluralformen abgedeckt werden wird, aber ja für 90-95% Fälle.

Cheers, Ashish