我正在构建一个包含构面等的过滤器页面,该页面应能正常工作。
现在,我们的客户有一个要求,基本上是“能够决定将哪些物料分类出来”。
每个产品都以产品展示订单装饰,并且在产品线中。
我们得到了以下示例产品展示订单:
1.特色项目
2.核心项目
3.备件
4.实用程序
这些产品线:
1.锤子
2.锯
3.木材
排序是这样的:
首先应基于产品展示顺序排序,其次应按产品系列,其次应按字母顺序。
因此,首先列出了所有属于特色商品的产品,然后按其产品线对所有这些特色商品进行排序,如果某些商品在同一“特色商品”和“产品系列”中,则按字母顺序排列。
面临的挑战是:我不能只获得产品展示订单项和产品系列的排序,就像产品上的数字一样,我只有一个名称/ ID。
我们根据产品是否属于不同类别来考虑进行Boosting,但这似乎有些混乱。
要么
看看排序中是否有逻辑。
按productDisplayOrder排序:
1.特色2.核心项目...
然后按产品系列:
1.锤子2.锯...
然后按名称DESC。
哪种方法是进行此排序的最佳方法,是否有可能将此逻辑赋予 flex ,如果这是一个匹配项,然后对其进行排序。还是我们需要扭转产品的增长?
希望这对您有意义。
提前致谢! :)
最佳答案
选项1)。最快/性能最好的解决方案是为productDisplayOrder
和ProductLine
创建新的/单独的整数字段,然后按照描述的那样在您的排序标准中使用这些字段(在重新索引并验证数据是否按预期方式索引之后)。
选项2)如果您想获得比描述更多的细微差别(例如更高的得分匹配可以“突破”所述的订购上限),则可以探索使用Function Score Query 实现自定义得分策略,该策略在生成整体匹配项时将productDisplayOrder
和ProductLine
考虑在内得分了。
选项3)。如果您无法更改映射并为数据重新索引,则可以使用Script-Based Sorting通过脚本(例如Groovy)从当前已索引的productDisplayOrder / ProductLine文本生成排序值。请记住,查询性能将比前两个选项差。