【发布时间】:2010-11-19 06:28:19
【问题描述】:
如果您访问 newegg.com(只是一个示例),您会注意到在浏览产品时您可以在左侧边栏中看到每个产品属性旁边的项目数量。
由于某些商品的属性如此之多,产品过滤器的配置如此之多,他们如何如此快速地计算所有这些总数?
【问题讨论】:
标签: mysql e-commerce faceted-search
如果您访问 newegg.com(只是一个示例),您会注意到在浏览产品时您可以在左侧边栏中看到每个产品属性旁边的项目数量。
由于某些商品的属性如此之多,产品过滤器的配置如此之多,他们如何如此快速地计算所有这些总数?
【问题讨论】:
标签: mysql e-commerce faceted-search
对于newegg.com,他们使用endeca提供的分面导航技术
简而言之,endeca实际上会使用xml/csv中提供的数据或直接从任何数据库(不仅限于mysql)中检索数据并计算相似度并将结果分组为自己的格式
Endeca 不是免费的,开源替代品,例如 sphinx 或 lucene solr
【讨论】:
Newegg 使用 Endeca,他们可能是 Endeca 的早期客户之一。回想起来,Endeca 可能是他们成功的重要贡献者。分面导航非常适用于复杂的电子设备,例如计算机部件。
在分面导航中需要考虑一些事项:
1) 您是只想在类别驱动的查询上进行分面导航,还是还希望它在搜索中起作用?事实上,类别是排序的一个层次方面。
2) Solr 的反规范化倒排索引模型会给您带来问题吗?
如果 1) 的答案是正确的——它可能是——你将需要一些倒排索引。倒排索引几乎是进行关键字搜索的唯一方法。他们还会做一些注意事项。
基本上您可以将每个方面视为一个倒排索引(事实上,关键字搜索可能被视为具有排名功能的特殊方面)。然后要进行计数,您必须将当前查询和过滤器与所有其他方面值相交/相交。但是,如果您需要表示稀疏产品集(参见 2),此模型可能会导致问题。
如果 2) 的答案是正确的,那么更多地考虑 OLAP 方面的方面可能会更有帮助。我不知道倒排索引是否可以在没有一些抽象的情况下处理复杂的关系。
考虑并实现分面搜索/导航作为全文(通常实现为倒排索引)和/或 OLAP 的混合是公平的。
我很确定您可以使用列存储实现分面,但如果您想要关键字搜索,您仍然需要有一个倒排索引可供您使用。
@丹格罗斯曼:
看起来是这样,但是——
你有没有想过刻面有多少种组合?你不能像那样缓存这么多页面。 Newegg.com 上的组合可能比你天空中的星星还多。
添加多项选择,情况更糟。游戏结束。
您只能缓存某些情况,例如未过滤和通常过滤。如果你试图在不限制递归级别的情况下爬取 Newegg.com,你会杀死蜘蛛。由于这个原因,多面网站通常会给搜索引擎带来问题。见http://www.searchmarketingstandard.com/facets-navigational-seo-powerhouse-part
【讨论】:
您不知道他们计算速度很快。你只知道它们渲染速度很快。他们可能会花费数小时计算这些总数并呈现他们的页面,缓存结果并提供这些静态文件,直到他们想要刷新数据的某个时间。
【讨论】: