1

我将向网站添加简单的实时搜索(在输入框中输入文本时的提示)。

主要任务:

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

我担心以下问题:

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

任何链接/建议都将非常有帮助。

谢谢

PS这可能是最好的解决方案吗?PHP在txt文件中搜索并回显整行

4

3 回答 3

2

将您的数据放入数据库中(SQLite应该可以,但您也可以使用更强大的 RDBMS,例如MySQLor Postgres),并在将要搜索的列上放置索引。

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

创建一个 PHP 文件,获取搜索文本并SELECT使用原生 PHP 驱动程序(例如SQLite、或类似驱动程序MySQLi)进行查询。PDO

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

是否使用 Solr 等扩展取决于您的具体情况。如果您有大量数据和大量请求,那么也许您应该调查一下。但是,如果可以使用简单的解决方案来解决问题,那么您可能应该先尝试一下,然后再使其变得更复杂。

于 2012-12-18T14:04:45.093 回答
1

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

它是一个完全用 PHP 5 编写的通用文本搜索引擎。它管理您的资源的索引并且速度非常快(根据我的经验)。它支持多种查询类型、搜索字段、搜索排名。

于 2012-12-18T14:10:03.717 回答
1

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

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

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

我的建议:将 MySQL 与 AJAX 一起使用(查看这个 jquery 插件这篇文章),在搜索的列上设置适当的INDEXes,如果发现速度很慢,您仍然可以移动到 txt 文件。

于 2012-12-18T14:11:47.110 回答