Mysql 全文字檢索

2021-06-28 08:31:24 字數 3201 閱讀 1128

注意 並非所有的引擎都支援 全文檢索

mysql最常用的引擎 innodb 和 myisam 後者支援全文檢索 前者不支援

建立表的時候指定要檢索列

create

table test_fulltext(note_id int

notnull auto_increment,note_text text null,

primaty key(note_id),fulltext(note_text)

)engine=myisam;

fulltext 索引某個列 fulltext(note_text) ,在某note_text列上建立全文索引

插入資料

然後用 match()指定列 against()指定詞

如 語句

select *

from test_fulltext

where

match(note_text) against('hello');

查詢note_txt列中含有 hello詞的行 返回的結果為 兩行

note_text

'hello' was said by quester

quster say 'hello' to pp and he try again

既然這樣 為什麼 不用  like語句呢  再來看上面例子  用like實現
select *

from test_fulltext

where note_text like

'%hello%';

返回的結果一樣為兩行

note_text

quster say 'hello' to pp and he try again

'hello' was said by quester

看採用全文搜尋和like的返回結果   使用全文搜尋的返回結果是已經排好序的   而 like的返回結果則沒有

排序主要是針對 hello出現在行的位置

全文結果中 第乙個詞 和 第三個詞 like則沒有按順序排

我們可以採用下面方式檢視 表中某一列 在某乙個詞的等級 ,繼續用上面的例子

select note_text, match(note_text) aginst('hello') as rannk

from test_fulltext

輸出如下:

note_text                                             rank

fhgjkhj 0

fdsf shi jian 0

quster say 'hello' to pp and he try again 1.3454876123454

huijia quba 0

'hello' was said by quester 1.5656454547876

當你想要在note_text 中查詢 pp時 從上面知道 只有一行 如果用下面語句

select note_text 

from test_fulltext

where

match(note_text) against('pp');

返回結果是

note_text

quster say 'hello' to pp and he try again

如果採用擴充套件查詢,分為以下三部

select note_text 

from test_fulltext

where

match(note_text) against('pp'

with query expansion);

返回結果

note_text

quster say 'hello' to pp and he try again

'hello' was said by quester

如pp本來有的行中含有 hello 所以hello也作為關鍵字

即使沒有建立fulltext索引也能夠用,但是速度非常慢 沒有50%規則  (參見下 50%規則介紹)

可以用包含特定意義的操作符,如 +、-、"",作用於查詢字串上。查詢結果不是以相關性排序的。

如語句

select note_text 

from test_fulltext

where

match(note_text) against('hello -pp*'

in boolean mode );

表示匹配hello但是不包含 pp的行 結果為

note_text

'hello' was said by quester

全文檢索的一些說明 和限制

50% 規則

如果乙個詞出現在50%以上的行中,那麼mysql將他作為乙個非用詞忽略   50%規則不適用於布林查詢

如果行數小於三行 則不返回結果 參考 50%規則

mysql 全文字檢索的列 Mysql 全文字檢索

mysql 全文索引 注意 並非所有的引擎都支援 全文檢索 mysql最常用的引擎 innodb 和 myisam 後者支援全文檢索 前者不支援 建立表的時候指定要檢索列 create table test fulltext note id int not null auto increment,n...

文字檢索演算法

純c語言實現。這個函式的功能是檢索檔案中的單詞,並定位到那一行,並輸出出現數目。演算法感覺難度不是特別大,但我這個演算法效率並不高,準備以後寫個效率更高的。函式的第二個引數可以刪除,在這裡並沒有什麼用。void word count file file,int line no,char word 統...

mysql全文檢索

全文索引在 mysql 中是乙個 fulltext 型別索引。fulltext 索引用於 myisam 表,可以在 create table 時或之後使用 alter table 或 create index 在 char varchar 或 text 列上建立。對於大的資料庫,將資料裝載到乙個沒有...