如果您访问 newegg.com(只是一个示例),您会注意到在浏览产品时,您可以在左侧边栏中看到每个产品属性旁边的项目数量。
由于某些项目的属性如此之多,产品过滤器的配置如此之多,他们如何如此快速地计算所有这些总数?
如果您访问 newegg.com(只是一个示例),您会注意到在浏览产品时,您可以在左侧边栏中看到每个产品属性旁边的项目数量。
由于某些项目的属性如此之多,产品过滤器的配置如此之多,他们如何如此快速地计算所有这些总数?
对于 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
你不知道他们计算得很快。你只知道它们渲染速度很快。他们可能会花费数小时计算这些总数并呈现他们的页面,缓存结果并提供这些静态文件,直到他们想要刷新数据的某个时间。