FULLTEXT 搜索

作者: TinyDolphin | 来源:发表于2018-01-19 16:08 被阅读0次

FULLTEXT 搜索

MySQL 的全文搜索功能,不使用模板匹配操作的情况下,进行单词或短语的查找。

全文搜索 3 种类型:

  1. 自然语言搜索:将搜索字符串解析成一系列的单词,搜索出包含这些单词的行。
  2. 布尔模式搜索:搜索字符串中的单词包含修饰字符,用以表明某些特定的要求。
  3. 查询扩展搜索:第一阶段:自然语言搜索;第二阶段:将搜索字符串与第一阶段搜索的那些行连接起来,然后再进行一次搜索。

想要对表进行全文搜索,需要创建一个特殊类型的索引

  • 基于 FULLTEXT 索引
  • 忽略掉一些常见词(常见:50%的行里出现过)
  • 内建的常用单词(如:the after otfer)
  • 少于 4 个字符的单词也会被忽略
  • 全文搜索对单词的定义:由字母数字撇号下划线构成的字符序列
  • 可以为单个列或多个列创建 FULLTEXT 索引
自然语言 FULLTEXT 搜索

建表之后,使用运算符 match() 列出一个或多个用于搜索的列,并用 against() 指定搜索字符串

CREATE TABLE apothegm(
  attribution VARCHAR(40) COMMENT '名人',
  phrase      TEXT        COMMENT '名言'
)ENGINE = MyISAM;

-- 如果按 "名人"、"名言"、"名人+名言" 来搜索
ALTER TABLE apothegm
ADD FULLTEXT (phrase),
ADD FULLTEXT (attribution),
ADD FULLTEXT (phrase,attribution);

-- 把 phrase 所有包含单词"time" OR "soft" 的行找出来,默认全文搜索模式
SELECT * FROM apothegm WHERE match(phrase) against('time soft');
布尔模式的全文搜索

该模式,可以获得对多单词搜索的更多控制,使用 against('xxx' IN BOOLEAN MODE),有以下特点:

  • 不会忽略掉常见词(50%)
  • 查询结果不再排序
  • 搜索可以要求短语里的所有单词按照特定顺序出现
  • 也可以未创建 FULLTEXT 索引的列,进行布尔模式的全文搜索,只是慢一些。
-- 搜索包含 "bell book and candle" 这四个单词,且单词顺序一样的行
SELECT * FROM apothegm
WHERE match(attribution,phrase)
against('"bell book and candle"' IN BOOLEAN MODE);
-- 搜索包含 bell 但不包含 candle 的行
-- against('+bell -candle' IN BOOLEAN MODE);
-- 搜索单词以 soft 开头的行,如 soft* 与 soft、softly、softness 等相匹配
-- against('soft*' IN BOOLEAN MODE);
查询扩展全文搜索

使用 against('xxx' WITH QUERY EXPANSION);

SELECT * FROM apothegm
WHERE MATCH(attribution,phrase)
against('bell book' WITH QUERY EXPANSION);
配置全文搜索引擎

ft_min_word_lenft_max_word_len 用于确定 FULLTEXT 索引里的那些单词所具有的最小长度(默认 4)最大长度(默认 84)

相关文章

  • FULLTEXT 搜索

    FULLTEXT 搜索 MySQL 的全文搜索功能,不使用模板匹配操作的情况下,进行单词或短语的查找。 全文搜索 ...

  • 02全文本搜索

    1、启用全文本搜索 FULLTEXT对指定列进行索引 不要在导入数据时使用FULLTEXT。可以先导入数据,在修改...

  • 全文本搜索

    全文本搜索 使用全文本(fulltext)搜索,MySQL不需要分别查看每个行,不需要分析和处理每个词。MySQL...

  • Elasticsearch 分词器

    在全文搜索(Fulltext Search)中,词(Term)是一个搜索单元,表示文本中的一个词,标记(Token...

  • Flarum beta9 中文搜索优化

    Flarum beta9 中文搜索优化 MySQL 自 5.7 开始支持 FULLTEXT 中文搜寻,重建索引即可...

  • 安装配置

    ES是一个基于Lucene的分布式全文搜索服务器,和SQL Server的全文索引(Fulltext Index)...

  • 用MySQL实现中文全文搜索|站内搜索

    首先我们首先要了解几个概念 MySQL自带英文的全文搜索功能,需要知道fulltext索引和myisam引擎。 英...

  • MySQL 索引类型

    MySQL目前主要有以下几种索引类型:FULLTEXT,HASH,BTREE,RTREE。 一、FULLTEXT ...

  • SQL索引及应用场景

    SQL索引:FULLTEXT,HASH,BTREE,RTREE。 fullText: 数据量较大时,先导入数据,然...

  • 使用 ngram 解析器创建FULLTEXT索引

    创建表是直接创建fulltext索引 在原表上新增fulltext索引 如果原表已存在,则得先删除再新增,不能直接...

网友评论

    本文标题:FULLTEXT 搜索

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