JPQL:按"best matches"排序查询结果可能吗?



我有以下问题:

我使用JPQL (JPA 2.0和eclipselink),我想创建一个查询,给我排序的结果如下方式:首先,结果按最佳匹配项升序排序。之后就会出现劣等的比赛。我的对象基于一个名为"Person"的简单类,其属性为:

{String Id,
String forename,
String name}

例如,如果我搜索"Picol",结果应该是这样的:

[{129, Picol, Newman}, {23, Johnny, Picol},{454, Picolori, Newta}, {4774, Picolatus, Larimus}...]

PS:我已经考虑过使用两个查询,第一个是用"等于"搜索,第二个是用"喜欢",虽然我不太确定如何连接两个查询结果…?

希望你的帮助和提前感谢,Florian

如果,正如您的问题似乎暗示的那样,您只有两个组(第一组:名称或名称等于搜索字符串;第二组:名称或名称包含搜索字符串),如果给定组中的所有人具有相同的"匹配分数",那么使用两个查询确实是一个很好的解决方案。

第一个查询:

select p from Person p where p.foreName = :param or p.name = :param

第二个查询:

select p from Person p where (p.foreName like :paramSurroundedWithPercent 
                              or p.name like :paramSurroundedWithPercent)
                             and p.foreName != :param 
                             and p.name != :param

执行两个查询(每个都返回一个List<Person>),并将第二个列表的所有元素添加到第一个列表(使用addAll()方法)

最新更新