+ -
当前位置:首页 → 问答吧 → 请老师帮忙,难道第一句都做了索引?

请老师帮忙,难道第一句都做了索引?

时间:2011-10-28

来源:互联网

百度搜索“广告植入现代商业社会是很正常的“可以完全匹配出这一句话,我在想,难道百度把搜索的文章第一个句子都拆分保存到数据库当中,并作了索引?不然怎么那么快的匹配出来呢?但仔细一想也不太可能啊?汉字最少也得5000字以上不算标点符号,如果这样不规则的组合,得组合成多少句不一的句子啊?光9位数字就可以组合这么多了:
9^9=387420489 何况5000字,?请老师解释一下。

作者: lovewangya   发布时间: 2011-10-28

全文索引。

作者: ACMAIN_CHM   发布时间: 2011-10-28

引用12.7. 全文搜索功能
12.7.1. 布尔全文搜索
12.7.2. 全文搜索带查询扩展
12.7.3. 全文停止字
12.7.4. 全文限定条件
12.7.5. 微调MySQL全文搜索
MATCH (col1,col2,...) AGAINST (expr [IN BOOLEAN MODE | WITH QUERY EXPANSION])
MySQL支持全文索引和搜索功能。MySQL中的全文索引类型FULLTEXT的索引。 FULLTEXT 索引仅可用于 MyISAM 表;他们可以从CHAR、 VARCHAR或TEXT列中作为CREATE TABLE语句的一部分被创建,或是随后使用ALTER TABLE 或 CREATE INDEX被添加。对于较大的数据集,将你的资料输入一个没有FULLTEXT索引的表中,然后创建索引, 其速度比把资料输入现有FULLTEXT索引的速度更为快。

关于全文搜索的限制列表,请参见 12.7.4节,“全文限定条件”.

全文搜索同MATCH()函数一起执行。

mysql> CREATE TABLE articles (
-> id INT UNSIGNED AUTO_INCREMENT NOT NULL PRIMARY KEY,
-> title VARCHAR(200),
-> body TEXT,
-> FULLTEXT (title,body)
-> );
Query OK, 0 rows affected (0.00 sec)

mysql> INSERT INTO articles (title,body) VALUES
-> ('MySQL Tutorial','DBMS stands for DataBase ...'),
-> ('How To Use MySQL Well','After you went through a ...'),
-> ('Optimizing MySQL','In this tutorial we will show ...'),
-> ('1001 MySQL Tricks','1. Never run mysqld as root. 2. ...'),
-> ('MySQL vs. YourSQL','In the following database comparison ...'),
-> ('MySQL Security','When configured properly, MySQL ...');
Query OK, 6 rows affected (0.00 sec)
Records: 6 Duplicates: 0 Warnings: 0

mysql> SELECT * FROM articles
-> WHERE MATCH (title,body) AGAINST ('database');
+----+-------------------+------------------------------------------+
| id | title | body |
+----+-------------------+------------------------------------------+
| 5 | MySQL vs. YourSQL | In the following database comparison ... |
| 1 | MySQL Tutorial | DBMS stands for DataBase ... |
+----+-------------------+------------------------------------------+
2 rows in set (0.00 sec)
MATCH()函数对于一个字符串执行资料库内的自然语言搜索。一个资料库就是1套1个或2个包含在FULLTEXT内的列。搜索字符串作为对AGAINST()的参数而被给定。对于表中的每一行, MATCH() 返回一个相关值,即, 搜索字符串和 MATCH()表中指定列中该行文字之间的一个相似性度量。

在默认状态下, 搜索的执行方式为不区分大小写方式。然而,你可以通过对编入索引的列使用二进制排序方式执行区分大小写的全文搜索。 例如,可以向一个使用latin1字符集的列给定latin1_bin 的排序方式,对于全文搜索区分大小写。

如上述所举例子,当MATCH()被用在一个 WHERE 语句中时,相关值是非负浮点数。零相关的意思是没有相似性。相关性的计算是基于该行中单词的数目, 该行中独特子的数目,资料库中单词的总数,以及包含特殊词的文件(行)数目。

对于自然语言全文搜索,要求MATCH() 函数

作者: ACMAIN_CHM   发布时间: 2011-10-28

那楼上的老师(ACMAIN_CHM)能否解释一下:

百度搜索:鸡植入现代商业社会是很正常的了
可以匹配:植入现代商业社会是很正常的了
百度搜索:风植入现代商业社会是很正常的了
匹配不到:植入现代商业社会是很正常的了

作者: lovewangya   发布时间: 2011-10-28

相关阅读 更多

热门下载

更多