當前位置:才華齋>設計>網頁設計>

PHP構建自定義搜尋引擎的方法總結

網頁設計 閱讀(4.53K)

在 Internet 時代,人們希望資訊能夠像快餐一樣被打包起來:能夠快速無障礙使用,並且分為很小的單位(或者是以位元組 大小為單位?)。實際上,為了滿足急躁而又渴求資訊的使用者的需求,甚至最普通的 Web 站點現在都要求具有快速瀏覽樣式的各種選單:

PHP構建自定義搜尋引擎的方法總結

·RSS 是比薩快遞員,會把新鮮出爐的比薩送上門。

·網路日誌是當地的中餐館,為您獻上喜愛的風味菜餚。

·論壇是家常便飯(或者可能更恰當地說,“動物屋” 中搶奪食物的場景)。

·而搜尋就像在當地的餐廳吃自助晚餐一樣:不斷將想吃的食物填滿盤子就行,只要您的食道 —— 還有您的椅子 —— 撐得住。

幸運的是,PHP 開發人員可以找到各種 RSS、blog 和論壇軟體來建立或者改進站點。而且,雖然 Google 和其他搜尋站點幾乎無所不能並且執行過濾通訊,但是搜尋引擎並不一定會良好地適應各個站點。

例如,如果 Web 站點提供成百上千的全新和翻新的保時捷汽車零件,Google 可能通過諸如 “Carrera parts” 之類的廣義搜尋找到您的站點,但是對於更具體的 “used 1991 Porsche 911 Targa headlight bezel” 查詢,它可能不會得到精確結果。

如果站點內容高度專業化,或者訪問者期望搜尋功能與現實工作流類似,那麼最好在 Web 的全域性搜尋引擎基礎上增加一個為您的站點量身定做的本地搜尋系統(有關專業化搜尋的'更多例項,請參閱 “A needle in a billion haystacks”)。

通過本文了解如何向 PHP 站點中新增一個快速、高效、開源和免費的搜尋引擎。本文沒有開發可見的 Web 站點。相反,重點討論交付有效搜尋結果所需的元件:資料庫、索引、搜尋引擎和 PHP 應用程式程式設計介面 (API)。

訪問優秀的 sphinx

要為站點提供自定義搜尋功能,您必須有資料來源和搜尋該資料來源的功能。對於 Web 應用程式,資料來源通常是一個關係資料庫,其中內建了一些搜尋功能(Equality 是一個簡單的搜尋運算子,與 SQL 運算子 LIKE 一樣)。但是,一些搜尋可能比資料庫可以執行的搜尋更加具體,或者搜尋可能過於複雜,而導致固有的 SQL JOIN 反應遲鈍。

海底撈針

許多站點提供特定於某一個行業、職業或者娛樂的內容,例如醫藥、法律、音樂和汽車維修。深入研究這些內容可能要求使用特殊工具或者培訓,或者僅需要使用一個索引來生成相關的實用結果。

下面是一些需要定製搜尋系統的常見搜尋場景:

·查詢 Joe Hockey 所撰寫的關於斯坦利杯 (Stanley Cup) 的所有文章。

·查詢 HP LaserJet 3015 All-in-One 印表機的最新驅動程式。

·查詢 Dinosaur Jr. 參與大衛深夜脫口秀節目的電視片段。

要加速搜尋,您可以重新安排表,並由此簡化底層查詢(表和 SQL 查詢優化高度依賴於模式和引擎。可通過線上搜尋查詢有關資料庫效能的各種文章和書籍)。此外,您可以新增一個專門化的搜尋引擎。應用哪種形式的搜尋引擎還依賴於資料的形式(和數量)和預算。有許多選擇可用:您可以將一個 Google 工具連線到您的網路中,購買 Endeca 或其他大型商業搜尋產品,或者嘗試 Lucene。但是在很多情況下,使用商業產品都有點小題大做,或者浪費運營預算,並且 Lucene 在 2007 年 7 月編寫時並未提供 PHP API。

作為一個備選方案,考慮一下 Sphinx,它是一種開源和免費的搜尋引擎,可以非常快速地搜尋文字。例如,在一個幾乎有 300,000 行及五個索引列。