4

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

我已经看过许多解决方案,如 Lucene、Solr、Sphinx、Zend Lucene,包括 Mysql 全文搜索支持。并且还知道 Solr 是此类事情的最佳解决方案。但正如我所说,我的网站托管在没有管理员权限的共享虚拟主机上,所以我不能使用 Solr。我也不能在 mysql 中使用 inbuild 全文支持,因为目前我网站的数据库正在使用 InnoDB 引擎。

4

1 回答 1

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",1),等等

如果您想搜索某些内容,请询问此索引。搜索查询“test”将提取所有带有 word="test" 的条目,即 (1,"test",1)。然后它知道它需要 docID 1,你就完成了。

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

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

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

于 2011-11-26T13:22:03.560 回答