BigDecimal上的Hibernate搜索和范围查询

Seb*_*ien 1 java lucene search hibernate hibernate-search

我很难设计一个查询来搜索Item类的所有实例,价格在100到200之间.

这是我的Item类:

@Entity
public class Item {
    @Id @DocumentId
    Long id

    @Field(index = Index.UN_TOKENIZED, store = Store.YES)
    @NumericField
    @FieldBridge(impl = BigDecimalNumericFieldBridge.class)
    BigDecimal price = BigDecimal.ZERO
}
Run Code Online (Sandbox Code Playgroud)

BigDecimalNumericFieldBridge是这里描述的类:https://hibernate.onjira.com/secure/attachment/15952/proposed_doc.txt

卢克告诉我,我有几份价格在100到200之间的文件.

这是我的查询:

FullTextSession fullTextSession = Search.getFullTextSession(session);
final QueryBuilder queryBuilder =     fullTextSession.getSearchFactory().buildQueryBuilder().forEntity(Item).get();

Query rootQuery = queryBuilder.bool()
    .must(queryBuilder.range().onField('price').above(100).createQuery())
    .must(queryBuilder.range().onField('price').below(200).createQuery())
    .createQuery();

FullTextQuery ftq = fullTextSession.createFullTextQuery(rootQuery, Item);
List<Item> instanceList = ftq.list();
Run Code Online (Sandbox Code Playgroud)

但无论边界如何,列表总是空的.我知道我做错了什么?

顺便说一句,我正在使用Hibernate Search 3.4.1和Hibernate 3.6.10.

Seb*_*ien 5

事实上,我的查询方式出错了.Hibernate Search是特定于类型的,并且我的值存储为long,我也需要查询long.而且我必须将值乘以100,因为这是桥中的乘数:

Query rootQuery = queryBuilder.bool()
    .must(queryBuilder.range().onField('price').above(10000L).createQuery())
    .must(queryBuilder.range().onField('price').below(20000L).createQuery())
    .createQuery();
Run Code Online (Sandbox Code Playgroud)

有关单元测试的更详细解答,请参阅Hibernate论坛上的这篇文章:https://forum.hibernate.org/viewtopic.php?p = 2457657#p2457657