2012-03-27 16 views
5

Ho una tabella come questaMySQL ricerca a testo integrale plurale/singolare forma di parole

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

E due record in questa tabella

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

E due query:

  1. Restituisci 2 documenti sopra

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

  2. ritorno insieme vuoto

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

ho pensato che MySQL può trovato questi record con 'sviluppatore'. Ma perché non ha funzionato?

risposta

4

È possibile passare al testo completo con gli operatori booleani: http://dev.mysql.com/doc/refman/5.5/en/fulltext-boolean.html

e cercare:

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

Otterrete risultati per 'sviluppatore', poi 'sviluppatori' o qualsiasi stringa che inizia con 'sviluppatore'. Va bene per parole lunghe e precise come 'sviluppatore', ma la ricerca di 'auto *' potrebbe portare a molti risultati inaspettati come 'card', 'cardamon', ....

Non penso ci sia analisi grammaticale nella ricerca full text di MySQL. In realtà stavo ricercando questo problema oggi e non ho trovato nulla di meglio.

EDIT

Questo metodo non funziona per parole come 'partito' (plurale: 'parti'). Se il tuo modulo di ricerca è limitato all'inglese, penso che tu possa coprire la maggior parte dei casi con alcune semplici regole grammaticali, e per ogni parola, cerca la parola e il suo plurale. Ed è sbagliato probabilmente porterà a una parola non valida, che dovrebbe essere neutrale nella ricerca.

+0

grazie, credo che non ci sia Stemmer all'interno dei motori di ricerca full-text mysql. Cerco di capire e trovare una soluzione migliore per MySQL non per questo caso speciale ^^. – hungneox

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

Verificare se questo aiuta. Il mio caso ha funzionato. Anche se non coprirà tutti i plurali ma sì per il 90-95% dei casi.

Cheers, Ashish

Problemi correlati