gpt4 book ai didi

java - Dynamic Querydsl 根据搜索结果过滤谓词

转载 作者:行者123 更新时间:2023-11-30 11:11:27 25 4
gpt4 key购买 nike

我使用 Spring MVC 和 Spring Data 开发了一个产品搜索。用户可以按名称/描述(手动输入。使用“like”搜索产品#name 和 product#description)或按类别(可点击链接)搜索产品。当显示结果时,用户应该能够使用一些过滤谓词(如价格、尺寸、颜色等)进一步缩小结果范围。因此我实现了一些 Querydsl 谓词。

假设用户找到了红色、绿色和黄色产品,然后我只想在我的过滤器中显示这些颜色。我不想使用静态值并提供您可以想象的所有可能的颜色。

我无法遍历整个结果并将所有可用颜色放入列表中,因为我正在使用分页,所以我没有在堆中设置整个结果来遍历。

我是否必须为结果集上的每个过滤谓词执行额外的 sql 查询?我想到了一个带有预先计算结果的附加表。好吧,我可以将其用于类别搜索。但是由于用户也可以在 product#name 和 product#description 上进行手动输入搜索,我无法预测每个可能的搜索字符串......

产品每天都在变化,因为我每晚都进行几次 Spring Batch CSV 导入(更新、删除和添加产品)。

任何想法?

谢谢
尼克

最佳答案

解决了。使用包含搜索字符串或类别的谓词创建自定义查询。如果设置了过滤器属性,我将其作为内部连接添加到查询中。在过滤器中,我有一个包含有效值的每个属性的列表。例如

...
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);
}

关于java - Dynamic Querydsl 根据搜索结果过滤谓词,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27418822/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com