亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

休眠搜索,過濾器高于其他過濾器

休眠搜索,過濾器高于其他過濾器

慕容森 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 關注
  • 112 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號