为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

慕容森 2021-06-15 17:01:27
是否有可能写在一个范围查询休眠搜索与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,这可能吗?
查看完整描述

1 回答

?
浮云间

TA贡献1829条经验 获得超4个赞

您尝试执行的是关系查询。Hibernate Search 不支持此类查询。可以通过依赖 Lucene 中较低级别的 API 来实现它们,但老实说,我不建议这样做,除非对 Lucene 专家来说:它不容易使用,应该仔细分析性能影响。


通常,您将如何解决此类问题是索引一个附加字段,例如“minimumStockDifference”,并检查它是否大于零:


@Indexed

@Entity

public 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 查询。


查看完整回答
反对 回复 2021-06-17
  • 1 回答
  • 0 关注
  • 98 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信