2011-11-26 108 views
4

我正在嘗試在我的網站(託管在共享網絡託管... hostgator.com上)中添加搜索支持,因爲我正在尋找一個開源解決方案全文和分面搜索,不需要任何服務器端支持(除了PHP和MySQL)。Php + Mysql:沒有服務器端支持的全文搜索和分面搜索

我已經看過一些像Lucene,Solr,Sphinx,Zend Lucene等解決方案,包括Mysql全文搜索支持。並且也知道Solr是解決這些問題的最佳解決方案。但正如我所說我的網站託管在一個沒有管理員權限的共享網頁上,所以我不能和Solr一起去。此外,我不能在mysql中使用inbuild全文支持,因爲目前我的網站的數據庫使用InnoDB引擎。

回答

3

考慮在MyISAM表中手動構建倒排索引。但棘手的部分是要保持索引是最新的,這要麼在更新/插入行時需要很多代碼,要麼需要每x天(或幾小時)完成一次完整的重新索引。

如果您不知道倒排索引是什麼:這是一個索引,可以將單詞映射到文檔ID。例如,如果您想用(1,「Test product」,「This product is awesome」)將表(id,name,description)編入索引,可以將這些單詞分隔爲「Test」,「product」,「This 「,「太棒了」。然後,您可以將所有這些單詞放入數據庫表(id,word,docID)=>(1,「test」,1),(2,「product」,1),(3,this this,1),等

如果你然後想要搜索的東西,問這個指數。搜索查詢「test」會將所有條目與word =「test」相提並論,這將是(1,「test」,1)。然後它知道它需要docID 1,並且你完成了。

這絕對比使用標準溶液困難,但它應該爲您的情況:)

當然,這僅適用於用空格分開的語言。如果你想要中文,你會遇到問題。

[編輯]啊,是的,維基百科條目可能有所幫助:http://en.wikipedia.org/wiki/Inverted_index