繁体   English   中英

搜索实现难题:全文与纯SQL

[英]Search implementation dilemma: full text vs. plain SQL

我有一个需要搜索的MySQL / Rails应用程序。 以下是有关数据的一些信息:

  • 用户仅在自己的数据内搜索,因此搜索范围首先由user_id缩小。

  • 每个用户最多可拥有约五千条记录(它们会随着时间的推移而累积)。

  • 我将典型用户的记录写到了文本文件中。 文件大小为2.9 MB。

  • 搜索必须包括两列: titlebody title是一个varchar(255)列。 body是列型文本。

  • 这将很少使用。 如果我平均每秒进行几次搜索,那将是令人惊讶的。

  • 它正在运行一台500 MB的CentOS 5 VPS计算机。

  • 我不需要相关性排名或任何模糊性。 搜索应该是确切的字符串,并可靠地返回包含该字符串的所有记录。 简单的日期顺序-最新到最旧。

  • 我正在使用InnoDB表类型。

我正在看普通的SQL搜索(通过searchlogic gem)或使用Sphinx和Thinking Sphinx gem的全文本搜索。

Sphinx非常快,Thinking Sphinx很酷,但是它增加了复杂性,要​​维护的守护进程,cron任务来维护索引。

我可以摆脱普通SQL搜索小型应用程序的麻烦吗?

我认为普通的SQL搜索将不是一个好的选择。 因为当我们在MySQL中获取文本类型列时,无论缓存设置如何,请求始终落入硬盘驱动器。

您只能对很小的应用程序使用纯SQL搜索。

我更喜欢Sphinx。

我将以简单的方式开始-普通的SQL可能会很好地工作,并且如果搜索功能证明是瓶颈,则以后可以随时切换到全文搜索。

我正在开发和维护具有搜索功能且具有与您相似的属性的应用程序,到目前为止,纯SQL搜索对我来说非常有效。 一两年前首次实现搜索功能时,我也遇到了类似的性能问题,但是我还没有发现任何性能问题。

使用MySQL全文搜索已有大约4年的时间,而现在移到Sphinx,我想说使用全文布尔(即精确)语法进行常规MySQL搜索就可以了。 它的速度很快,它将完全满足您的需求。 您一次要搜索的数据量很小。

唯一的问题可能是排序结果。 results it finds. 当您按日期(例如)开始订购商品时,MySQL的全文搜索会变慢,因为这要求您搜索整个表,而不仅仅是搜索它找到的前结果。 最终,这就是我搬到狮身人面像的原因。

Sphinx也很棒,所以不要害怕尝试,但是听起来您的情况可能不需要其他功能。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM