首頁  >  文章  >  後端開發  >  php怎麼實現站內搜索

php怎麼實現站內搜索

藏色散人
藏色散人原創
2020-09-30 09:21:334122瀏覽

php實作站內搜尋的方法:1.利用SQL的LIKE來實現站內搜尋;2、利用Google搜尋引擎API以及Google搜尋功能,建立站內搜尋;3、透過「PHP MYSQL SCWS」做站內搜尋引擎.

php怎麼實現站內搜索

推薦:《PHP影片教學

PHP MYSQL SCWS 做自己的站內搜尋引擎

天底下竟然有這麼一種站內搜尋引擎,它支援中文分詞,支援全文搜尋,無須任何擴充,不用對伺服器進行任何設定,只要支援PHP和MYSQL就行,他操作簡單,效率高,效果好.這就是PHP MYSQL SCWS 站內搜尋引擎.

事實上,無論大小,從新浪到愛卡汽車網,從日PV過億的網站到我自己的個人博客,都需要站內搜尋引擎.站內搜尋引擎對於網站的作用,是不言而喻的.最直接的作用是讓用戶以最直接的方式,最快的速度在你的網站裡找到他想要的東西.而不是再到百度谷歌去,搜尋到別人的網站.

(一) 最基本的站內搜素利用SQL的LIKE

#例如

SELECT * FROM bbs_threads WHERE subject LIKE '%搜索引擎%' LIMIT 10

優點:太容易了,是人都會

缺點: 1. 每次執行LIKE語句都需要一次表遍歷,用的是字符串比較,效率太低. 2. 不能分詞,只能整句話搜尋.如果搜尋詞較長,幾乎搜尋不出任何結果.如果加上分詞功能,相當於一條語句裡使用好幾個LIKE,同1.

(二) 谷歌自訂搜尋

利用Google搜尋引擎API以及Google強大的搜尋功能,建立自己的站內搜尋.演示: http://www.lusongsong.com/search.html?cx=014724041144905348996:pf5fnahnzuw&cof=FORID:11&ie=UTF-8&q=危機&sa =搜尋&siteurl=lusongsong.com/

優點: 省心,沒有比這個再省心的了.你啥都不用管.谷歌都是自家的了,人家的搜尋演算法,那怎麼是咱們能比得了的呢.

缺點: 1.需要使用IFRAME,或者直接打開谷歌的頁面,或者用更複雜的API來實現. 2.只能按照文本搜索,只能全站搜索.我要想在某個頻道下,搜尋指定類型的文章等要求谷歌就不能實現了.一句話,就是不能自定義. 3.如果你的網站小,谷歌人家都不帶收錄你,啥也搜不出來你咋辦?

(三) lucene 全世界最好的開放原始碼搜尋引擎

呃…沒啥好介紹的,直接看優缺點吧

#優點: 完全開放原始碼,完全可以自訂,完全…..

缺點: java寫的,哥不會.你會java?你改個試試

(四) PHP MYSQL SCWS 做自己的站內搜尋引擎

千呼萬喚始出來!

MySQL支援全文索引和搜尋。全文索引在 MySQL 中是一個 FULLTEXT 類型索引。 FULLTEXT 索引用於 MyISAM 表,可以在 CREATE TABLE 時或之後使用 ALTER TABLE 或 CREATE INDEX 在 CHAR、VARCHAR 或 TEXT 列上建立。

函數 MATCH() 對照一個文字集(包含在一個 FULLTEXT 索引中的一個或多個列的列集)執行一個自然語言搜尋一個字串。搜尋字串做為 AGAINST() 的參數被給定。搜尋以忽略字母大小寫的方式執行。對於表格中的每個記錄行,MATCH() 會傳回相關性值。即,在搜尋字串與記錄行在 MATCH() 清單中指定的列的文字之間的相似性尺度。

當 MATCH() 被使用在一個 WHERE 子句中時,傳回的記錄行會自動地以相關性從高到低的順序排序。相關性值是非負的浮點數。零相關性意味著不相似。

在英語環境下,使用PHP和MYSQL就完全能夠建立全文檢索環境.步驟為:

#1. 建立內容表,灌入資料,在需要全文檢索的欄位上建立FULLTEXT索引

2. 利用MATCH函數執行搜尋條件

3. 處理傳回的資料,顯示結果

簡單吧。 。 。

問題是,中文不是自分詞的語言,在MYSQL開來一大段中文就是一個單字,全文檢索就失效了.解決這個問題的辦法是,在灌入資料和搜尋前,利用其他的工具來進行分詞,將大段的中文分隔為一個一個的詞,類似與英文的單字.

最簡單的工具就是SCWS. 官方網站: http://www.ftphp.com /scws/

SCWS 是Simple Chinese Words Segmentation 的縮寫,即簡易中文分詞系統。

這是一套以詞頻字典為基礎的機械中文分詞引擎,它能將一整段的漢字基本上正確的切分成詞。詞是漢語的基本語素單位,而書寫的時候不像英語會在詞之間用空格分開,所以如何準確而又快速的分詞一直是中文分詞的攻關難點。

SCWS 在概念上并无创新成分,采用的是自行采集的词频词典,并辅以一定程度上的专有名称、人名、地名、数字年代等规则集,经小范围测试大概准确率在 90% ~ 95% 之间,已能基本满足一些中小型搜索引擎、关键字提取等场合运用。 SCWS 采用纯 C 代码开发,以 Unix-Like OS 为主要平台环境,提供共享函数库,方便植入各种现有软件系统。此外它支持 GBK,UTF-8,BIG5 等汉字编码,切词效率高。

SCWS提供了纯PHP代码编写的中文分词类,使它不需要做任何额外的扩展就能在机会所有的服务器上使用.

支持中文的基于PHP+MYSQL的全文检索的步骤为:

1. 建立内容表(,将数据分词),灌入数据,在需要全文检索的字段上建立FULLTEXT索引

2. (将要搜索的内容先分词再) 利用MATCH函数执行搜索条件

3. 处理返回的数据,显示结果

仍然是SO EASY!

一个演示的例子: http://www.bnet.com.cn/files/search.php?word=%CA%D5%B9%BA&page=3

执行搜索的语句是:

SELECT SQL_CALC_FOUND_ROWS *, MATCH (titlewords, keywords, author, contentwords) AGAINST ('$words') AS matchscore
FROM search
WHERE MATCH (titlewords, keywords, author, contentwords) AGAINST ('$words') > 0.5

以上是php怎麼實現站內搜索的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn