使用 Solr 进行成本比较
我计划建立类似pricegrabber.com/google 产品搜索的东西。
假设我已经在一个巨大的表中提供了可用的数据。我计划将这一切提交给 Solr。这样就解决了搜索的问题。但我不知道如何进行比较。我可以对数据库上 Solr 返回的产品进行分组查询(在 UPC/SKU 上)。但是,我不想那样做。我想以某种方式获得返回给我的产品比较数据以及来自 Solr 本身的搜索。
您认为我的架构应该如何?您认为这个用例可以通过 Solr/Sphinx 全部解决吗?
I plan to build something like pricegrabber.com/google product search.
Assume I already have the data available in a huge table. I plan to submit this all to Solr. This solves the problem of search. However I am not sure how to do comparison. I can do a group by query(on UPC/SKU) for the products returned by Solr on the DB. However, I dont want to do that. I want to somehow get product comparison data returned to me along with search from Solr itself.
How do you think should my schema be? Do you think this use-case can be solved all by Solr/Sphinx?
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(1)
您需要“结果分组”或“字段折叠”支持才能正确处理它。
在 Solr 中,该功能在任何发行版本中均不可用,并且仍在开发中。如果您愿意使用 Solr 的未发布版本,请在此处获取详细信息。
Sphinx 支持结果分组,我很久以前就在类似的项目中使用过它。您可以在此处获取更多详细信息。
另一种策略可能是预处理数据,以便每个 UPC/SKU 只插入一条记录到索引中。每条记录可以有一个单独的字段,其中包含具有相同 UPC/SKU 的所有商品的 ID。
对 Solr 返回的产品进行数据库 GROUP BY 可能还不够。例如,如果产品 A 和 B 具有相同的 UPC,并且某个查询与 A 匹配但与 B 不匹配,那么您将不会在结果集中同时获得 A 和 B。
You need 'result grouping' or 'field collapsing' support to properly handle it.
In Solr, the feature is not available in any release version and is still under development. If you are willing to use an unreleased version of Solr, then get the details here.
Sphinx supports result grouping and I had used it a long time ago in a similar project. You can get more details here.
An alternative strategy could be to preprocess your data so that only a single record per UPC/SKU gets inserted in the index. Each record can have a separate field containing the ids of all the items with the same UPC/SKU.
Doing a database GROUP BY on the products returned by Solr may not be enough. For example, if products A and B have the same UPC and a certain query matches A but not B, then you will not get both A and B in your result set.