注意 並非所有的引擎都支援 全文檢索
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 列上建立。對於大的資料庫,將資料裝載到乙個沒有...