搜索实现困境:全文与普通SQL

时间:2010-03-25 21:06:25

标签: mysql search full-text-search sphinx

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

  • 用户只能在自己的数据中进行搜索,因此搜索范围会缩小到user_id开始。

  • 每位用户最多会有五千条记录(随着时间的推移会累积)。

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

  • 搜索必须涵盖两列:titlebodytitle是varchar(255)列。 body是列类型文字。

  • 这将被轻易使用。如果我平均每秒进行几次搜索就会出人意料。

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

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

  • 我正在使用InnoDB表格类型。

我正在寻找普通的SQL搜索(通过searchlogic gem)或使用Sphinx和Thinking Sphinx gem进行全文搜索。

Sphinx非常快,思维Sphinx很酷,但它增加了复杂性,维护守护进程,cron作业维持索引。

我是否可以通过纯SQL搜索获得小规模的应用程序?

3 个答案:

答案 0 :(得分:3)

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

您只能在非常小的应用程序中使用纯SQL搜索。

我更喜欢Sphinx。

答案 1 :(得分:1)

我会从简单开始 - 很有可能普通的SQL会运行良好,如果搜索功能被证明是瓶颈,你总是可以在以后切换到全文搜索。

我正在开发和维护一个具有类似于你的属性的搜索功能的应用程序,到目前为止,普通的SQL搜索对我来说非常有用。我在一年或两年前第一次实现搜索功能时遇到了类似的性能问题,但我还没有看到任何性能问题。

答案 2 :(得分:0)

使用MySQL全文搜索大约4年,现在只是转向Sphinx,我会说使用全文布尔(即精确)语法的常规MySQL搜索会没问题。它很快,它会完全符合您的要求。您将在任何时间搜索的数据量都很小。

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

狮身人面像也很棒,所以不要害怕尝试它,但听起来好像你的情况下可能不需要额外的功能。