against的用法

前提:mysql只支持英文内容的全文索引,所以只考虑英文的全文搜索。假定数据表名为post,有三列:id、title、content。id是自增长序号,title是varchar,content是text,给content添加全文索引。

mysql全文搜索有三种模式:

一、自然语言查找。这是mysql默认的全文搜索方式,sql示例:select id,title FROM post WHERE MATCH(content) AGaiNST ('search keyword')

或者显式声明使用自然语言搜索方式select id,title FROM post WHERE MATCH(content) AGAINST ('search keyword' IN NATURAL LANGUAGE MODE)

由于自然语言搜索方式是默认模式,所以可以省略声明模式的“IN NATURAL LANGUAGE MODE”部分。

自然语言搜索模式的么特点:

1.忽略停词(stopword),英语中频繁出现的and/or/to等词被认为是没有实际搜索的意义,搜索这些不会获得任何结果。

2.如果某个词在数据集中频繁出现的几率超过了50%,也会被认为是停词,所以如果数据库中只有一行数据,不管你怎么全文搜索都不能获得结果。

3.搜索结果都具有一个相关度的数据,返回结果自动按相关度由高到低排列。

4.只针对独立的单词进行检索,而不考虑单词的局部匹配,如搜索box时,就不会将boxing作为检索目标。

二、布尔查找。这种查找方式的特点是没有自然查找模式中的50%规则,即便有词语在数据集中频繁出现的几率超过50%,也会被作为搜索目标进行检索并返回结果,而且检索时单词的局部匹配也会被作为目标进行检索。sql示例select id,title FROM post WHERE MATCH(content) AGAINST ('search keyword' IN BOOLEAN MODE)

三、带子查询扩展的自然语言查找。

select id,title FROM post WHERE MATCH(content) AGAINST ('search keyword' IN BOOLEAN MODE WITH EXPANSION)

暂时没有明白这种模式。四、布尔全文搜索支持以下操作符:

" + "  一个前导的加号表示该单词必须 出现在返回的每一行的开头位置

" - " 一个前导的减号表示该单词一定不能出现在任何返回的行中

(无操作符) 在默认状态下(当没有指定 + 或–的情况下),该单词可有可无,但含有该单词的行等级较高。这和MATCH() ... AGAINST()不使用IN BOOLEAN MODE修改程序时的运作很类似

" > < "这两个操作符用来改变一个单词对赋予某一行的相关值的影响。 >操作符增强其影响,而

" () "括号用来将单词分成子表达式。括入括号的部分可以被嵌套

" ~ "一个前导的代字号用作否定符, 用来否定单词对该行相关性的影响。 这对于标记“noise(无用信息)”的单词很有用。包含这类单词的行较其它行等级低,但因其可能会和-号同时使用,因而不会在任何时候都派出所有无用信息行

" * "星号用作截断符。于其它符号不同的是,它应当被追加到要截断的词上

" " "一个被括入双引号的短语 (‘"’) 只和字面上包含该短语输入格式的行进行匹配。全文引擎将短语拆分成单词,在FULLTEXT索引中搜索该单词。  非单词字符不需要严密的匹配:短语搜索只要求符合搜索短语包含的单词且单词的排列顺序相同的内容。例如, "test phrase" 符合 "test, phrase"。

"configured database "寻找包含至少两个单词中的一个的行

" +configured +database "寻找两个单词都包含的行

" +configured database "寻找包含单词“"configured”的行,若这些行也包含单词“"database”, 则列为更高等级

" +configured -database "寻找包含单词“configured” 但不包含单词 “database”的行

" +configured +(>database

" mysql* "寻找包含"mysql"或有"mysql"开头单词的行

" “my sql” "寻找包含原短语“my sql”的行

如:select * from info where match(title,info) against("+mysql -yoursql" in boolean mode);

select * from info where match(title,info) against('+configured +database');

在我的实际使用中还发现了以下细节:

1、只有MyISAM表支持

2、对大多数的多字节字符集适用,进行全文索引的列必须使用相同的字符集和校验码(collation)。

3、表意性语言,如汉语、日语没有词分界符(英语用空格隔开每个单词),全文分析器无法确定一个词的开始和结尾,所以MySQL中的全文检索不支持。

4、在自然语言检索中,只能检索被全文索引的那些列,如果要对索引的多列进行某一列的检索,必须对这一列单独建立全文索引。布尔检索可以在非索引的列上进行,但会慢一些。

5、against后的参数必须是常量字符串。

6、索引没有记录关键词在字符串中的位置,排序算法太单一。

7、如果索引不在内存中,检索速度会很慢;如果是短语查询,需要索引和数据都在内存中,否则速度会很慢,所以需要更大的key buffer。索引有碎片时也会很慢,所以需要更频繁的optimize table操作。

8、全文索引对于insert、update、delete都很慢。如更改100个词需要进行100次的索引操作而不是1次。

9.布尔查找时必须指定返回结果的排序方式,它不会像自然语言查找那样会自动将结果按相关度排序返回。

10.即使是布尔查找,对长度小于等于3的单词也不会进行检索,因为mysql有一个系统变量FT_MIN_WORD_LEN指定了全文检索时可接受的最小单词长度,默认值是4。.

相关阅读

data目录下发现这三种文件,后辍名分别为-frm,myi,myd,请问分别代表什么文件?这三种文件各有什么作用?

如果一个表同时有3个你上面说的

4.MySQL管理工具问题本案例要求基于LAMP平台部署一套phpMyAdmin应用系统,实现对MySQL服务器的Web方式管理。方案使用2台RHEL6虚拟

