Mysql全文搜索match…against的用法

摘要:
againstCooking刀博客MySQL全文搜索的用法匹配……假设数据表名为post,有三列:id、title和content。MySQL全文搜索有三种模式:第一,自然语言搜索。这是MySQL的默认全文搜索方法。例如,[code=plain]selectid,titleFROMpostWHERE CHAGAINST,或使用自然语言搜索方法的显式声明[code=plain]selectid,titleFROMpostWHERE CHAGAINST因为自然语言搜索方式是默认模式,声明模式的“INCLUDANGUAGEMODE”部分可以省略。即使对于布尔搜索,长度小于或等于3的单词也不会被检索,因为MySQL有一个系统变量FT_MIN_WORD_LEN指定了全文检索的最小可接受字长。默认值为4。

Mysql全文搜索match…against的用法 « 菜刀网志

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

mysql全文搜索有三种模式:

一、自然语言查找。这是mysql默认的全文搜索方式,sql示例:
[code=plain]

selectid,titleFROMpostWHEREMATCH(content)AGAINST('searchkeyword')

或者显式声明使用自然语言搜索方式
[code=plain]

selectid,titleFROMpostWHEREMATCH(content)AGAINST('searchkeyword'INNATURALLANGUAGEMODE)

由于自然语言搜索方式是默认模式,所以可以省略声明模式的“INNATURALLANGUAGEMODE”部分。
自然语言搜索模式的么特点:

  • 忽略停词(stopword),英语中频繁出现的and/or/to等词被认为是没有实际搜索的意义,搜索这些不会获得任何结果。
  • 如果某个词在数据集中频繁出现的几率超过了50%,也会被认为是停词,所以如果数据库中只有一行数据,不管你怎么全文搜索都不能获得结果。
  • 搜索结果都具有一个相关度的数据,返回结果自动按相关度由高到低排列。
  • 只针对独立的单词进行检索,而不考虑单词的局部匹配,如搜索box时,就不会将boxing作为检索目标。

二、布尔查找。这种查找方式的特点是没有自然查找模式中的50%规则,即便有词语在数据集中频繁出现的几率超过50%,也会被作为搜索目标进行检索并返回结果,而且检索时单词的局部匹配也会被作为目标进行检索。sql示例
[code=plain]

selectid,titleFROMpostWHEREMATCH(content)AGAINST('searchkeyword'INBOOLEANMODE)

三、带子查询扩展的自然语言查找。[code=plain]

selectid,titleFROMpostWHEREMATCH(content)AGAINST('searchkeyword'INBOOLEANMODEWITHEXPANSION)

暂时没有明白这种模式。

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

  • 布尔查找时必须指定返回结果的排序方式,它不会像自然语言查找那样会自动将结果按相关度排序返回。
  • 即使是布尔查找,对长度小于等于3的单词也不会进行检索,因为mysql有一个系统变量FT_MIN_WORD_LEN指定了全文检索时可接受的最小单词长度,默认值是4。.

免责声明:文章转载自《Mysql全文搜索match…against的用法》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇linux下/dev/null被误删Thinkphp6笔记十五:模板路径自定义配置下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

相关文章

MySQL 数据恢复

首先针对修复过程中产生的问题进行再修复: 1、通过 alter table expresspackage discard tablespace; 解除表结构文件 expresspackage.frm 和表数据文件 expresspackage.ibd 的绑定,会直接删除 data 文件夹下的 expresspackage.ibd 文件,这时候数据库重启数据...

Mysql中查询索引和创建索引

查询索引   show index from table_name 1.添加PRIMARY KEY(主键索引) ALTER TABLE `table_name` ADD PRIMARY KEY ( `column` ) 2.添加UNIQUE(唯一索引) ALTER TABLE `table_name` ADD UNIQUE ( `column` ) 3.添...

Docker mysql主从配置

一:Mysql基于Docker的主从复制搭建 1:安装docker,安装步骤可见我之前的文章:Docker-常用基建的安装与部署 docker ps 命令查询当前的容器状态,这就是我们最后要达到的效果。 2:首先拉取mysql官方镜像 bash> docker pull mysql:5.7 演示环境是在同一台服务器上部署。因为docker创建容器时...

Go Mysql Driver 集成 Seata-Golang 解决分布式事务问题

简介: 2020 年 4 月,我们开始尝试实现 go 语言的分布式事务框架 Seata-Golang。众所周知,Seata AT 模式以无业务代码侵入的特点,被广大开发者推崇。Java 版 Seata AT 模式通过对 DataSource 数据源进行代理,在 sql 语句执行时,对 sql 拦截解析,获取数据库对应数据在 sql 语句执行前后的副本,序列...

Mysql中的递归查询

需求 按条件查询菜单及其子菜单。 表结构 sys_menu表,一列是id,一列是parent_id,level表示菜单层级,name菜单名称。 其中level=1的跟菜单,parent_id为空。 查询语句 SELECT @pid,menu.* FROM (select * from sys_menu order by level) menu,(SELEC...

wordpress源码解析-数据库表结构(转)

如果是一个普通的用户,不需要了解wordpress数据库的结构。但是,如果你正在写一个插件,你应该会对wordpress如何处理它的数据和关系感兴趣。如果你已经尝试使用已经存在的wordpress api 去访问你需要的数据,但不直接访问数据库的情况下,这是不可能的,WordPress的提供WPDB的类,使这项任务变得简单。 WordPress数据库的11...