【问题标题】:User content site wide search - PHP/ MySQL用户内容站点范围的搜索 - PHP/ MySQL
【发布时间】:2011-04-20 10:35:51
【问题描述】:

对于我正在创建的用户内容网站,它有很多子部分:电影、工作、人物、照片、邮件等。它就像一个雅虎门户,但信息搜索非常详细,就像我一样与任何网站不同,每个主题都尽可能深入。我有正在使用 codeignitor php 和 mysql 开发的网站。正如我们在 google、yahoo 上看到的那样,搜索可以在所有子站点和每个子部分中进行全局搜索。我的系统上有 22 个可能的用户内容对象,每个对象都有大约 12-15 个搜索字段,我称之为对象元数据 + 我存储的历史数据(如用户内容版本控制)也我想包含在搜索中。

现在的问题是针对每个子部分的搜索,这似乎是合理的,因为范围有限,所以我认为我可以使用 mysql 很好地完成它。我没有预见到任何性能问题。但是对于站点范围的搜索,它不仅会搜索标题名称,还会搜索关键字、标签、描述,包括人们的邮件、cmets、历史数据等。所以我担心的是性能。由于这是一家初创公司,我的硬件资源有限,所以我必须 100% 依赖数据库和代码才能成功。

那么,从代码和数据库的角度来看,实现此类搜索的最佳做法是什么?是否应该根据子站点使用混合数据库?目前所有内容都存储在 1 个 mysql 数据库中。但我看到它可能适用于人物搜索、电影搜索等的问题,但如果我包括邮件搜索、地理位置、历史数据搜索,甚至不得不去搜索照片标签、照片描述等项目 -> 所有部分在全局搜索中,由于连接数和行数过多,可能会出现性能问题。

【问题讨论】:

    标签: php sql database search


    【解决方案1】:

    我不了解 PHP,但是对于我的 ruby​​-on-rails 项目,我总是使用 Sphinx 搜索引擎来做这些事情。它是一个独立的搜索引擎,为您的数据库编制索引,当用户提交搜索查询时,该查询将与 Sphinx 的索引数据库而不是实际的数据库进行匹配。它速度极快,并且可以很好地控制如何索引/搜索。
    Sphinx Search Engine
    PHP: Sphinx Extension(不确定这是否相关)

    【讨论】:

      【解决方案2】:

      对于预算有限的通用站点范围搜索,您可以将主要搜索 API 之一限制为仅您的域,并处理和显示结果,就好像它们来自您自己的搜索一样。

      【讨论】:

        【解决方案3】:

        我没有确切的解决方案,但我正在开发的网站遇到了类似的问题。

        我开始认为解决方案可能在于确定您的大部分搜索在哪里,并将搜索限制在这些查询中。如果用户搜索需要更深入的结果(例如您的mail search, geo locations, historical data),那么您可以将用户发送到第二个 mysql 查询。让您的大多数用户使用更简单、性能较低的查询进行搜索,其余用户可以在必要时使用更多资源。

        例如,我网站的大多数用户将搜索新闻、日历和媒体部分,因此我的搜索首先是他们。但访问者也可能在搜索其他用户、组、论坛帖子、标签/类别等。但我要让第二个更复杂的脚本来处理它。

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 2019-08-12
          • 2011-08-14
          • 1970-01-01
          • 2010-09-28
          • 2016-09-09
          • 2012-03-03
          • 1970-01-01
          相关资源
          最近更新 更多