1. 高版本的JDBC驱动,mysql-connector-java 8以上版本。

mysql

数据排序 asc、desc

1、单一字段排序order by 字段名称 作用: 通过哪个或哪些字段进行排序 含义: 排序采用 order by 子句,order by

背景:今天在做开发过程中,报了一个很莫名其妙的错误,错误提示信息如下:SQLSTATE[HY000]: General error: 1366 Incorrect integer v

mysql against 中文_「against的用法」Mysql全文搜索之MATCH...AGAINST的用法介绍 - seo实验室...相关推荐

  1. java节假日算法_「国家法定节假日」java 国家法定节假日和双休日判断工具类 - seo实验室...

    国家法定节假日 package com.newland.dateutil; import java.text.ParseException; import java.text.simpledatefo ...

  2. python做工控机_「上位机软件」工控机上位机软件的开发历程(一) - seo实验室...

    上位机软件 本人就职于一家环境监测公司,上位机软件的主要功能是采集各仪器的数据,然后存储起来,并传送到环保局平台. 刚到公司的时候,公司使用的是组态软件(用以显示流程图),然后再开发了报表软件.数据上 ...

  3. js生日计算年龄_「周岁怎么算」【js】根据出生日期,计算周岁年龄 - seo实验室...

    周岁怎么算 /*根据出生日期算出年龄*/ function jsGetAge(strBirthday) { var returnAge; var strBirthdayArr = strBirthda ...

  4. x201换风扇_「x201拆机」联想 Thinkpad x201i怎么拆机清理风扇灰尘? - seo实验室

    x201拆机 笔记本散热风扇使用时间长了就累积很多灰尘,堵塞出风口,从而大幅降低散热效果.因此有必要对其清理.要彻底清理风扇灰尘,需要拆机方可. 首先要把笔记本的电池取下. 电池取下后,我们就可以开始 ...

  5. visio连接mysql数据库表_「数据库关系图」使用Visio 2010 画数据库中表与表的关系 - seo实验室...

    数据库关系图 1.在visio中新建数据库模型图 打开visio 2010,文件->新建->数据库->数据库模型图.建立数据库模型图之后,菜单栏多出一个菜单项"数据库&qu ...

  6. Mysql全文搜索之MATCH...AGAINST的用法介绍

    前提:mysql只支持英文内容的全文索引,所以只考虑英文的全文搜索.假定数据表名为post,有三列:id.title.content.id是自增长序号,title是varchar,content是te ...

  7. mysql 连接 中文_大佬们E语言连接MYSQL输出中文乱码怎么破

    该楼层疑似违规已被系统折叠 隐藏此楼查看此楼 .版本 2 .支持库 mysql .支持库 iext .程序集 窗口程序集_启动窗口 .子程序 _按钮1_被单击 数据库连接句柄 = 连接MySql (& ...

  8. 根据条件查询某条记录的条数_「性能与架构」MySQL 8 查询优化新工具 Explain Analyze...

    来源:性能与架构公众号 1. Explain Analyze 介绍 Explain 是我们常用的查询分析工具,可以对查询语句的执行方式进行评估,给出很多有用的线索. 但他仅仅是评估,不是实际的执行情况 ...

  9. mysql 迪卡尔运算_「笛卡尔乘积」mysql笛卡儿积 - seo实验室

    笛卡尔乘积 1.笛卡儿积数学理解 A={2,3} :B= {0,2,4} AxB = {(2,0),(3,0),(2,2),(3,2),(2,4),(3,4)},则AxB的结果集既是笛卡儿积: 但其不 ...

最新文章

  1. 关于K型车模同学反馈问题
  2. Iphone是革了传统互联网的命
  3. ytu 1057: 输入两个整数,求他们相除的余数(带参的宏 + 模板函数 练习)
  4. DC-DC电源输出纹波测量的方法
  5. jquery页面跳转带cookie_JS 如何创建、读取和删除cookie
  6. 摘录理解LDAP与LDAP注入
  7. Loadrunner多服务器连接问题
  8. 同态加密应用_重新设计具有同态性的银行应用
  9. angular js 默认选中_AngularJS Select(选择框)
  10. Java | 用Java实现冒泡排序算法
  11. python3 协程运行时 如何动态增加协程_python2.7 协程,如何调度运行两个协程?...
  12. 20200505:力扣151周周赛上
  13. Cuiwei Li / Detection of ECG characteristic points using wavelet transforms
  14. mysql分页优化方法
  15. 阿里消息中间件ONS消息乱序问题(二)
  16. SQL(1)—增删改查
  17. Qt echarts 教程(3):qml echarts 的使用方法
  18. 如何将图片转换成文字?强势安利2款图片转文字工具!
  19. 5个步骤实现流程管理
  20. 需要一个自习室系统,包括收费、灯控、会员管理、微信及前端订座、一卡通终端,会做的私信我,有偿。

热门文章

  1. 硬件工程师必须牢记的十点总结
  2. ubuntu 100M 到 10M
  3. 牛客小白月赛5 A 无关(relationship)
  4. 虎年起点:两个100万
  5. Windows系统设置宽带连接开机自动拨号的方法
  6. 【IPv6】设置win10和win11允许访问IPv6站点
  7. Java 性能优化的七个方向
  8. jeremiah(jeremiah wright简介)
  9. 唐骏《我的成功可以复制》
  10. 拒绝黄牛 《东方早报》记者在太平洋数码遭殴