美文网首页
Mysql全文检索

Mysql全文检索

作者: jyhnp | 来源:发表于2020-11-13 15:41 被阅读0次

一、概述
MySQL全文检索是利用查询关键字和查询列内容之间的相关度进行检索,可以利用全文检索来提高匹配的速度。

二、语法
SELECT * FROM tab_name WHERE MATCH ('列名1,列名2...列名n') AGAINST('词1 词2 词3 ... 词m');

MATCH相当于要匹配的列,而AGAINST就是要找的内容。
注意:全文索引的字段类型必须是char、varchar或text类型,必须要建立col1,col2的全文索引(FULLTEXT)

三、检索方式
1、自然语言检索: IN NATURAL LANGUAGE MODE
2、布尔检索: IN BOOLEAN MODE
剔除一半匹配行以上都有的词,譬如说,每个行都有this这个字的话,那用this去查时,会找不到任何结果,这在记录条数特别多时很有用,
原因是数据库认为把所有行都找出来是没有意义的,这时,this几乎被当作是stopword(中断词);但是若只有两行记录时,是啥鬼也查不出来的,
因为每个字都出现50%(或以上),要避免这种状况,请用IN BOOLEAN MODE。

   ● IN BOOLEAN MODE的特色: 
      ·不剔除50%以上符合的row。 
      ·不自动以相关性反向排序。 
      ·可以对没有FULLTEXT index的字段进行搜寻,但会非常慢。 
      ·限制最长与最短的字符串。 
      ·套用Stopwords。

● 搜索语法规则:
+ 一定要有(不含有该关键词的数据条均被忽略)。
- 不可以有(排除指定关键词,含有该关键词的均被忽略)。
> 提高该条匹配数据的权重值。
< 降低该条匹配数据的权重值。
~ 将其相关性由正转负,表示拥有该字会降低相关性(但不像 - 将之排除),只是排在较后面权重值降低。
* 万用字,不像其他语法放在前面,这个要接在字符串后面。
" " 用双引号将一段句子包起来表示要完全相符,不可拆字。

     SELECT * FROM articles WHERE MATCH (title,content) AGAINST ('+apple -banana' IN BOOLEAN MODE);
     + 表示AND,即必须包含。- 表示NOT,即必须不包含。即:返回记录必需包含 apple,且不能包含 banner。

     SELECT * FROM articles WHERE MATCH (title,content) AGAINST ('apple banana' IN BOOLEAN MODE);
     apple和banana之间是空格,空格表示OR。即:返回记录至少包含apple、banana中的一个。

     SELECT * FROM articles WHERE MATCH (title,content) AGAINST ('+apple banana' IN BOOLEAN MODE);
     返回记录必须包含apple,同时banana可包含也可不包含,若包含的话会获得更高的权重。

     SELECT * FROM articles WHERE MATCH (title,content) AGAINST ('+apple ~banana' IN BOOLEAN MODE);
     ~ 是我们熟悉的异或运算符。返回记录必须包含apple,若也包含了banana会降低权重。
     但是它没有 +apple -banana 严格,因为后者如果包含banana压根就不返回。

     SELECT * FROM articles WHERE MATCH (title,content) AGAINST ('+apple +(>banana <orange)' IN BOOLEAN MODE);
     返回必须同时包含“apple banana”或者必须同时包含“apple orange”的记录。
     若同时包含“apple banana”和“apple orange”的记录,则“apple banana”的权重高于“apple orange”的权重。

相关文章

  • MySQL中文全文检索

    MySQL中文全文检索

  • MySQL 全文检索

    一、概述 二、语法 例如: 三、检索方式 上面的search_modifier是全文索引的检索方式,MySQL中有...

  • Mysql全文检索

    一、概述MySQL全文检索是利用查询关键字和查询列内容之间的相关度进行检索,可以利用全文检索来提高匹配的速度。 二...

  • 中文分词

    mysql全文索引 mysql4.0以上支持全文检索,但是存储引擎类型必须为MYISAM mysql5.6以上支持...

  • Spring Boot集成Solr全文搜索

    原创文章,转载请注明出处原文博客地址 最近有个项目想针对现有的Mysql数据库做全文检索.Mysql本身的全文检索...

  • MySQL搜索(全文检索)

    MySQL在5.7版本中终于提供了原生的中文全文检索的能力,通过内置了ngram全文检索插件,用来支持中文分词,并...

  • mysql的全文检索

    一、概述 MySQL全文检索是利用查询关键字和查询列内容之间的相关度进行检索,可以利用全文索引来提高匹配的速度。 ...

  • Sphinx(斯芬克司)

    简要描述: 基于sql的全文检索引擎,可以结合DB:MySQL、PostgreSQL,同时为MySQL设计了存储引...

  • sphinx(一)全文检索引擎sphinx

    一:sphinx简介 Sphinx是一个基于SQL的全文检索引擎,可以结合MySQL,PostgreSQL做全文搜...

  • 全文检索-sphinx

    为什么要用Sphinx原因1:MySQL不支持中文全文检索、模糊查询(like)慢原因2:sphinx支持中文全文...

网友评论

      本文标题:Mysql全文检索

      本文链接:https://www.haomeiwen.com/subject/efgvbktx.html