1 回答

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ù)。所以,這不是您需要的。
添加回答
舉報(bào)