在我们的新网站(一个购物网站)上,我们将使用 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 搜索对此进行搜索。
我错过了任何其他选择吗?