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

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

Hibernate Search java spring,僅搜索具有指定ID的實體

Hibernate Search java spring,僅搜索具有指定ID的實體

肥皂起泡泡 2022-12-15 16:48:22
當我想搜索具有特定 ID 的實體時遇到問題。我有我執行的 fullTextQuery,它工作正常,當我想說僅在這些實體中搜索(提供的 ID 列表):+(title:slovakia~2 leadText:slovakia~2 body:slovakia~2 software:slovakia~2) +verified:true +eid:(113 | 112 | 3)然后我得到 0 個結果,這些實體被索引并持久化,一切都應該正常工作,但它沒有返回任何結果。這是定義的實體屬性:@Id@GeneratedValue@Field(name = "eid")@FieldBridge(impl = LongBridge.class)private long id;我試過,沒有場橋,有 TermVector.YES 也沒有任何額外的 @Field.. 注釋。所有結果要么異常,要么就是沒有結果。搜索特定 ID 的正確方法是什么?例如這里是工作查詢:查詢的創建如下所示:    return Optional.of(getQueryBuilder()             .keyword()             .onField("eid")             .matching(stringBuilder.toString())             .createQuery());
查看完整描述

2 回答

?
繁星點點滴滴

TA貢獻1803條經驗 獲得超3個贊

您嘗試使用的語法(113 | 112 | 3)在此上下文中不正確。不解釋查詢的參數keyword,特別是不支持運算符。


使用與任何提供的 ID 匹配的布爾連接:


List<String> eids = ...;


QueryBuilder qb = getQueryBuilder();


BooleanJunction<?> idJunction = qb.bool();


for (String eid : eids) {

    idJunction.should(

            qb.keyword()

                .onField("eid")

                .matching(eid)

                .createQuery()

    );

}


return idJunction.createQuery();

請注意,如果您想添加其他查詢,則不應使用相同的連接點。使用另一個連接idJunction.createQuery()作為其子句之一。


查看完整回答
反對 回復 2022-12-15
?
一只甜甜圈

TA貢獻1836條經驗 獲得超5個贊

從我對 hibernate-search 的一點經驗來看,只有 Ranges 似乎適用于整數和長字段。在您此處的示例中,我希望以下查詢可以正常工作:


QueryBuilder qb = getQueryBuilder();

BooleanJunction<?> idJunction = qb.bool();

 bool.must(NumericRangeQuery.newLongRange("eid", Long.valueOf(eid), Long.valueOf(eid), true, true).createQuery();

Long.valueOf()在這種情況下,如果提供的值已經是 Long 值,則 Boxed是可選的。


查看完整回答
反對 回復 2022-12-15
  • 2 回答
  • 0 關注
  • 122 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

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

幫助反饋 APP下載

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

公眾號

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