我现在有一份文件,列出了汽车零件。我目前拥有通过品牌,型号和类型进行过滤的所有设置。但我想添加一个日期范围字段。
示例数据:
产品名称 使 模型1 - 日期范围 型号2 - 日期范围 模型3 - 日期范围
如您所见,可以有多个型号,每个型号都有特定的日期范围,该部件适合车辆。我怎么能这样做?我甚至无法想到如何索引它从不介意过滤搜索它。
答案 0 :(得分:0)
我知道你有一个实体(product,title,make,{model1-dateRange1,model2-dateRange2,model3-dateRange3})。每个实体都有一个包含2个字段的子实体(model,dateRange)。它的一对多关系
一种方法是 - 使用多值字段类型。因此每个文档都有多个值。但在你的情况下,它不仅仅是字符串数组(模型或日期),而是对象数组(模型和数据)。因此,您可以使用model_date组合并将它们存储为多个值。格式类似于[prod1,title1,make1,{model1_date1,model2_date2,model3_date3}]。你的棘手部分有日期而不是字符串。因此,在根据日期(值的第二部分)进行搜索时,您需要了解它是如何影响的。这种方法是非规范化(平坦)方法
另一种方法是使用nested documents。这是当前对象关系的工作方式。更像是父母和孩子。父文件有(产品,标题,品牌)和孩子有(型号,日期)。这种关系由solr维护。但是,如果docuemnt是child或parent,那么你应该有一个可以区分的字段。这样做的好处是,您可以搜索具有子属性的父级,反之亦然。这是你的选择。
答案 1 :(得分:0)
感谢Ramzy,使用的解决方案是使用具有车辆模型和年份组合在一起的多值字段。由于我只需要过滤年份而不是完整日期,我将日期范围(以PHP为单位)拆分为多个值。例如:
MYSQL:
品牌:福特型号:Model1 DateFrom:Jan-2011 DateTo:Feb-2013
品牌:福特型号:Model2 DateFrom:Jan-2011 DateTo:Feb-2011
<强> Solr的:强>
Model1_2011,
Model1_2012,
Model1_2013,
Model2_2011,
然后当我在模型2上过滤年份时,我会搜索:Model2 *,它会找到所有相关的产品/方面,在PHP中,我只会显示包含Model2的那些方面。在2011年搜索Model2的产品时,我会搜索Model2_2011。可以添加更多属性,例如trim,然后搜索将更改为Model2 * 2011,它可以返回:Model2_Trim1_2011。