使用hibernate search 5.3,我有一个嵌套字段上的日期,该字段在自定义getter方法中使用indexedembedded进行注释,并且在该对象中,有一个我想要编入索引的日期。当我使用带有@Field(analyze = Analyze.NO)和@DateBridge(resolution = Resolution.DAY)的indexedembedded字段时,创建查询会创建一个TermRangeQuery,但是当我将另一个自定义getter添加到索引的对象时,它会返回确切的相同的日期对象并注释具有日期桥和字段的getter与创建NumericRangeQuery的嵌套的相同。有谁知道为什么会发生这种情况?
情况A:
@Indexed
Object A {
List ObjectB
@IndexedEmbedded
getFirstObjectB()
}
Object B {
Timestamp timestamp
@Field(analyze=Analyze.NO)
@DateBridge(resolution=Resolution.DAY)
java.util.Date getDate(){
return change timestamp to Date
}
}
情况B:
@Indexed
Object A {
List ObjectB
getFirstObjectB()
@Field(analyze=Analyze.NO)
@DateBridge(resolution=Resolution.DAY)
java.util.Date getObjectBDate() {
return getFirstObjectB().getDate();
}
}
Object B {
Timestamp timestamp
java.util.Date getDate(){
return change timestamp to Date
}
}
在情境A中,在字段" firstObjectB.date"上创建查询时(hibernate search的默认命名)创建的查询是TermRangeQuery。在第二个中,在" objectBDate"上创建查询。 (也是默认命名)创建NumericRangeQuery。它们应该返回通过完全相同的代码路径检索的完全相同的对象。我能说的唯一区别是,一个使用indexedembedded来索引一个嵌套字段,而另一个直接索引该字段作为索引对象的一部分。