溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊(cè)×
其他方式登錄
點(diǎn)擊 登錄注冊(cè) 即表示同意《億速云用戶服務(wù)條款》

php中搜索功能的原理是什么

發(fā)布時(shí)間:2020-07-02 09:28:09 來源:億速云 閱讀:185 作者:Leah 欄目:編程語(yǔ)言

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ì)億速云的支持。

向AI問一下細(xì)節(jié)

免責(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)容。

AI