Php Mysql:没有服务器端支持的全文和分面搜索
作者:互联网
我正在尝试在我的网站中添加搜索支持(托管在共享的网络托管… hostgator.com上),因为我正在寻找全文和分面搜索的开源解决方案,不需要任何服务器端支持(除了php和mysql).
我已经看过很多像Lucene,Solr,Sphinx,Zend Lucene这样的解决方案,包括Mysql全文搜索支持.并且也知道Solr是这类事情的最佳解决方案.但正如我所说,我的网站托管在没有管理员权限的共享网络托管上,所以我不能选择Solr.另外我不能在mysql中使用inbuild全文支持,因为目前我的网站的数据库正在使用InnoDB引擎.
解决方法:
考虑在MyISAM表中手动构建倒排索引.棘手的部分是保持索引最新,这将在更新/插入行时需要大量代码,或者要求您每x天(或几小时)执行一次完整的重新索引.
如果您不知道倒排索引是什么:它是将单词映射到文档ID的索引.例如,如果要使用(1,“测试产品”,“此产品很棒”)将表(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
标签:php,mysql,search,full-text-search,faceted-search 来源: https://codeday.me/bug/20190630/1336271.html