JPQL / HQL:通过与样本的相似性对实体进行排序?

时间:2013-02-16 01:07:04

标签: hibernate jpa jpql similarity hibernate-search

我想查询与给定实体(相同类型)相似的实体。 相似性(在最简单的情况下)定义为成员集合中相同项目的数量。

JPQL / HQL查询的外观如何?

我尝试了什么:

       SELECT wuSimilar, COUNT(*) AS score FROM WorkUnit wuBase 
           LEFT JOIN wuBase.tags AS wubTags
           LEFT JOIN WorkUnit wuSimilar ON wubTags IN wuSimilar.tags
           WHERE wuBase = :base
           GROUP BY wuSimilar
           ORDER BY score DESC

这基本上是搜索,所以我可以使用Hibernate Search,但不确定它是不是一种矫枉过正。或者,我对像ElasticSearch这样的东西持开放态度,在这种情况下,问题是,是否需要为这一个案例提供它?我可能不会在这个项目中进行另一次搜索。

1 个答案:

答案 0 :(得分:0)

我非常接近,我过分依赖我的SQL知识。 JPQL仅对声明的实体关系使用JOIN

选择WHERE中表达式定义的列表时,必须使用逗号连接。

       SELECT wuSimilar, COUNT(*) AS score FROM WorkUnit wuBase 
           LEFT JOIN wuBase.tags AS wubTags
           , WorkUnit wuSimilar
           WHERE wuBase = :base AND wubTags IN (wuSimilar.tags)
           GROUP BY wuSimilar
           ORDER BY score DESC

似乎工作,去测试。