大发体育娱乐在线-大发体育娱乐官方网站-大发体育娱乐登录网址
做最好的网站

搜索之简单应用

来源:http://www.dfwstonefabricators.com 作者:数据库 人气:100 发布时间:2019-09-26
摘要:在给贰个表增多字段的时候,顿然开采会报一个date类型的字段的私下认可值错误,郁闷~ 什么样在MySQL中赢得越来越好的全文字笔迹查证索结果   作者: Techrepublic.com.com  2006-04-03 1

在给贰个表增多字段的时候,顿然开采会报一个date类型的字段的私下认可值错误,郁闷~

什么样在MySQL中赢得越来越好的全文字笔迹查证索结果  
作者: Techrepublic.com.com 
2006-04-03 11:14:53 

由此排查,原本是MySQL的安插难点,在wamp下,MySQL 5.7里是从未有过设置 SQL_MODE 的。

有的是网络应用程序都提供了全文字笔迹核算索效果,客户能够选用多少个词只怕词语片断作为查询项目来定位相配的记录。在后台,那些程序选取在三个SELECT查询中的LIKE语句来实践这种查询,固然这种艺术使得,但对此全文字笔迹查证索来说,这是一种成效极端低下的点子,极其在拍卖大批量数目标时候。

1.my.ini文书中找到 [mysqld]

MySQL针对这一标题提供了一种基于内建的全文字笔迹查验索方法的缓慢解决方案。在此,开采者只要求轻易地方统一标准记出须求全文字笔迹核实索的字段,然后利用非常的MySQL方法在那二个字段运转寻找,那不止提升了品质和作用(因为MySQL对这个字段做了索引来优化寻觅),何况完结了更加高水平的检索,因为MySQL使用自然语言来智能地对结果评级,以去掉不相干的序列。

2.一旦未有SQL_MODE,就拉长,有就修改一下

那篇小说将向你陈诉在MySQL中如何进展全文字笔迹核查索。

sql_mode="STRICT_TRANS_TABLES,NO_ENGINE_SUBSTITUTION"

1、设置基本表格

3.重启MySQL;

从成立例子表格起先,使用以下的SQL命令:

mysql> CREATE TABLE reviews (id INT(5) PRIMARY KEY NOT NULL AUTO_INCREMENT, data TEXT);

如上命令创设了多个简练的音乐专融资料库(首借使整段的文字),然后向那么些表格中增加一些记录:

mysql> INSERT INTO `reviews` (`id`, `data`) VALUES

(1, 'Gingerboy has a new single out called Throwing Rocks. It's great!');

mysql> INSERT INTO `reviews` (`id`, `data`) VALUES 

(2, 'Hello all, I really like the new Madonna single. 

One of the hottest tracks currently playing...I've been listening to it all day');

mysql> INSERT INTO `reviews` (`id`, `data`)

VALUES (3, 'Have you heard the new band Hotter Than Hell?

They have five members and they burn their instruments when they play in concerts. 

These guys totally rock! Like, awesome, dude!');

注脚数据的正确性录入:

mysql> SELECT * FROM reviews;

+----+--------------------------------------------+

| id | data                                       |

+----+--------------------------------------------+

|  1 | Gingerboy has a new single out called ...  |

|  2 | Hello all, I really like the new Madon ... |

|  3 | Have you heard the new band Hotter Than... |

+----+--------------------------------------------+

3 rows in set (0.00 sec)

2、定义全文检索字段

接下去,定义您要作为全文搜索索引的字段

mysql> ALTER TABLE reviews ADD FULLTEXT INDEX (data);

Query OK, 3 rows affected (0.21 sec)

Records: 3  Duplicates: 0  Warnings: 0

应用SHOW INDEXES命令来检查索引已经被增多了:

mysql> SHOW INDEXES FROM reviews;

+---------+---------------+--------+------+------------+---------+

| Table   | Column_name   | Packed | Null | Index_type | Comment |

----------+---------------+--------+------+------------+---------+

| reviews |  id           | NULL   |      | BTREE      |         |

| reviews |  data         | NULL   | YES  | FULLTEXT   |         |

+---------+---------------+--------+------+------------+---------+

2 rows in set (0.01 sec)

3、运维全文字笔迹核准索

当你抱有了数码和目录,就足以应用MySQL的全文字笔迹查证索了,最简便易行的全文检索方式是含有MATCH...AGAINST语句的SELECT查询,以下是三个简单易行的例证,可以来搜索含有单词“single”的记录:

mysql> SELECT id FROM reviews WHERE MATCH (data) AGAINST ('single');+----+

| id |

+----+

|  1 |

|  2 |

+----+

2 rows in set (0.00 sec)

在此,MATCH()将作为参数字传送递给它的字段中的文字与传递给AGAINST()的参数进行相比较,假如有协作的,那就根据常规的法门赶回。注意你能够传递不仅二个字段用MATCH()来查阅­-只需用逗号来划分字段列表。

当MySQL收到了二个全文字笔迹查证索的央浼,它就在里面临每种记录实行业评比分,差异盟的记录得分为零,而“更相关”的记录会得到比“不太相关”的记录绝对越来越高的分数。相关性是由MySQL的一雨后玉兰片区分标准来支配的,查看MySQL的顾客手册能够拿到更加的多的新闻。

想见见各种记录的评分怎么着,只需求重返MATCH()方法作为结果集的一片段,如下所示:

mysql> SELECT id, MATCH (data) AGAINST ('rock') FROM reviews;

+----+-------------------------------+

| id | MATCH (data) AGAINST ('rock') |

+----+-------------------------------+

|  1 |                             0 |

|  2 |                             0 |

|  3 |               1.3862514533815 |

+----+-------------------------------+

3 rows in set (0.00 sec)

4、使用逻辑搜索修饰符(Boolean search modifiers)

您还足以使用逻辑寻找修饰符来进展更标准的查究,那通过在AGAINST语句中增多非常的IN BOOLEAN MODE修饰符来完毕,在以下的例证中,将追寻含有单词“single”不过并未有“Madonna”的记录:

mysql> SELECT id FROM reviews WHERE MATCH (data) AGAINST ('+single -madonna' IN BOOLEAN MODE);

+----+

| id |

+----+

|  1 |

+----+

1 row in set (0.00 sec)

这一搜求性子平日用于寻觅单词片断(并不是欧洲经济共同体的词语),那足以经过在IN BOOLEAN MODE语句中的*(星号)操作符来促成,以下的例子显示了什么寻找单词中包涵“hot”的笔录:

mysql> SELECT id FROM reviews WHERE MATCH (data) AGAINST ('hot*' IN BOOLEAN MODE);+----+

| id |

+----+

|  3 |

|  2 |

+----+

2 rows in set (0.00 sec)

你还是能够利用这种格局来搜索至少多少个传递到AGAINST的参数中,以下的例证查找了至少含有单词“hell”和“rocks”中的三个的笔录:

mysql> SELECT id FROM reviews WHERE MATCH (data) AGAINST ('hell rocks' IN BOOLEAN MODE);

+----+

| id |

+----+

|  1 |

|  3 |

+----+

2 rows in set (0.00 sec)

如上的那个事例演示了相对于古板的SELECT...LIKE语句,进行全文字笔迹查证索的更实惠的诀窍,当您下贰遍索要编写制定MySQL数据库寻找分界面包车型大巴时候,您能够品味这一方式。

本文由大发体育娱乐在线发布于数据库,转载请注明出处:搜索之简单应用

关键词:

最火资讯