Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/performance/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/sql-server-2005/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
MySQL中的全文搜索_Mysql_Performance_Search_Entity_Similarity - Fatal编程技术网

MySQL中的全文搜索

MySQL中的全文搜索,mysql,performance,search,entity,similarity,Mysql,Performance,Search,Entity,Similarity,我不熟悉MySQL中的“搜索”,我有一些任务,我不知道如何以最佳方式实现它们 我的数据库中有以下MySQL表 delimiter $$ CREATE TABLE `authors` ( `id` int(11) NOT NULL, `name` varchar(100) COLLATE utf8_unicode_ci NOT NULL, `count` int(11) NOT NULL DEFAULT '1', PRIMARY KEY (`id`), UNIQUE KEY

我不熟悉MySQL中的“搜索”,我有一些任务,我不知道如何以最佳方式实现它们

我的数据库中有以下MySQL表

delimiter $$

CREATE TABLE `authors` (
  `id` int(11) NOT NULL,
  `name` varchar(100) COLLATE utf8_unicode_ci NOT NULL,
  `count` int(11) NOT NULL DEFAULT '1',
  PRIMARY KEY (`id`),
  UNIQUE KEY `name_UNIQUE` (`name`),
  FULLTEXT KEY `name_fulltext` (`name`)
) ENGINE=MyISAM DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci$$
任务是:在html表单中,我想输入一个名称,比如“John Doe”。应在此表中的“名称”列中查找此名称。我希望查询返回所有类似的名称,如“johndue”或“johndoé”等等。因此,用户可以从列表中选择正确的名称。有时人们想查一个像“约翰·凡多伊”(荷兰风格)这样的名字。这也应该显示在列表中

如何最好地实现这一点?或者我最好问一下。这可能吗?=)顺便说一下,我使用的是python cgi脚本,因此python可以提供的任何模块都是可用的

另一个问题是:如何查找“John”或“Dow”?应显示每一个有“约翰”字样的姓名。我试着用“约翰”这样的名字,但这太慢了。有没有更快的办法


谢谢您的建议。

解决此问题的一种方法是为名称创建一个。所有相似名称的规范名称都是相同的。然后,当您想要查找John Doe或John Doé或其他任何东西时,您首先要生成规范名称,然后根据该名称进行查找

当然,创建一个规范化人名的算法是非常困难的,如果您想让Doe和Due这样的东西相互对应的话。一个简单的基本解决方案是去掉所有的重音(A->A),去掉von,van等

任务是:在html表单中,我想输入一个名称,比如“John Doe”。应在此表中的“名称”列中查找此名称。我希望查询返回所有类似的名称,如“johndue”或“johndoé”等等。因此,用户可以从列表中选择正确的名称。有时人们想查一个像“约翰·凡多伊”(荷兰风格)这样的名字。这也应该显示在列表中

MySQL
不支持同义词词典,所以您应该自己提供一个

Yahoo API
提供拼写更正服务,您可以通过提交类似以下内容的查询来使用该服务:

SELECT  *
FROM    search.spelling
WHERE   query='juhn doe'
使用此
URL

http://query.yahooapis.com/v1/public/yql?q=SELECT%20%20*%20%20FROM%20search.spelling%20WHERE%20query%20%3D%20'juhn%20doe'&format=json&diagnostics=true&callback=cbfunc
一旦收到同义词列表,您就可以使用以下查询来搜索它们:
MySQL

SELECT  *
FROM    authors
WHERE   MATCH(name) AGAINST ('(+juhn +doe) (+john +doe)' IN BOOLEAN MODE)
John Doé
将由此返回,因为您使用的是不区分大小写和重音的
UTF8\u GENERAL\u CI

如果只想查找
John
,请使用以下查询:

SELECT  *
FROM    authors
WHERE   MATCH(name) AGAINST ('+john' IN BOOLEAN MODE)
另外,请确保在
my.cnf
中将参数
ft\u min\u word\u len
设置为合理的值(
1
最好)


默认值为
4
,这意味着不会为三个字母的姓氏(如
Doe
)编制索引。

我个人认为您应该稍微研究一下数据库规范化。非常感谢!你回答的最后一部分对我帮助很大!