MySQL自然语言搜索没有像我希望的那样工作

时间:2010-12-04 19:33:29

标签: mysql nlp full-text-search

我有一张人的全名表。我希望用户能够通过部分名称和拼写错误的名称进行搜索。所以搜索'安德鲁'也应该返回'安德里亚'等等。我认为FULLTEXT搜索是答案,但它似乎与我使用... LIKE '%Andrew%'进行搜索没有任何不同。
MySQL中是否存在基于字符串相似性进行搜索的功能或特性?或者我是否必须使用levenshtein()或类似的东西在PHP端滚动我自己?

鉴于此表:

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

1 个答案:

答案 0 :(得分:3)

FULLTEXT索引只不过是全文索引。它们只允许搜索您实际拥有的文本。

MySQL确实有一个SOUNDEX()函数和一个速记x SOUNDS LIKE y运算符,它与SOUNDEX(x) = SOUNDEX(y)相同。

如果soundex不能满足您的需求,您确实需要使用像PHP这样的编程语言来实现您的目标。