2010-12-04 3 views
0

私は人のフルネームのテーブルを持っています。私は、ユーザーが部分的な名前とスペルミスの名前で検索できるようにしたいと思います。 Andrewの検索でもAndreaが返されるはずです。FULLTEXT検索が答えだと思っていましたが、もし私が... LIKE '%Andrew%'を使って検索したのとは違った動作をしているようです。
MySQLに、文字列の類似性に基づいて検索する機能または機能がありますか?または、私はlevenshtein()または何か類似したものを使ってPHPの最後で自分自身をロールバックする必要がありますか?MySQL Natural Lanquage検索がうまくいっていない

を考えると、この表:

CREATE TABLE `people` (
    `FullName` varchar(30) default NULL, 
    `namesID` int(11) NOT NULL auto_increment, 
    PRIMARY KEY (`namesID`), 
    FULLTEXT KEY `fulltext_FullName` (`FullName`) 
) ENGINE=MyISAM AUTO_INCREMENT=15 DEFAULT CHARSET=utf8; 

LOCK TABLES `people` WRITE; 
/*!40000 ALTER TABLE `people` DISABLE KEYS */; 
INSERT INTO `people` (`FullName`,`namesID`) 
VALUES 
    ('Mark Peters',1), 
    ('Bob Jackson',2), 
    ('Steve Kipp',3), 
    ('Joe Runty',4), 
    ('Tina Mardell',5), 
    ('Tim Havers',6), 
    ('Rich Beckett',7), 
    ('Mary Dalson',8), 
    ('Maria Grento',9), 
    ('Michael Colt',10), 
    ('Andrew Peters',11), 
    ('Andre Bison',12), 
    ('Andrea Masters',13), 
    ('Marla Tool',14); 

/*!40000 ALTER TABLE `people` ENABLE KEYS */; 
UNLOCK TABLES; 

このクエリ:私だけ

SELECT * 
FROM people 
WHERE MATCH(FullName) AGAINST('Andrew'); 

を得る:

FullName  namesID 
Andrew Peters 11 

私も取得したいときは:

Andre Bison 
Andrea Masters 

など

答えて

3

FULLTEXTインデックスは、フルテキストのインデックス以上のものではありません。彼らはあなたが実際に持っているテキストだけを検索することができます。

MySQLにはSOUNDEX()関数があり、x SOUNDS LIKE yという略語はSOUNDEX(x) = SOUNDEX(y)と同じです。

soundexがあなたのニーズを満たしていない場合は、実際には、あなたが望むものを達成するためにPHPのようなプログラミング言語を使用する必要があります。

関連する問題