php搜尋功能原理

2020-07-16 10:06:45

php搜尋功能原理

PHP 搜尋功能的思路 (分詞+匹配)

1. 最簡單的搜尋 (利用like語句匹配)

此搜尋只能用於單個單詞的搜尋

例如:使用者暱稱的搜尋,群名稱的搜尋等

推薦:《PHP教學

2. 真正的搜尋 (分詞+匹配)

這種方式可用於資料段的搜尋,像對文章內容標題進行檢索等

原理:

利用 Mysql中的全文搜尋match against

實現步驟

1.使用Mysql全文檢索fulltext的先決條件:

表的型別必須是MyISAM (MySQL5.6 後Innodb也可以)

建立全文檢索的欄位型別必須是char,varchar,text

2.建立全文檢索先期設定(設定mysql)

由於Mysql的預設設定是索引的詞的長度是4,所以要支援中文單字的話,首先更改這個.

*Unix使用者要修改my.cnf,一般此檔案在/etc/my.cnf,如果沒有找到,先查詢一下find / -name ‘my.cnf’

在 [mysqld] 位置內加入:

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 是詞表檔案, 每行包括一個詞及其詞頻(用若干制表符或空格分開,消岐專用)

ft_stopword_file 表示過濾掉不索引的詞表, 一行一個.

ft_min_word_len 加入索引的詞的最小長度, 預設是 4, 為了支援中文單字故改為 2

3.建立全文檢索(表中新增索引)

在建表中用FullText關鍵字標識欄位,已存在的表用 ALTER TABLE (或 CREATE INDEX) 建立索引

CREATE fulltext INDEX index_name ON table_name(colum_name);

4.使用全文檢索(SQL語句)

在SELECT的WHERE字句中用MATCH函數

整體語法:MATCH(col1,col2,…) AGAINST (expr[search_modifier])。

其中MATCH中的內容為已建立FULLTEXT索引並要從中查詢資料的列

AGAINST中的expr為要查詢的文字內容,

search_modifier為可選搜尋型別。

search_modifier的可能取值有:

IN NATURAL LANGUAGEMODE、IN NATURAL LANGUAGE MODE WITH QUERY EXPANSION、IN BOOLEAN MODE、WITH QUERY EXPANSION。

search_modifier的每個取值代表一種型別的全文搜尋,分別為自然語言全文搜尋、帶查詢擴充套件的自然語言全文搜尋、布林全文搜尋、查詢擴充套件全文搜尋(預設使用IN NATURAL LANGUAGE MODE)。

SELECT * FROM articles WHERE MATCH (tags) AGAINST ('旅遊' IN BOOLEAN MODE);

以上就是php搜尋功能原理的詳細內容,更多請關注TW511.COM其它相關文章!