全文是否搜索答案?

时间:2009-03-05 11:12:22

标签: php mysql search

好的,我的mySQL数据库看起来像这样

ID - 一个int和记录的唯一ID

标题 - 项目的名称

说明 - 商品说明

我想搜索关键词的标题和描述,目前我正在使用。

SELECT *来自'item',其中标题为LIKE%key%

这是有效的,因为在数据库中没有太多,因为搜索“这个键”没有找到“这个键”我想改进网站的搜索引擎,甚至可能添加一些对系统进行排名(但这已经很久了)。

所以关于这个问题,我听说过一个叫做“全文搜索”的东西(据我所知)是数据库设计的主要内容,但作为这个主题的新手我对此一无所知......

1)你觉得它有用吗?

还有一个问题......

2)我可以阅读有关数据库设计/搜索引擎设计的内容,它将指引我朝着正确的方向发展。

如果它是相关的,那么该网站目前是用正确的PHP编写的(没有框架的I.E.)(想到将它转换为Ruby on Rails已经超出我的想法)

更新

谢谢大家,我会去全文搜索。 对于后来的任何一个发现,我在全文搜索中找到了一个很好的tutorial

3 个答案:

答案 0 :(得分:9)

'%keyword%'类型搜索的问题在于,即使您在该列上创建索引,也无法在常规表中有效地搜索它。考虑一下如何在电话簿中查找字符串。实际上没有办法优化它 - 你必须扫描整本电话簿 - 这就是MySQL所做的,全表扫描。

如果您将搜索更改为“关键字%”并使用索引,则可以快速搜索。听起来这不是你想要的。

因此,考虑到这一点,我使用了全文索引/搜索,这里有一些优点和缺点:

<强>赞成

  • 非常快
  • 返回按相关性排序的结果(默认情况下,尽管您可以使用任何排序)
  • 可以使用停用词。

<强>缺点

  • 仅适用于MyISAM表
  • 忽略太短的单词(默认最小为4个字母)
  • 在where子句中需要不同的SQL,因此您需要修改现有查询。
  • 与部分字符串不匹配(例如,'word'与'keyword'不匹配,只与'word'匹配)

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。