我正在尝试使用solr
中的动态字段开发过滤系统。这些动态字段可能因产品而异,并且前缀为attribute_filter_
以帮助我识别过滤字段。因此,给定搜索查询,我希望基于这些动态字段获得分面结果。
例如,我在solr
{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_color
,attribute_filter_brand
和attribute_filter_category
。
当我的搜索查询与doc 2和doc3匹配时,我想要过滤器颜色,大小,类别和品牌,因此构面字段为attribute_filter_color
,attribute_filter_size
,attribute_filter_category
和{{1} }。
当我的搜索查询与doc 1和doc3匹配时,我想要过滤器颜色,品牌和尺寸,因此构面字段为attribute_filter_brand
,attribute_filter_color
和attribute_filter_brand
。
这些过滤器总共可超过10 ^ 5个产品。这会产生另一个问题,即制作一个包含300个方面字段的attribute_filter_size
,这些字段可能超过GET URL
的限制。
这个jira ticket显示了正则表达式在这种情况下如何帮助。
答案 0 :(得分:0)
我的解决方案是将字段名称索引到一个附加字段,这样您对包含字段的文档也有"facet_fields": ["attribute_filter_color","attribute_filter_brand"]
。
在整个文档结果集中生成一个方面,然后在新查询中使用该结果生成您感兴趣的字段的方面。这将是一个额外的查询,但应该适当地扩展。昂贵的部分将是您正在面对的大量不同字段 - facet_fields
字段将快速计算并返回。