NumericRangeQuery与TermRangeQuery取决于IndexedEmbedded

时间:2016-07-20 02:17:01

标签: java hibernate indexing lucene hibernate-search

使用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来索引一个嵌套字段,而另一个直接索引该字段作为索引对象的一部分。

0 个答案:

没有答案