好的,我的mySQL数据库看起来像这样
ID - 一个int和记录的唯一ID
标题 - 项目的名称
说明 - 商品说明
我想搜索关键词的标题和描述,目前我正在使用。
SELECT *来自'item',其中标题为LIKE%key%
这是有效的,因为在数据库中没有太多,因为搜索“这个键”没有找到“这个键”我想改进网站的搜索引擎,甚至可能添加一些对系统进行排名(但这已经很久了)。
所以关于这个问题,我听说过一个叫做“全文搜索”的东西(据我所知)是数据库设计的主要内容,但作为这个主题的新手我对此一无所知......
1)你觉得它有用吗?
还有一个问题......
2)我可以阅读有关数据库设计/搜索引擎设计的内容,它将指引我朝着正确的方向发展。
如果它是相关的,那么该网站目前是用正确的PHP编写的(没有框架的I.E.)(想到将它转换为Ruby on Rails已经超出我的想法)
更新
谢谢大家,我会去全文搜索。 对于后来的任何一个发现,我在全文搜索中找到了一个很好的tutorial。
答案 0 :(得分:9)
'%keyword%'类型搜索的问题在于,即使您在该列上创建索引,也无法在常规表中有效地搜索它。考虑一下如何在电话簿中查找字符串。实际上没有办法优化它 - 你必须扫描整本电话簿 - 这就是MySQL所做的,全表扫描。
如果您将搜索更改为“关键字%”并使用索引,则可以快速搜索。听起来这不是你想要的。
因此,考虑到这一点,我使用了全文索引/搜索,这里有一些优点和缺点:
<强>赞成强>
<强>缺点强>
Here is some good documentation on full-text searching
另一种选择是使用Sphinx等搜索系统。它可以非常快速和灵活。它针对搜索进行了优化,并与MySQL很好地集成。
答案 1 :(得分:2)
我猜想MySQL的全文足以满足您的需求,但值得注意的是内置支持不能很好地扩展。对于平均大小的文档,它开始变得无法用于小到几十万行的表大小。如果你认为这可能会成为一个问题,你应该考虑一下Sphinx。它已成为MYSQL用户的事实标准,尽管我个人更喜欢使用java lucene实现我自己的解决方案。 :)
另外,我想提一下全文搜索与标准LIKE'%keyword%' - 搜索根本不同。与LIKE搜索不同,全文索引允许您搜索几个不必彼此相邻的关键字。例如,谷歌等标准搜索引擎就是全文搜索引擎。
答案 2 :(得分:1)
你也可以考虑Zend_Lucene。它比Sphinx更容易集成,因为它是纯PHP。