Mysql 简单实现全文检索(FULLTEXT)

这篇具有很好参考价值的文章主要介绍了Mysql 简单实现全文检索(FULLTEXT)。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

版本支持

MySQL 5.6 以前的版本,只有 MyISAM 存储引擎支持全文索引;

MySQL 5.6 及以后的版本,MyISAM 和 InnoDB 存储引擎均支持全文索引;

只有字段的数据类型为 char、varchar、text 及其系列才可以建全文索引。

按顺序操做:

1.修改数据库配置

etc/my.cnf 文件 [mysqld] 下面加入

ngram_token_size=1  //支持中文 日文 韩文检索 没配置这个不能使用中文检索
innodb_ft_min_token_size = 1  //InnoDB 检索单位配置
ft_min_word_len = 1   //MyISAM  检索单位配置

1表示以 一个字符隔开检索  如 : 关键字'abc' 会分割成 a b c 分别去匹配

如果为2的话 是这样分割匹配的 ab bc

2.配置完重启下mysql

3.执行sql创建索引

给goods表的name字段 创建一个解析器为ngram 名称为full_index_name 的fulltext索引

CREATE FULLTEXT INDEX full_index_name ON goods(name) WITH PARSER `ngram`;

4.查询

自然语言的全文索引(默认)
//score表示相关性评分 默认排序是评分倒序

//key是关键词


select *,(MATCH ( `name`  ) AGAINST ( 'key' )  )AS score
from goods
where MATCH(name) AGAINST('key' ) ;

布尔全文索引(可以见一些复杂写的限制条件检索 实现更精准的查询)

在布尔搜索中,我们可以在查询中自定义某个被搜索的词语的相关性,当编写一个布尔搜索查询时,可以通过一些前缀修饰符来定制搜索。

  1. + 必须包含该词

  2. - 必须不包含该词

  3. > 提高该词的相关性,查询的结果靠前

  4. < 降低该词的相关性,查询的结果靠后

  5. (*)星号 通配符,只能接在词后面

 

# 必须每个词都有匹配

例如
select *  ,(MATCH ( `name`  ) AGAINST ( 'key' )  )AS score
from goods
where MATCH(title) AGAINST('+key' IN BOOLEAN MODE) order by score Desc;

完成.

备注 :MySQL ngram全文解析器简介

MySQL内置的全文解析器使用空格确定单词的开始和结束。当涉及汉语,日语或韩语等表意语言语言时,这是一个限制,因为这些语言不使用分词符。

为了解决这个问题,MySQL提供了ngram全文解析器。自MySQL5.7.6版起,MySQL将ngram全文解析器作为内置的服务器插件,这意味着当MySQL数据库服务器启动时,MySQL会自动加载该插件。 MySQL支持用于InnoDBMyISAM存储引擎的ngram全文解析器。

根据定义,ngram是来自文本序列的多个字符的连续序列。 ngram全文解析器的主要功能是将文本序列标记为n个字符的连续序列。
 

文档上说 MySQL5.7.6之后的版本才支持ngram全文解析器 我使用的5.7.3版本的mysql 亲测是可以实现的文章来源地址https://www.toymoban.com/news/detail-486411.html

