第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

為了賬號(hào)安全,請(qǐng)及時(shí)綁定郵箱和手機(jī)立即綁定
已解決430363個(gè)問(wèn)題,去搜搜看,總會(huì)有你想問(wèn)的

Hibernate-search 按數(shù)字列表搜索

Hibernate-search 按數(shù)字列表搜索

大話西游666 2023-09-20 17:24:46
我正在 Hibernate 搜索 Java 應(yīng)用程序中工作,該應(yīng)用程序具有一個(gè)具有索引數(shù)字字段的實(shí)體:@Field@NumericFieldprivate Long orgId;我想獲取與此屬性的 Long 值列表匹配的實(shí)體列表。我使用“simpleQueryString”,因?yàn)樗试S使用“OR”邏輯與 char | 對(duì)于幾個(gè)客觀價(jià)值。我有這樣的事情:queryBuilder.simpleQueryString().onField("orgId").matching("1|3|8").createQuery()運(yùn)行 mi 應(yīng)用程序后我得到:指定的查詢“+(orgId:1 orgId:3 orgId:8)”包含基于字符串的子查詢,其目標(biāo)是數(shù)字編碼字段“orgId”。檢查您的查詢或嘗試限制目標(biāo)實(shí)體。那么,有人可以告訴我這段代碼有什么問(wèn)題嗎?還有其他方法可以滿足我的需要嗎?===================================更新1:yrodiere'的答案解決了這個(gè)問(wèn)題,但我還有另一個(gè)疑問(wèn),我想驗(yàn)證實(shí)體是否與其他字段匹配,我知道我可以使用BooleanJuntion,但是我需要混合“必須”和“應(yīng)該”用法,對(duì)吧?IE:BooleanJunction<?> bool = queryBuilder.bool();for (Integer orgId: orgIds) {   bool.should( queryBuilder.keyword().onField("orgId").matching(orgId).createQuery() );}bool.must(queryBuilder.keyword().onField("name").matching("anyName").createQuery() );然后,我驗(yàn)證實(shí)體必須與“名稱”匹配,并且它們還與給定的 orgId 之一匹配,我說(shuō)得對(duì)嗎?
查看完整描述

1 回答

?
烙印99

TA貢獻(xiàn)1829條經(jīng)驗(yàn) 獲得超13個(gè)贊

正如錯(cuò)誤消息所說(shuō):


指定的查詢 [...] 包含基于字符串的子查詢,其目標(biāo)是數(shù)字編碼字段“orgId”。


simpleQueryString只能用于定位文本字段。不支持?jǐn)?shù)字字段。


如果您的字符串是通過(guò)編程生成的,并且您有一個(gè)整數(shù)列表,那么您需要執(zhí)行以下操作:


List<Integer> orgIds = Arrays.asList(1, 3, 8);


BooleanJunction<?> bool = queryBuilder.bool();

for (Integer orgId: orgIds) {

   bool.should( queryBuilder.keyword().onField("orgId").matching(orgId).createQuery() );

}

LuceneQuery query = bool.createQuery();

query將匹配字段orgId包含1, 3OR的文檔8。


請(qǐng)參閱https://docs.jboss.org/hibernate/search/5.11/reference/en-US/html_single/#_combining_queries


編輯:如果您需要其他子句,我建議不要在同一個(gè)布爾連接中混合“must”和“should”,而是嵌套布爾連接。


例如:


BooleanJunction<?> boolForOrgIds = queryBuilder.bool();

for (Integer orgId: orgIds) {

   boolForOrgIds.should(queryBuilder.keyword().onField("orgId").matching(orgId).createQuery());

}



BooleanJunction<?> boolForWholeQuery = queryBuilder.bool();

boolForWholeQuery.must(boolForOrgIds.createQuery());

boolForWholeQuery.must(queryBuilder.keyword().onField("name").matching("anyName").createQuery());

// and add as many "must" as you need

LuceneQuery query = boolForWholeQuery.createQuery();

從技術(shù)上講,你可以混合使用“must”和“should”,但效果不會(huì)是你所期望的:“should”子句將成為可選的,并且只會(huì)在匹配時(shí)提高文檔的分?jǐn)?shù)。所以,這不是您需要的。


查看完整回答
反對(duì) 回復(fù) 2023-09-20
  • 1 回答
  • 0 關(guān)注
  • 88 瀏覽
慕課專欄
更多

添加回答

舉報(bào)

0/150
提交
取消
微信客服

購(gòu)課補(bǔ)貼
聯(lián)系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動(dòng)學(xué)習(xí)伙伴

公眾號(hào)

掃描二維碼
關(guān)注慕課網(wǎng)微信公眾號(hào)