猿问

休眠搜索,过滤器高于其他过滤器

是否有可能写在一个范围查询休眠搜索与above使用其他领域?如果我尝试使用字符串会引发错误:


private BooleanJunction addInCriticalStock(QueryBuilder queryBuilder, BooleanJunction booleanJunction, boolean inCriticalStock) {

    return booleanJunction

            .must(queryBuilder

                    .range()

                    .onField("currentStock")

                    .above("minimumStock") // This is other field, also "@minimumStock"

                    .createQuery()

            );

}

我一直在搜索问题和休眠文档,但所有示例都带有固定值字段,si,这可能吗?


慕容森
浏览 99回答 1
1回答

浮云间

您尝试执行的是关系查询。Hibernate Search 不支持此类查询。可以通过依赖 Lucene 中较低级别的 API 来实现它们,但老实说,我不建议这样做,除非对 Lucene 专家来说:它不容易使用,应该仔细分析性能影响。通常,您将如何解决此类问题是索引一个附加字段,例如“minimumStockDifference”,并检查它是否大于零:@Indexed@Entitypublic class Product {  private int minimumStock;  private int currentStock;  @Transient  @Field  public int getMinmumStockDifference() {    return currentStock - minimumStock;  }}然后你的查询变成:private BooleanJunction addInCriticalStock(QueryBuilder queryBuilder, BooleanJunction booleanJunction, boolean inCriticalStock) {    return booleanJunction            .must(queryBuilder                    .range()                    .onField("minimumStockDifference")                    .above(0)                    .createQuery()            );}请注意,如果您必须minimumStock从另一个实体获取数据,请根据需要添加@ContainedIn注释,以便您的Product实体在minimumStock更改时重新索引。请注意,如果您不需要在同一查询中进行全文搜索,您可以简单地不使用 Hibernate Search 进行该查询,而是通过HQL/JPQL或标准 API依赖 Hibernate ORM 查询。
随时随地看视频慕课网APP

相关分类

Java
我要回答