中力建设网站成品网站是什么意思
中力建设网站,成品网站是什么意思,国家重大建设项目库网站注册,帝国cms获取网站地址概述
使用全文索引的场景#xff1a;
like、json字段查询太慢ES、Solr、Lucene这种比较高级的搜索引擎学习成本和使用成本较高#xff0c;而自己的业务量需求并没有达到这个级别
全文索引通过建立倒排索引来快速匹配文档#xff0c;MySQL 5.6 版本引入此功能#xff0c…概述
使用全文索引的场景
like、json字段查询太慢ES、Solr、Lucene这种比较高级的搜索引擎学习成本和使用成本较高而自己的业务量需求并没有达到这个级别
全文索引通过建立倒排索引来快速匹配文档MySQL 5.6 版本引入此功能全文索引将连续的字母、数字和下划线当做一个单词分割单词一般用空格、逗号、句号。
简介
MySQL中的全文索引是FultLeXT类型的索引全文索引只能用于InnoDB或MyISAM表只能为CHAR、VARCHAR、TEXT列创建MATCH (字段) AGAINST (关键词)必须和创建时的字段一起例如MATCH (light,weight,baby)使用的字段名与全文索引muscle(light,weight,baby)定义的字段名一致。如果只对单个字段查询需要分别创建全文索引全文索引是以词为基础的innodb_ft_min_token_size和innodb_ft_max_token_size用来设置单词的最大和最小长度不在这个长度区间的将忽略。在停用词stopwords中的将被忽略MySQL 5.7.6提供支持中文、日文和韩文CJK的内置全文ngram解析器以及用于日文的可安装MeCab全文解析器插件当创建表时可在CREATE TABLE语句中给出FULLTEXT索引定义或稍后使用ALTER TABLE或CREATE INDEX添加该定义对于大型数据集将数据加载到没有FULLTEXT索引的表中然后创建索引要比将数据加载到具有现有FULLTEXT索引的表中快得多
类型
全文索引的三种类型
自然语言IN NATURAL LANGUAGE MODE通过MATCH AGAINST传递某个特定的字符串来进行检索布尔全文IN BOOLEAN MODE支持操作符如表示包含-表示不包含查询扩展WITH QUERY EXPANSION相当于自然语言模式下的一个扩展执行两次检索第一次使用给定短语检索第二次是结合第一次相关性比较高的行进行检索
创建
创建全文索引的三种方式
建表时指定FULLTEXT(column1, column2, ...)修改表 ALTER TABLE table_name ADD FULLTEXT INDEX index_name (column1, column2, ...);对表新增indexCREATE FULLTEXT INDEX index_name ON table_name (column1, column2, ...);
配置 编辑my.ini配置文件增加
# MySQL全文索引查询关键词最小长度限制
[mysqld]
ft_min_word_len 1存储方式
full inverted index会占用更多的空间因为它不仅会存储单词和单词所在文档的ID还会存储单词所在文档的ID中具体的位置。inverted file index只存储单词及对应的单词所在文档。节省空间但是查找时只能根据关键字得到相应文档再进行查找
stopword
InnoDB会把单词拆分进行存储查找时根据单词匹配默认是英文符号。有些词是不能索引查询的就称之为停用词stopword。查询系统的默认停止词
SELECT * FROM information_schema.INNODB_FT_DEFAULT_STOPWORD;添加自定义的停用词
相关表
information_schema.INNODB_FT_INDEX_TABLE
information_schema.INNODB_FT_INDEX_CACHE information_schema.INNODB_FT_DEFAULT_STOPWORD
相关性
计算原理
word查询关键字是否在文档中出现word在文档中出现的次数word在索引列中的数量多少个文档包含该word
排序等级由MySQL根据行中词的数目、唯一词的数目、整个索引中词的总数以及包含该词的行的数目计算出来
实战
建表语句
CREATE TABLE full_text_test (title VARCHAR(80),FULLTEXT (title)
);插入准备好的数据
INSERT INTO full_text_test
VALUES
(Its a beautiful night were looking for something dumb to do),
(Hey baby I think I wanna marry you),
(Is it the look in your eyes or is it this dancing juice),
(Who cares baby I think I wanna marry you),
(Well I know this little chapel on the boulevard),
(We can go ooooo),
(No one will know ooo),
(Oh come on girl),
(Who cares if were trashed),
(Got a pocket full of cash we can blow whoa whoa),
(Shots of patrol whoa whoa),
(And its on girl),
(Dont say no no no no no),
(Just say yeah yeah yeah yeah yeah),
(If youre ready like Im ready),
(Ill go get the ring),
(Let the choir bell sing like ooh ooh ooh),
(So what you wanna do ooh ooh),
(Lets just run girl),
(If we wake up and you want to break up),
(Thats cool ooh ooh),
(No I wont blame you ooh ooh),
(It was fun girl),
(And well go go go go go),
(Just say I do ooh ooh ooh),
(Tell me right now baby),
(Tell me right now baby baby);自然语言
Natural Language也是默认的检索模式表示查询带有指定word的文档下面2种方式是等价
SELECT title, MATCH(title) AGAINST(baby) AS relevance FROM full_text_test order by relevance desc;SELECT title, MATCH(title) AGAINST(baby in NATURAL LANGUAGE MODE) AS relevance FROM full_text_test order by relevance desc;Match()指定被搜索的列Against()指定要使用的搜索表达式传递给Match()的值必须与FULLTEXT()定义中的相同。如果指定多个列则必须列出它们而且次序正确 除非使用BINARY方式否则全文本搜索不区分大小写。
Boolean
表示字符串前后的字符有特殊含义。表示存在-符号表示不存在。如查找含有marry不含有cares的记录
SELECT title FROM full_text_test WHERE MATCH(title) AGAINST(marry in BOOLEAN MODE);-- 返回2条记录
SELECT title FROM full_text_test WHERE MATCH(title) AGAINST(marry -cares in BOOLEAN MODE);-- 返回1条记录符号解释
必须出现-必须不出现用来排除其他操作符的结果如果只指定这个将什么都不返回无符号默认情况代表或自动分词搜索。和没有指定IN BOOLEAN MODE的结果一样distance用来测试两个或两个以上的单词是否都在一个指定的距离内在距离前指定双引号中的搜索词例如MATCH(col1) AGAINST(‘“word1 word2 word3” 8’ IN BOOLEAN MODE提高该条匹配数据的权重值降低该条匹配数据的权重值()相当于表达式分组和数学中的表达式一个道理~将其相关性由正转负表示拥有该字会降低相关性如apple ~macintosh先匹配apple但如果同时包含macintosh排名会靠后*通配符只能在字符串后面使用完全匹配被双引号包起来的单词必须整个被匹配
示例 apple banana 包含apple或banana其中一个 apple juice 必须同时包含apple和juice apple macintosh 包含apple但是如果同时包含macintosh会给更高的排序 apple -macintosh 包信apple但是不包含macintosh apple ~macintosh 包含apple如果同时包含macintosh降低权重 apple* 包含apple单词的行applesauce等都会被匹配到 some words 完全匹配some words的行 apple (turnover strudel)
包含apple和turnover或包含apple和strudel包含apple和turnover权重高于包含apple和strudel的记录
查询扩展
添加WITH QUERY EXPANSION或IN NATURAL LANGUAGE MODE WITH QUERY EXPANSION启用它会执行两次检索第一次使用给定短语检索第二次是结合第一次相关性比较高的行进行检索。
如下查询语句
SELECT * FROM full_text_test WHERE MATCH (title) AGAINST (fruit WITH QUERY EXPANSION);执行时会先执行一次基本查询即自然语言查询
SELECT * FROM full_text_test WHERE MATCH (title) AGAINST (fruit IN NATURAL LANGUAGE MODE);然后第二次查询会将第一次查询的结果作为输入短语最后根据相关性降序获取查询结果。
也就是说某条字符串如果不含有fruit关键词短语如果含有apple关键词则也可能出现在查询扩展的结果集里。
参考
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/bicheng/88376.shtml
如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!