Php + Mysql:全文和切面搜索没有服务器端支持


Php + Mysql: Full Text and Faceted Search with no server side support

我正试图在我的网站添加搜索支持(托管在一个共享的web托管…hostgator.com)为此,我正在寻找一个开源的解决方案全文和切面搜索,不需要任何服务器端支持(除了php和mysql)。

我已经看过一些解决方案,如Lucene, Solr, Sphinx, Zend Lucene,包括Mysql全文搜索支持。并且要知道Solr是这些事情的最佳解决方案。但正如我所说,我的网站托管在一个共享的网络主机上,没有管理权限,所以我不能用Solr。此外,我不能去内置全文支持mysql,因为目前我的网站的数据库是使用InnoDB引擎。

考虑在MyISAM表中手动构造一个倒排索引。棘手的部分将是保持索引最新,但这将需要大量的代码更新/插入行,或要求你做一个完整的重新索引每x天(或小时)。

如果你不知道倒排索引是什么:倒排索引是一个将单词映射到文档ID的索引。例如,如果您想用(1,"Test product","This product is awesome")为表(id,name,description)建立索引,您可以将这些单词分成"Test","product","This","is","awesome"。然后,您可以将所有这些单词放入数据库表(id,word,docID) =>(1,"test",1),(2,"product",1),(3,"this",1),等等。

如果你想搜索一些东西,问这个索引。搜索查询"test"将提取所有word="test"的条目,即(1,"test",1)。然后它知道它需要docID 1,这样就完成了。

这肯定比使用标准解决方案更难,但它应该适用于您的情况:)

当然,它只适用于空格分隔的语言。如果你想学中文,你会有问题的。

[edit]啊,是的,维基百科的条目可能会有所帮助:http://en.wikipedia.org/wiki/Inverted_index