Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/search/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/meteor/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Mysql 搜索实现困境:全文与纯SQL_Mysql_Search_Full Text Search_Sphinx - Fatal编程技术网

Mysql 搜索实现困境:全文与纯SQL

Mysql 搜索实现困境:全文与纯SQL,mysql,search,full-text-search,sphinx,Mysql,Search,Full Text Search,Sphinx,我有一个MySQL/Rails应用程序需要搜索。以下是有关数据的一些信息: 用户只在他们自己的数据中搜索,因此搜索范围从用户id开始缩小 每个用户将拥有大约5000条记录(它们会随着时间的推移而累积) 我把一个典型用户的记录写到一个文本文件中。文件大小为2.9 MB 搜索必须包括两列:标题和正文标题是一个varchar(255)列正文为列类型文本 这将被轻轻地使用。如果我平均每秒搜索几次,那将是令人惊讶的 它运行的是一台500MB的CentOS 5VPS机器 我不想要相关性排名或任何模糊性。搜

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

  • 用户只在他们自己的数据中搜索,因此搜索范围从用户id开始缩小

  • 每个用户将拥有大约5000条记录(它们会随着时间的推移而累积)

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

  • 搜索必须包括两列:
    标题
    正文
    <代码>标题是一个varchar(255)列<代码>正文为列类型文本

  • 这将被轻轻地使用。如果我平均每秒搜索几次,那将是令人惊讶的

  • 它运行的是一台500MB的CentOS 5VPS机器

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

  • 我使用的是InnoDB表类型

我正在研究纯SQL搜索(通过searchlogic gem)或使用Sphinx和Thinking Sphinx gem的全文搜索

Sphinx非常快,而且认为Sphinx很酷,但它增加了复杂性,需要维护守护进程,需要cron作业来维护索引

对于一个小规模的应用程序,我可以使用纯SQL搜索吗?

我会从简单的开始——纯SQL很可能会工作得很好,如果搜索功能被证明是一个瓶颈,您可以随时切换到全文搜索


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

我认为纯SQL搜索不是一个好选择。因为当我们在MySQL中获取文本类型列时,无论缓存设置如何,请求总是落在硬盘上

您只能对非常小的应用程序使用普通SQL搜索


我更喜欢Sphinx。

使用MySQL全文搜索大约4年了,现在转到Sphinx,我想说使用全文布尔(即精确)语法的常规MySQL搜索会很好。它的速度很快,它会做你想要的。您在任何时候搜索的数据量都很小

唯一的问题可能是排序结果。当您开始按日期排序时,MySQL的全文搜索可能会变慢,因为这要求您搜索整个表,而不仅仅是它找到的第一个nn结果。这就是我搬到斯芬克斯的最终原因


Sphinx也很棒,所以不要害怕尝试,但听起来您可能不需要额外的功能。

为什么我的一天似乎是围绕着——设计、实现、阅读等等——在数据库中搜索文本。。。?