动态字段作为solr

时间:2016-06-01 10:32:53

标签: solr faceted-search

我正在尝试使用solr中的动态字段开发过滤系统。这些动态字段可能因产品而异,并且前缀为attribute_filter_以帮助我识别过滤字段。因此,给定搜索查询,我希望基于这些动态字段获得分面结果。

例如,我在solr

中有3个产品作为文档
{ID:1, attribute_filter_color:"white", attribute_filter_brand:"Dell"}
{ID:2, attribute_filter_color:"red", attribute_filter_category:"electronics"}
{ID:3, attribute_filter_size:"mobiles", attribute_filter_brand:"samsung"}

当我的搜索查询与doc 1和doc2匹配时,我只想过滤颜色,品牌和类别,因此构面字段为attribute_filter_colorattribute_filter_brandattribute_filter_category

当我的搜索查询与doc 2和doc3匹配时,我想要过滤器颜色,大小,类别和品牌,因此构面字段为attribute_filter_colorattribute_filter_sizeattribute_filter_category和{{1} }。

当我的搜索查询与doc 1和doc3匹配时,我想要过滤器颜色,品牌和尺寸,因此构面字段为attribute_filter_brandattribute_filter_colorattribute_filter_brand

这些过滤器总共可超过10 ^ 5个产品。这会产生另一个问题,即制作一个包含300个方面字段的attribute_filter_size,这些字段可能超过GET URL的限制。

这个jira ticket显示了正则表达式在这种情况下如何帮助。

1 个答案:

答案 0 :(得分:0)

我的解决方案是将字段名称索引到一个附加字段,这样您对包含字段的文档也有"facet_fields": ["attribute_filter_color","attribute_filter_brand"]

在整个文档结果集中生成一个方面,然后在新查询中使用该结果生成您感兴趣的字段的方面。这将是一个额外的查询,但应该适当地扩展。昂贵的部分将是您正在面对的大量不同字段 - facet_fields字段将快速计算并返回。