全文模糊搜尋

2021-09-12 01:48:42 字數 1699 閱讀 7975

1.對原文進行分詞,再通過相應的搜尋演算法進行查詢

主要是中文分詞,這裡推薦

2.資料庫方式,通過全文索引進行搜尋

建立全文索引的表的儲存引擎型別必須為myisam

問題是match against對中文模糊搜尋支援不是太好

新建乙個utf8 myisam型別的表並建立乙個全文索引 :

create table articles (

id int unsigned auto_increment not null primary key,

title varchar(200),

body text,

fulltext (title,body)

) engine=myisam default charset=utf8;

其中fulltext(title, body) 給title和body這兩列建立全文索引,之後檢索的時候注意必須同時指定這兩列。

給這個表新增點測試資料

insert into articles (title,body) values

('mysql tutorial','dbms stands for database ...'),

('how to use mysql well','after you went through a ...'),

('optimizing mysql','in this tutorial we will show ...'),

('1001 mysql tricks','1. never run mysqld as root. 2. ...'),

('mysql vs. yoursql','in the following database comparison ...'),

('mysql security','when configured properly, mysql ...');

全文檢索測試

select * from articles   where match (title,body) against ('database');
注意 match (title,body) 裡面的值必須是前面建立全文索引的兩個字段不能少。

mysql 預設支援全文檢索的字元長度是4,可以用show variables like 『ft_min_word_len』 來檢視指定的字元長度,也可以在mysql配置檔案my.ini 更改最小字元長度,方法是在my.ini 增加一行 比如:ft_min_word_len = 2,改完後重啟mysql即可。

另外,mysql還會計算乙個詞的權值,以決定是否出現在結果集中,具體如下:

mysql在集和查詢中的對每個合適的詞都會先計算它們的權重,乙個出現在多個文件中的詞將有較低的權重(可能甚至有乙個零權重),因為在這個特定的集中,它有較低的語義值。否則,如果詞是較少的,它將得到乙個較高的權重,mysql預設的閥值是50%,上面『you』在每個文件都出現,因此是100%,只有低於50%的才會出現在結果集中。

全文檢索語法

『+』 表示and,即必須包含。』-』 表示not,即不包含。

全文:

使用全文搜尋

contains搜尋方式 1.簡單詞搜尋 搜尋乙個或多個特定的詞或短語。詞可以包括乙個或多個字元,中間沒有空格或標點。短語可以由空格分隔的多個詞組成,但詞之間可以有標點也可以沒標點 搜尋文章內容含有張三或者李四的記錄 select from article where contains articl...

Mongodb 全文搜尋

全文索引的建立比較慢,實操中需要等伺服器閒時或者離線進行 否則會阻塞讀寫,當然也可以放在後台執行 新增全文索引 db tesla ensureindex 給 song lyrics 字段新增全文索引。權重分配,lycris 的權重為2,song 的權重為1.權重越大優先順序越高,權重的區間為1 10...

Springboot Lucene全文搜尋引擎

引入核心依賴 lucene核心及其依賴 org.apache.lucene lucene core 7.6.0 org.apache.lucene lucene queryparser 7.6.0 org.apache.lucene lucene analyzers common 7.6.0 中文分...