将Solr结果与MySQL数据相结合的最有效方法

时间:2013-02-19 14:30:29

标签: mysql solr

在我们的新网站(购物网站)上,我们将使用Solr作为我们网站的搜索引擎。在Solr索引中,我们保留了产品ID的列表,以及每个产品的关键字列表。搜索查询是针对关键字完成的。

Solr返回产品ID列表。然后将这些id插入到MySQL查询中,以从数据库中选择所有产品数据。 MySQL还处理结果的排序。例如,MySQL查询可能如下所示:

SELECT * FROM product WHERE id IN (1,4,42,32,46,...,39482) ORDER BY price ASC

我们在网站上有大约100,000种产品。当有数千个结果时,此方法可以正常工作,但是当存在 - 例如 - 50,000个结果时,此方法会变慢。

我的假设是瓶颈是“WHERE IN”条款。长期解决方案是将所有产品数据移至Solr,以便它可以处理对结果进行排序并且还对搜索应用细化过滤器(例如,用户可能只想查看特定价格范围内的产品)。但是,我们对Solr缺乏经验,需要进行短期修复才能实现。

一种选择是在短期内放弃Solr并将关键字存储在MySQL的表中,并使用FULL-TEXT搜索对其进行搜索。

我错过了其他选择吗?

1 个答案:

答案 0 :(得分:6)

您面临的主要问题是,Solr将返回按匹配关键字数量排序的结果,但您希望按价格对结果进行排序。正如您正确提到的那样,将所有数据移至Solr是最佳选择 - 您会对Solr的搜索,排序,分面和分页需求感到满意。

然而,短期而言,将price字段添加到Solr是非常值得的。当您获得tooth paste之类的搜索查询时,您可以发出类似

的Solr查询
q=keywords:(tooth AND paste)&rows=10&fl=id&sort=price%20asc

仅获取前10个结果,然后通过指定start参数进行分页,如下所示:

q=keywords:(tooth AND paste)&rows=10&start=10&fl=id&sort=price%20asc