自定义实时搜索任务的最佳解决方案

时间:2012-12-18 13:35:57

标签: php search

我要在网站上添加简单的实时搜索(在输入框中输入文字时的提示)。

主要任务:

  • 用于搜索的39k纯文本行(每行约500个长度,总大小为4Mb)
  • 1k在线用户可以同时在inputbox中输入内容
  • 在某些情况下,2k-3k resuts可以匹配用户请求

我担心以下问题:

  • 数据库VS文本文件?
  • 是否有与我的任务相关的一般规则或最佳实践旨在减少数据库/服务器内存负载? (高速缓存/索引/等)
  • Sphinx / Solr适合这样的任务吗?

任何链接/建议都会非常有用。

由于

P.S。可能这是最好的解决方案吗? PHP to search within txt file and echo the whole line

3 个答案:

答案 0 :(得分:2)

将您的数据放入数据库(SQLite应该没问题,但您也可以使用更重要的RDBMS,如MySQLPostgres),并将索引放在要搜索的一列或多列。

只做绝对最小值,这意味着你不应该使用框架,ORM等。它们只会减慢你的代码。

创建一个PHP文件,获取搜索文本并使用本机PHP驱动程序执行SELECT查询,例如SQLiteMySQLiPDO或类似。< / p>

另外,请考虑搜索框的工作方式。您可以阻止许多请求,例如:设置最小字符限制(仅搜索一个或两个字符没有意义),在发送请求之间设置一个短暂的延迟(这样就不会发送从未使用过的请求),等等。

是否使用Solr等扩展程序取决于您的具体情况。如果你有很多数据和很多请求,那么也许你应该研究一下。但如果问题可以通过一个简单的解决方案来解决,那么你应该在使它变得更复杂之前尝试一下。

答案 1 :(得分:1)

过去,我使用Zend search Lucene取得了巨大成功。

这是一个完全用PHP 5编写的通用文本搜索引擎。它管理你的源代码索引并且非常快(根据我的经验)。它支持许多查询类型,搜索字段,搜索排名。

答案 2 :(得分:1)

我已多次实施“实时搜索”,总是使用AJAX查询数据库(MySQL),并且还没有/观察到任何速度或大负载问题。

无论如何,我看到使用Solr的实现,但无法建议它是更快还是消耗更少的资源。

它完全取决于服务器将运行的硬件,IMO。正如我在某处写的那样,我看到一个文件系统非常慢的服务器,因此在从txt文件(或使用Solr)读取和解析时实现实时搜索可能比查询数据库时要慢。另一方面,您可以使用缓慢的数据库连接来托管糟糕的共享虚拟主机(通过更多并发连接会变得更慢),因此这不是最佳解决方案。

我的建议:将MySQL与AJAX一起使用(查看this jquery pluginthis article),在搜索到的列上设置正确的INDEX es,如果发现这种情况很慢你仍然可以移动到txt文件。