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

标签 mysql nlp full-text-search

我有一张人们的全名表。我希望用户能够通过部分名称和拼写错误的名称进行搜索。因此,搜索“Andrew”也应该返回“Andrea”等。我认为 FULLTEXT 搜索就是答案,但它的工作方式似乎与我使用 搜索没有任何不同...喜欢“%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

等等

最佳答案

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

MySQL 确实有一个 SOUNDEX() 函数,以及一个速记 x SOUNDS LIKE y 运算符,它与 SOUNDEX(x) = SOUNDEX( y).

如果 soundex 不能满足您的需求,您确实需要使用 PHP 等编程语言来完成您想要的任务。

关于MySQL 自然语言搜索没有像我希望的那样工作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4355402/

相关文章:

php - 为什么错误 #1066 - 不唯一的表/别名 : 'cat_rapoarte'

elasticsearch - 如何为大量数据设置弹性集群?

java - 如何在 Java 中检索词素的所有变体?

python - 使用 Python 进行拼写纠正 (pyspellchecker)

python - 如何将文件中的行追加到列表中,同时保留行数 - python 3

Linux SED 脚本找到匹配模式的第一行并将其删除

php - 全文 bool 搜索停用词返回空结果

mysql存储过程从基于数据库的队列中弹出

php - 如何在 PHP 中使用 If/else 语句过滤 mysql 结果

php - MySQL,链接数据