我使用Spring MVC和Spring Data开发了产品搜索。用户可以按名称/描述搜索产品(手动输入。搜索产品#名称和产品#描述"类似")或按类别(可点击链接)。当显示结果时,用户应该能够通过一些过滤器谓词(如价格,大小,颜色等)进一步缩小结果范围。因此我实施了一些Querydsl谓词。
让我们说用户找到了红色,绿色和黄色的产品,然后我想在我的过滤器中仅显示这些颜色。我不想使用静态值并提供您可以想象的所有颜色。
我不能遍历整个结果并将所有可用颜色放在列表中,因为我正在使用Paging,因此我不会在堆中有整个结果集来迭代。
我是否必须对结果集上的每个过滤谓词执行额外的SQL查询?我想到了一个带有预先计算结果的附加表。好吧,我可以用它来进行类别搜索。但是,由于用户可以在产品#名称和产品#说明上进行手动输入搜索,因此我无法预测每个可能的搜索字符串......
产品每天都在变化,因为我每晚都会进行多次Spring Batch CSV导入(更新,删除和添加产品)。
任何的想法?
谢谢你尼克
答案 0 :(得分:1)
解决了它。使用包含搜索字符串或类别的谓词创建自定义查询。如果设置了过滤器属性,我将其作为内部联接添加到查询中。在过滤器中,我为每个包含有效值的属性都有一个List。 E.g。
...
query.from(product).where(predicate);
if(isColorFilterSet()) {
JPAQuery colorQuery = query.from(color).innerJoin(product.colors, color)
.groupBy(color);
List<Color> colors = colorQuery.list(color);
filter.setFilterableBaseColors(colors);
}