使用MapReduce/Aggregation创建搜索facet



我有以下原型的文档:

{
   title: "HD8200 DLP Projector",
   normal_price: 4999.99,
   specifications: [
       {
           ov: "HD (1920 x 1080)",
           fn: "Resolution (Native / Max)",
           o: 7,
           f: 211
       },
       {
           ov: "20000",
           fn: "Contrast Ratio",
           o: 15,
           f: 225
       }
   ]
}

我希望根据规格为这个产品数据库创建一个过滤器列表。

我怎么能得到一个列表的选项id (o)映射到他们的产品计数器,为每个字段(f)?

让我们假设我需要为特定的字段id列表(例如211和225)实现这一点。

编写一个映射器,每个map()调用取一个文档,并为每个选项写出一条记录。记录键将是字段ID,值将是标志"1"、产品标题和选项ID的连接。

编写另一个映射器来读取id列表,并以相同的格式写出记录:键是字段id,值是标志"0"和两个空字符串的连接。

写一个Reducer来读入两个映射器写的记录。每次调用reducer()都会传入为给定字段写的所有记录。如果其中一条记录有"0"标志,那么该字段就是您感兴趣的字段之一。只有这样,您才能为每个带有"1"标志的记录写一条记录。关键字是产品标题,值是选项id。

定义第一个作业驱动程序类,使用两个映射器和一个reducer。此步骤将为您指定的字段id提供成对的产品选项。您将需要第二个任务来按产品收集选项,反之亦然。

相关内容

  • 没有找到相关文章

最新更新