mysql 寻觅之大致利用

2019-08-03 07:59栏目:网站首页

在给贰个表增多字段的时候,猝然发现会报二个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数据库寻觅分界面包车型客车时候,您能够尝试这一主意。

版权声明:本文由威尼斯人app发布于网站首页,转载请注明出处:mysql 寻觅之大致利用