mysql/Mariadb开启全文检索fulltext配置以及大数据搜索优化
Song •
7424 次浏览 •
0个评论 •
2018年03月17日
1.使用Mysql全文检索fulltext的先决条件
- 表的类型必须是
MyISAM或者Mysql 5.6以上的InnoDB - 建立全文检索的字段类型必须是
char,varchar,text2.建立全文检索先期配置
由于Mysql的默认配置索引的词的长度是4,所以要支持中文单字的话,首先要更改ft_min_word_len参数。如果改为2可能会出现搜索不到数字或者英文的情况,我们这里把它改成1,*Unix用户要修改my.cnf,一般此文件在/etc/my.cnf,如果没有找到,先查找一下find / -name 'my.cnf'
在[mysqld]位置内加入:
ft_min_word_len = 1
其它属性还有
ft_wordlist_charset = gbk
ft_wordlist_file = /home/soft/mysql/share/mysql/wordlist-gbk.txt
ft_stopword_file = /home/soft/mysql/share/mysql/stopwords-gbk.txt
解释一下上面的意思:
ft_wordlist_charset表示词典的字符集, 目前支持良好的有(UTF-8,gbk,gb2312,big5)ft_wordlist_file是词表文件, 每行包括一个词及其词频(用若干制表符或空格分开,消岐专用)ft_stopword_file表示过滤掉不索引的词表, 一行一个.ft_min_word_len加入索引的词的最小长度, 默认为4, 为了支持中文单字故改为23.建立全文检索
在建表中用FullText关键字标识字段,已存在的表用ALTER TABLE (或 CREATE INDEX)创建索引
CREATE fulltext INDEX index_name ON table_name(colum_name);
# 如果是两个字段,下面的查询也只能是两个
CREATE fulltext INDEX index_name ON table_name(colum_name,colum_name1);
4.使用全文检索
在SELECT的WHERE字句中用MATCH函数,索引的关键词用AGAINST标识,其中IN BOOLEAN MODE表示只要含有关键字就行,不用在乎位置,是不是起启位置。
SELECT * FROM articles WHERE MATCH (tags) AGAINST ('旅游' IN BOOLEAN MODE);
# 如果上面CREATE是两个字段,下面的查询也只能是两个
SELECT * FROM articles WHERE MATCH (colum_name,colum_name1) AGAINST ('旅游' IN BOOLEAN MODE);
5、使用MATCH AGAINST和LIKE语句的对比
在小数据量的情况下,两者差距不大,但是如果用户量达到百万级,千万级以后,你会发现,使用like一次需要10几秒或者几十秒,但是如果你使用MATCH AGAINST全文索引,速度非常快,一般就1秒以内。
-
laravel中distinct()的使用方法与去重 2017-09-11 -
Laravel将view缓存为静态html,laravel页面静态缓存 2021-10-09 -
[ laravel爬虫实战--基础篇 ] guzzle描述与安装 2017-11-01 -
[ 配置教程 ] 在ubuntu16.04中部署LNMP环境(php7+maridb且开启maridb远程以及nginx多域名访问 )并配置laravel环境 2017-07-18 -
nginx如何查看当前访问的是哪个网址 2025-11-17
热门文章
-
nginx如何查看当前访问的是哪个网址 2025-11-17 -
微信公众号回复菜单点击回复文本 2025-10-24 -
laravel+easywechat6出现No component_verify_ticket found以及修改缓存为redis 2025-09-09 -
nginx 服务器如何查看当前访问的域名 2025-06-10 -
ubuntu+nginx当服务器异常时微信/企业微信/抖音数据重复回调导致服务器崩溃怎么解决? 2025-05-30

更多相关好文