当前位置: 首页 > 知识库问答 >
问题:

取决于搜索结果的动态Querydsl过滤器谓词

邴俊友
2023-03-14

我用Spring html" target="_blank">MVC和Spring数据开发了一个产品搜索。用户可以通过名称/描述搜索产品(手动输入。在产品#名称和产品#描述中使用“like”搜索)或通过类别(可点击链接)搜索产品。当显示结果时,用户应该能够使用一些过滤器谓词如价格、大小、颜色等进一步缩小结果。因此,我实现了一些Querydsl谓词。

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

我不能迭代整个结果并将所有可用的颜色放在列表中,因为我使用分页,所以我没有堆中的整个结果集来迭代。

是否必须对结果集中的每个筛选器谓词执行额外的sql查询?我想了一个附加的表,上面有预先计算的结果。我可以用这个来搜索类别。但是由于用户可以手动输入搜索产品#名称和产品#描述,我不能预测每个可能的搜索字符串······

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

有什么想法吗?

谢谢
尼克

共有1个答案

王宜
2023-03-14

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

...
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);
}
 类似资料:
  • 问题内容: 每当我在应用程序中搜索时,都会显示正确的结果,但是当我点击搜索的单元格时,在执行搜索之前,它始终会播放表格的第一个索引。我试图在我的didselectcell中使用isSearching Bool,但似乎无法正常工作。 问题答案: 我认为问题在于您正在跟踪自己是否在搜索和操作源数据数组。 我有一个示例游乐场代码段,我已将其用于其他一些答案,该示例向您展示了如何更有效地执行此操作,并提供

  • 问题内容: 我是这个框架的新手,因此练习Angularjs并遵循网站上提供的教程。 有一个示例,我们可以搜索表中存在的数据,示例如下, 在上面的代码中,我可以使用两个不同的输入来搜索手机,即按型号名称搜索和按公司名称搜索,以上代码运行良好, 但是,如果我需要使用选择选项中存在的搜索类型进行搜索,该怎么办? 代码如下 从上面的代码中,您可以看到我正在尝试通过选择框中显示的“姓名”,“公司”或“名称”

  • 问题内容: 我正在尝试搜索数据库,并能够使用大写/小写过滤器术语,但是我注意到在应用分析器时,我不知道如何在过滤后的搜索中应用小写分析器。这是查询: 我有一个小写的类型: 以及相应的映射: 问题答案: 问题是您在索引期间分析了一个字段以使其小写,但您正在对未分析的查询使用术语过滤器: 术语过滤器 筛选具有包含术语(未分析)的字段的文档。与术语查询类似,不同之处在于它充当过滤器。 http://ww

  • 有两个具有相同结构的地图,即map1和map2,其结构为

  • 问题内容: 我刚刚开始使用SQLAlchemy。我决定使用它,因为我在sqlite查询中间使用了很多字符串表达式。 所以,这就是我的问题。我的桌子上有很多设备,每个设备都有维护级别的日期。关键是用户可以选择他想在屏幕上看到的维护级别。因此,我应该为他选择的每种维护级别组合“调整”我的SQLAlchemmy。 例如,在原始SQLite中。 SELECT * WHERE(设备IN [])和m_leve

  • 我使用查询DSL生成实体EntitySerializer,以便使用QueryDSL(与SpringData集成)查询JPA实体。