FULLTEXT 搜索

FULLTEXT 搜索

MySQL 的全文搜索功能,不使用模板匹配操作的情況下,進(jìn)行單詞或短語(yǔ)的查找。

全文搜索 3 種類型:

  1. 自然語(yǔ)言搜索:將搜索字符串解析成一系列的單詞,搜索出包含這些單詞的行。
  2. 布爾模式搜索:搜索字符串中的單詞包含修飾字符,用以表明某些特定的要求。
  3. 查詢擴(kuò)展搜索:第一階段:自然語(yǔ)言搜索;第二階段:將搜索字符串與第一階段搜索的那些行連接起來(lái),然后再進(jìn)行一次搜索。

想要對(duì)表進(jìn)行全文搜索,需要?jiǎng)?chuàng)建一個(gè)特殊類型的索引

  • 基于 FULLTEXT 索引
  • 忽略掉一些常見(jiàn)詞(常見(jiàn):50%的行里出現(xiàn)過(guò))
  • 內(nèi)建的常用單詞(如:the after otfer)
  • 少于 4 個(gè)字符的單詞也會(huì)被忽略
  • 全文搜索對(duì)單詞的定義:由字母、數(shù)字、撇號(hào)下劃線構(gòu)成的字符序列
  • 可以為單個(gè)列或多個(gè)列創(chuàng)建 FULLTEXT 索引
自然語(yǔ)言 FULLTEXT 搜索

建表之后,使用運(yùn)算符 match() 列出一個(gè)或多個(gè)用于搜索的列,并用 against() 指定搜索字符串

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

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

-- 把 phrase 所有包含單詞"time" OR "soft" 的行找出來(lái),默認(rèn)全文搜索模式
SELECT * FROM apothegm WHERE match(phrase) against('time soft');
布爾模式的全文搜索

該模式,可以獲得對(duì)多單詞搜索的更多控制,使用 against('xxx' IN BOOLEAN MODE),有以下特點(diǎn):

  • 不會(huì)忽略掉常見(jiàn)詞(50%)
  • 查詢結(jié)果不再排序
  • 搜索可以要求短語(yǔ)里的所有單詞按照特定順序出現(xiàn)
  • 也可以未創(chuàng)建 FULLTEXT 索引的列,進(jìn)行布爾模式的全文搜索,只是慢一些。
-- 搜索包含 "bell book and candle" 這四個(gè)單詞,且單詞順序一樣的行
SELECT * FROM apothegm
WHERE match(attribution,phrase)
against('"bell book and candle"' IN BOOLEAN MODE);
-- 搜索包含 bell 但不包含 candle 的行
-- against('+bell -candle' IN BOOLEAN MODE);
-- 搜索單詞以 soft 開(kāi)頭的行,如 soft* 與 soft、softly、softness 等相匹配
-- against('soft*' IN BOOLEAN MODE);
查詢擴(kuò)展全文搜索

使用 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 索引里的那些單詞所具有的最小長(zhǎng)度(默認(rèn) 4)最大長(zhǎng)度(默認(rèn) 84)。

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容