php中搜索功能的原理是什么?很多新手對(duì)此不是很清楚,為了幫助大家解決這個(gè)難題,下面小編將為大家詳細(xì)講解,有這方面需求的人可以來學(xué)習(xí)下,希望你能有所收獲。
PHP 搜索功能的思路 (分詞+匹配)
1. 最簡(jiǎn)單的搜索 (利用like語(yǔ)句匹配)
此搜索只能用于單個(gè)單詞的搜索
例如:用戶昵稱的搜索,群名稱的搜索等
2. 真正的搜索 (分詞+匹配)
這種方式可用于數(shù)據(jù)段的搜索,像對(duì)文章內(nèi)容標(biāo)題進(jìn)行檢索等
原理:
利用 Mysql中的全文搜索match against
實(shí)現(xiàn)步驟
1.使用Mysql全文檢索fulltext的先決條件:
表的類型必須是MyISAM (MySQL5.6 后Innodb也可以)
建立全文檢索的字段類型必須是char,varchar,text
2.建立全文檢索先期配置(配置mysql)
由于Mysql的默認(rèn)配置是索引的詞的長(zhǎng)度是4,所以要支持中文單字的話,首先更改這個(gè).
*Unix用戶要修改my.cnf,一般此文件在/etc/my.cnf,如果沒有找到,先查找一下find / -name ‘my.cnf’
在 [mysqld] 位置內(nèi)加入:
ft_min_word_len = 2
其它屬性還有
ft_wordlist_charset = gbk
ft_wordlist_file = /home/soft/mysql/share/mysql/wordlist-gbk.txt
ft_stopword_file = /home/soft/mysql/share/mysql/stopwords-gbk.txt
稍微解釋一下:
ft_wordlist_charset 表示詞典的字符集, 目前支持良好的有(UTF-8, gbk, gb2312, big5)
ft_wordlist_file 是詞表文件, 每行包括一個(gè)詞及其詞頻(用若干制表符或空格分開,消岐專用)
ft_stopword_file 表示過濾掉不索引的詞表, 一行一個(gè).
ft_min_word_len 加入索引的詞的最小長(zhǎng)度, 缺省是 4, 為了支持中文單字故改為 2
3.建立全文檢索(表中添加索引)
在建表中用FullText關(guān)鍵字標(biāo)識(shí)字段,已存在的表用 ALTER TABLE (或 CREATE INDEX) 創(chuàng)建索引
CREATE fulltext INDEX index_name ON table_name(colum_name);
4.使用全文檢索(SQL語(yǔ)句)
在SELECT的WHERE字句中用MATCH函數(shù)
整體語(yǔ)法:MATCH(col1,col2,…) AGAINST (expr[search_modifier])。
其中MATCH中的內(nèi)容為已建立FULLTEXT索引并要從中查找數(shù)據(jù)的列
AGAINST中的expr為要查找的文本內(nèi)容,
search_modifier為可選搜索類型。
search_modifier的可能取值有:
IN NATURAL LANGUAGEMODE、IN NATURAL LANGUAGE MODE WITH QUERY EXPANSION、IN BOOLEAN MODE、WITH QUERY EXPANSION。
search_modifier的每個(gè)取值代表一種類型的全文搜索,分別為自然語(yǔ)言全文搜索、帶查詢擴(kuò)展的自然語(yǔ)言全文搜索、布爾全文搜索、查詢擴(kuò)展全文搜索(默認(rèn)使用IN NATURAL LANGUAGE MODE)。
SELECT * FROM articles WHERE MATCH (tags) AGAINST ('旅游' IN BOOLEAN MODE);
看完上述內(nèi)容是否對(duì)您有幫助呢?如果還想對(duì)相關(guān)知識(shí)有進(jìn)一步的了解或閱讀更多相關(guān)文章,請(qǐng)關(guān)注億速云行業(yè)資訊頻道,感謝您對(duì)億速云的支持。
免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如果涉及侵權(quán)請(qǐng)聯(lián)系站長(zhǎng)郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。