Hibernate搜索类的查询

时间:2014-05-28 07:48:28

标签: java hibernate hibernate-search

我正在使用hibernate search 4.4.0。我最近遇到了一个问题。

例如,我有2个类INDEXING和DATA_PROPERTY。其中2个之间没有关联。我无法改变它们或创建一个新类来关联它们中的两个。

Lucene索引的一部分:

mapping.entity(DatatypeProperty.class).indexed().providedId()
       .property("rdfResource",ElementType.FIELD).field().analyze(Analyze.NO).store(Store.YES)
       .property("partitionValue", ElementType.FIELD).field().analyze(Analyze.NO)

mapping.entity(Indexing.class).indexed().providedId()
       .property("rdfResource",ElementType.FIELD).field().analyze(Analyze.NO).store(Store.YES)

现在在SQL中,我使用

SELECT IND.RDF_RESOURCE 
FROM INDEXING IND, DATA_PROPERTY DP
WHERE IND.RDF_RESOURCE = DP.RDF_RESOURCE
AND IND.OBJECT_TYPE_ID_INDEXED IN (........)
AND DP.PARTITION_VALUE IN (......)
AND .......

如何在Hibernate Search中翻译 IND.RDF_RESOURCE = DP.RDF_RESOURCE

我想也许我可以使用查询找到类 DatatypeProperty 的所有 RDF_RESOURCE ,并在查询中匹配所有类的索引即可。但这似乎效率很低。

有没有人有更好的方法呢?

1 个答案:

答案 0 :(得分:1)

  

我有2个类INDEXING和DATA_PROPERTY。没有关联   其中2个。我不能改变它们或创建一个新类   将他们中的2人联系起来。

在这种情况下,你在岩石和坚硬的地方之间。您需要以某种方式关联记录,最明显的选择是通过关联。此外,您无法将SQL连接与Lucene提供的基于自由文本的索引进行比较。

一个可能的解决方案是编写一个自定义网桥,在索引时执行连接并索引相关数据,以便您可以通过查询直接定位它。这是否适合您将取决于您的使用案例。在您的示例设置中,我没有看到任何可以从自由文本搜索中受益的字段。我只能假设您只显示部分代码。如果没有,为什么不坚持使用SQL?