好的,我有一个看起来像这样的 mySQL 数据库
ID - 一个整数,记录的唯一ID
Title - 项目的名称
描述 - 项目描述
我想搜索关键词的标题和描述,目前我正在使用。
SELECT * From ‘item’ where title LIKE %key%
这很有效,因为数据库中没有太多内容,但是搜索“this key”找不到“this that key”我想改进网站的搜索引擎,甚至可能添加某种排名系统(但那是很长一段时间了)。
所以对于这个问题,我听说过一种叫做“全文搜索”的东西(据我所知)它是数据库设计的主要内容,但作为这个主题的新手,我对此一无所知,所以......
1) 你认为它有用吗?
还有一个额外的任务......
2) 我可以阅读哪些有关数据库设计/搜索引擎设计的内容,这些内容可以为我指明正确的方向。
如果相关,该网站目前是用纯 PHP 编写的(即没有框架的 I.E.)(我想到了将其转换为 Ruby on Rails)
更新
谢谢大家,我将进行全文搜索。 对于后来发现这个的人,我找到了一个很好的 tutorial全文搜索也是如此。
最佳答案
'%keyword%' 类型搜索的问题在于,即使您在该列上创建索引,也无法在常规表中有效地搜索它。想一想您会如何在电话簿中查找该字符串。实际上没有办法优化它——你必须扫描整个电话簿——这就是 MySQL 所做的,全表扫描。
如果您将该搜索更改为“关键字%”并使用索引,您可以获得非常快速的搜索。不过,听起来这不是您想要的。
考虑到这一点,我使用了相当多的全文索引/搜索,以下是一些优缺点:
优点
- 很快
- 返回按相关性排序的结果(默认情况下,尽管您可以使用任何排序方式)
- 可以使用停用词。
缺点
- 只适用于 MyISAM 表
- 忽略太短的单词(默认最小为 4 个字母)
- 在 where 子句中需要不同的 SQL,因此您需要修改现有查询。
- 不匹配部分字符串(例如'word'不匹配'keyword',只匹配'word')
Here is some good documentation on full-text searching .
另一种选择是使用搜索系统,例如 Sphinx .它可以非常快速和灵活。它针对搜索进行了优化,并与 MySQL 很好地集成。
关于php - 全文搜索是答案吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/614358/