日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 综合教程 >内容正文

综合教程

MySQL 全文检索(Full-Text Search)

發(fā)布時間:2024/4/24 综合教程 47 生活家
生活随笔 收集整理的這篇文章主要介紹了 MySQL 全文检索(Full-Text Search) 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

全文檢索FTS不同于模糊查詢like,它可以匹配局部的查詢條件,即把原查詢條件做下分詞再去查詢。

比如查詢條件是:food fruit,全文檢索可以做到返回 包含 food fruitfood, fruit, fruit food的結果集。

不僅如此,MySQL通過Boolean FTS還可以做到查詢結果包含 food 但不包含 fruit

MySQL全文檢索概述

目前MySQL支持FULLTEXTindex的存儲引擎是 InnoDBMyISAM
FULLTEXT index的column列類型只支持:CHAR, VARCHAR, or TEXT;
FULLTEXT index 只有在查詢語句使用 MATCH() AGAINST()時候才會生效;

創(chuàng)建 Full-Text Search

MySQL FTS需要創(chuàng)建 FULLTEXT 類型的 index,index要包含所有想要全文檢索的列。

創(chuàng)建FTS語法:

CREATE TABLE table_name(
    column_list,
    ...,
    FULLTEXT (column1,column2,..)
);

ALTER TABLE table_name  
ADD FULLTEXT(column_name1, column_name2,…)

CREATE FULLTEXT INDEX index_name
ON table_name(idx_column_name,...)

刪除FTS語法:

ALTER TABLE table_name
DROP INDEX index_name;

創(chuàng)建full-text index 示例:

create fulltext index full_idx_name_author_publisher
on book(name, author, publisher);

MySQL默認的 full-text parser 根據(jù)單詞間的空格或空白符來分割單詞的;但這對于表意語言如中文、韓語和日本語就沒作用了。

為了解決這個問題,MySQL提供了ngram full-text parser,從5.76開始,MySQL把ngram full-text parser作為server內置插件。

create fulltext index full_idx_name_author_publisher
on book(name, author, publisher) WITH PARSER NGRAM;

注意: 實際使用 ngram parser 的時候,需要關注 stopwords,最好自定義相關語言的 stop word 列表。

MySQL FTS檢索

MySQL全文檢索類型:

natural language search type
boolean search type
query expansion search type

Natural-Language檢索

select * from book
where
	match(name, author, publisher) -- 想要匹配的column列表,需要和創(chuàng)建index時候的column列表一致:列名和個數(shù)要一樣(順序可以不一樣),不然sql會報錯。
    against('北京日報') -- 關鍵字

select * from book
where
	match(publisher,name, author)
    against('北京日報'  IN NATURAL LANGUAGE MODE);

如果查詢的是中文,創(chuàng)建index的時候要指定用 ngram parser
match的column列表需要和創(chuàng)建index時候的column列表一致:列名和個數(shù)要一樣(順序可以不一樣),不然sql會報錯;
IN NATURAL LANGUAGE MODE是可選項,因為它是默認檢索類型。

Boolean FTS

select * from book
where
	match(publisher,name, author)
    against('北京日報 -青鳥'  IN BOOLEAN MODE);

Boolean操作符:

+: Include, the word must be present.
: Exclude, the word must not be present.
>: Include, and increase ranking value.
<: Include, and decrease the ranking value.
(): Group words into subexpressions (allowing them to be included, excluded, ranked, and so forth as a group).
~: Negate a word’s ranking value.
*: Wildcard at the end of the word.
“”: Defines a phrase (as opposed to a list of individual words, the entire phrase is matched for inclusion or exclusion).

Query Expansion

select * from book
where
	match(publisher,name, author)
    against('老舍' WITH QUERY EXPANSION);

先查出匹配關鍵字的結果集
從結果集里獲取相關詞匯
用相關詞匯做為條件再次查詢

注意:可能會查出很多不相關的結果。

參考資料

MySQL 5.7 中文全文檢索使用教程
Full-Text Searches in MySQL: The Good, the Bad and the Ugly
MySQL Boolean Full-Text Searches
12.10 Full-Text Search Functions
How to Use Full-Text Searches in My

作者:編碼者頻道

微信公眾號:編碼者頻道

掃描二維碼(或者長按識別二維碼)關注公眾號獲取最新信息。

本文版權歸作者和博客園共有,歡迎轉載,

轉載請保留原文鏈接,謝謝!

總結

以上是生活随笔為你收集整理的MySQL 全文检索(Full-Text Search)的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內容還不錯,歡迎將生活随笔推薦給好友。