我正在创建一个包含许多不同部分的社交网站,例如博客,画廊,多媒体等。现在是实现搜索功能的时候了。客户拒绝使用谷歌搜索并坚持制作自定义搜索,其中每个部分都会单独显示结果。
例如,如果用户输入“art”,结果应显示如下:
3 found in blogs
1 ...
2 ...
3 ...
2 found in galleries
1 ...
2 ...
None found in multimedia
我打算使用MySQL全文搜索。所以,问题是:我如何进行这样的搜索,所以如果很多记录与查询匹配,它不会杀死服务器?在这种情况下,我真的没有看到如何实现分页。
答案 0 :(得分:4)
答案 1 :(得分:2)
你不会用这样的东西杀死一个mysql服务器,即使你的应用程序很庞大(我们在这里谈论数千个查询/秒),你只需要设置一个专用于搜索的mysql服务器的复制品,你可能想要建立一个“热门关键词结果”的缓存来加快速度,但是像googlemini这样的设备仍然是最好的......
答案 2 :(得分:2)
如果您可以运行Java servlet容器(如Tomcat或Jetty),那么我建议使用Solr(http://lucene.apache.org/solr/)。它位于Lucene之上,非常强大。 Solr在CNET开始,被Netflix和Zappos等大型网站使用。 Stack Overflow使用Lucene的.NET实现。我对Sphinx并不熟悉,所以我不能告诉你它与Solr的比较。
如果您使用Solr,请查看刻面。这允许您执行搜索,然后计算“博客”,“画廊”,“多媒体”等中有多少文档。
这是一个与Solr(http://code.google.com/p/solr-php-client/)接口的PHP客户端。
答案 3 :(得分:1)
也许更好的决定是使用 - sphinx
答案 4 :(得分:1)
我之前在我创建的一些网站上做过这个。我所做的是对每个模块运行一个查询以查找结果。你想要做的是运行一个mysql查询,然后在while循环中获取行而不是使用fetch all。这样可以确保不会过度消耗内存。
例如: while($ row = mysql_fetch_array($ result)){echo $ row ['item_name']; }
您很可能会发现MySQL可以处理比您想象的更大的搜索。
分页最好使用分页类,例如来自代码点火器等的分页类。 你在使用网络框架吗?
答案 5 :(得分:1)
是Sphinx或Lucene,两者都比MySQL好,速度快,而且很容易绑定到PHP应用程序。