2010-10-03 159 views
0

对于我创建的用户内容网站,它有很多子部分:电影,工作,人员,照片,邮件等。它就像一个雅虎门户网站,但非常非常详细与信息搜索一样,像每个主题一样尽可能深入,不像任何网站。我有在密码学php和mysql中开发的网站。搜索可以在所有子站点和每个子部分都是全球性的,就像我们在谷歌,雅虎上看到的那样。在我的系统中有22个可能的用户内容对象,每个对象都有大约12-15个搜索字段,我称之为对象元数据+ I,这是我想在搜索中包含的历史数据(如用户内容版本控制)。用户内容全站搜索 - PHP/MySQL

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

那么从代码和数据库的角度来看,实施这样一个搜索的最佳实践是什么?应该根据子站点来使用数据库的混合?目前一切都存储在1个mysql数据库中。但是我发现问题可以很好地适用于人们搜索,电影搜索等,但是如果我包括邮件搜索,地理位置,历史数据搜索,甚至不得不去搜索诸如照片标签,照片描述等项目,的全局搜索可能会由于大量的连接和行数而导致性能问题。

回答

1

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

0

对于广义的网站范围内的搜索的预算,你可以限制只是您的域名各大搜索API中的一个,处理和显示的结果,如果他们来了从你自己的搜索。

0

我完全没有解决方案,但遇到了与我的开发中的网站类似的问题。

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

举个例子,我网站的大部分用户都会搜索新闻,日历和媒体板块,所以我的搜索看起来是第一个。但访问者也可能正在搜索其他用户,组,论坛帖子,标签/类别等。但我会让第二个更复杂的脚本处理它。