加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 站长学院 > PHP教程 > 正文

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

发布时间:2020-12-13 16:22:48 所属栏目:PHP教程 来源:网络整理
导读:我正在尝试在我的网站中添加搜索支持(托管在共享的网络托管… hostgator.com上),因为我正在寻找全文和分面搜索的开源解决方案,不需要任何服务器端支持(除了php和 mysql). 我已经看过很多像Lucene,Solr,Sphinx,Zend Lucene这样的解决方案,包括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,(3,“this”,1)等.

如果您想要搜索某些内容,请询问此索引.搜索查询“test”将使用word =“test”拉出所有条目,这将是(1,1).然后它知道它需要docID 1,你就完成了.

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

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

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

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读