到了这里,关于Mysql 简单实现全文检索(FULLTEXT)的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • MySQL高级特性篇(3)-全文检索的实现与优化

    MySQL数据库全文检索是指对数据库中的文本字段进行高效地搜索和匹配。在MySQL数据库中,可以使用全文检索来实现快速的文本搜索功能,并且可以通过一些优化手段提高全文检索的性能。 全文检索是一种将搜索与自然语言处理技术结合起来的搜索方法。与传统的基于

    2024年02月19日
    浏览(38)
  • 双方案-基于Mysql 与 ElasticSearch实现关键词提示搜索与全文检索

    就喜欢搞这种不需要怎么费劲的东西,只需要把思路阐述清楚,随笔性质的博文,顺手啊,几乎不用改定就可以当博文发布出去。 那么,这里的话我们要做的就是实现这个的一个搜索功能,这个前端我就不说了,实现起来起来其实还是容易的,就是费劲。我们主要关注

    2024年01月18日
    浏览(60)
  • MySQL中文全文检索

    常规数据库搜索都是用 like 语句,但是like 语句是不能利用索引的,查询效率极其低下。这也就是为什么很多功能都只提供标题搜索的原因,因为如果搜索内容,几万数据就跑不动了。 Mysql 全文索引是专门为了解决模糊查询提供的,可以对整篇文章预先按照词进行索引,搜索

    2024年02月14日
    浏览(44)
  • mysql全文检索使用

    数据库数据量10万左右,使用like \\\'%test%\\\'要耗费30秒左右,放弃该办法 使用mysql的全文检索 第一步:建立索引 首先修改一下设置: my.ini中ngram_token_size = 1 可以通过    show variables like \\\'%token%\\\';来查看 接下来建立索引:alter  table 表名 add fulltext titlefull (字段名) with parser ngram; 第二步

    2024年02月12日
    浏览(38)
  • MySQL 中文全文检索

    创建索引(MySQL 5.7.6后全文件索引可用WITH PARSER ngram,针对中文,日文,韩文) 查询方法 注意 只能在类型为CHAR、VARCHAR或者TEXT的字段上创建全文索引。 全文索引只支持InnoDB和MyISAM引擎。 MATCH()函数使用的字段名,必须要与创建全文索引时指定的字段名一致。 多个字段索引,

    2024年02月12日
    浏览(50)
  • MySQL——全文检索

    不是所有的数据表都支持全文检索 MySQL支持多种底层数据库引擎,但是并非所有的引擎支持全文检索 ,目前最常用引擎是是MyISAM和InnoDB;前者支持全文检索,后者不支持。 表productnotes : 1. 查询包含 rabbit 的行,并按照相关性排序  2.显示每一条的相关性值 3.有heavy 但是没有

    2024年04月15日
    浏览(43)
  • MySQL 全文检索

    不是所有的数据表都支持全文检索 MySQL支持多种底层数据库引擎,但是并非所有的引擎支持全文检索 ,目前最常用引擎是是MyISAM和InnoDB;前者支持全文检索,后者不支持。 操作符 含义 + 必须有 - 必须不包含 包含对应的排名靠前 包含对应的排名靠后 ~ 取反()

    2024年04月15日
    浏览(38)
  • docker安装的mysql更改全文检索分词配置

    这里使用的是mysql8.0+,默认使用ngram分词 这里是已经将文件从容器中挂载出来了,没挂载出来要去容器内部更改my.cnf文件并重启mysql容器 一、查看mysql的分词大小 ngram_token_size这里默认是2我已经改为1了 这个值代表分词大小 比如abc会分成ab和bc两个词,会导致检索单个词a、b、

    2024年02月16日
    浏览(42)
  • MySQL全文索引:中文语义分词检索(相似度匹配)

    前些天发现了一个巨牛的人工智能学习网站,通俗易懂,风趣幽默,忍不住分享一下给大家。点击跳转到网站。 通常情况下,全文检索引擎我们一般会用ES组件(传送门:SpringBoot系列——ElasticSearch),但不是所有业务都有那么大的数据量、那么大的并发要求,MySQL5.7之后内置

    2023年04月09日
    浏览(40)
  • 中文全文检索pgroonga在HGDB-SEE V4.5.8版本编译

    PGroonga 官网:https://pgroonga.github.io/ Description:PGroonga (píːzí:lúnɡά) is a PostgreSQL extension to use Groonga as the index.PostgreSQL supports full text search against languages that use only alphabet and digit. It means that PostgreSQL doesn’t support full text search against Japanese, Chinese and so on. You can use super fast full te

    2024年02月22日
    浏览(47)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包