私は人のフルネームのテーブルを持っています。私は、ユーザーが部分的な名前とスペルミスの名前で検索できるようにしたいと思います。 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
など