2013-02-16 18 views
0

我想查询与给定实体(相同类型)相似的实体。 相似性(在最简单的情况下)定义为成员集合中相同项目的数量。JPQL/HQL:通过与样本的相似性对实体进行排序?

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这样的事情开放,在这种情况下,问题是,是否仅仅为了这种情况而付出代价?我不会在这个项目中再次搜索。

回答

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 

似乎工作,将要测试。

+0

我会使用Hibernate Search,它是为此设计的,比超级连接解决方​​案效率高很多。同样重要的是,您可以获得自动标记功能和自然语言处理功能,以更好地控制相似性功能。 – Sanne 2014-09-16 17:49:07

相关问题