我正在使用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 ,并在查询中匹配所有类的索引即可。但这似乎效率很低。
有没有人有更好的方法呢?
答案 0 :(得分:1)
我有2个类INDEXING和DATA_PROPERTY。没有关联 其中2个。我不能改变它们或创建一个新类 将他们中的2人联系起来。
在这种情况下,你在岩石和坚硬的地方之间。您需要以某种方式关联记录,最明显的选择是通过关联。此外,您无法将SQL连接与Lucene提供的基于自由文本的索引进行比较。
一个可能的解决方案是编写一个自定义网桥,在索引时执行连接并索引相关数据,以便您可以通过查询直接定位它。这是否适合您将取决于您的使用案例。在您的示例设置中,我没有看到任何可以从自由文本搜索中受益的字段。我只能假设您只显示部分代码。如果没有,为什么不坚持使用SQL?