雖然 Google 及其系列產品幾乎無所不能,但是 Web 形式的強大搜索引擎並不能很好地適用於每個站點。如果站點內容已被高度專業化或已明確分類,那就需要使用 Sphinx 和 PHP 來創建一個優化的本地搜索系統。
在 Internet 時代,人們希望信息能夠像快餐一樣被打包起來:能夠快速無障礙使用,並且分為很小的單位(或者是以字節 大小為單位?)。實際上,為了滿足急躁而又渴求信息的用戶的需求,甚至最普通的 Web 站點現在都要求具有快速浏覽樣式的各種菜單:
·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 行及五個索引列