php - 全文搜索是答案吗?

标签 php mysql search

好的,我有一个看起来像这样的 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/

相关文章:

javascript - 调用脚本文件中的第二个函数

php - PHP 中的::类是什么?

php - 如何在任何表中添加一系列递增id的字符串?

php - 查询 MySQL 以在 PHP 中显示用户帖子 - 不确定如何制定查询

php - 使用 mysqli_escape_string 函数出错

php - Forge + Git + Laravel 问题

python - 在大量关键字列表中检查单词的最快方法 - Python 性能

javascript - 如何将搜索框链接到我页面上的网站?

azure - 从 azure 搜索返回仅与确切搜索词匹配的记录

php - 如何在 Laravel 中显示模型关系?