簡體   English   中英

Hibernate-search 按數字列表搜索

[英]Hibernate-search search by list of numbers

我正在使用具有索引的數字字段的實體的休眠搜索 Java 應用程序:

@Field
@NumericField
private Long orgId;

我想獲取與該屬性的 Long 值列表匹配的實體列表。 我使用了“simpleQueryString”,因為它允許將“OR”邏輯與 char | 一起使用。 對於幾個客觀值。 我有這樣的事情:

queryBuilder.simpleQueryString().onField("orgId").matching("1|3|8").createQuery()

運行 mi 應用程序后,我得到:

指定的查詢“+(orgId:1 orgId:3 orgId:8)”包含一個基於字符串的子查詢,該查詢以數字編碼字段“orgId”為目標。 檢查您的查詢或嘗試限制目標實體。

那么,有人可以告訴我這段代碼有什么問題嗎?還有其他方法可以做我需要的嗎?

================================== 更新1:

yrodiere 的回答解決了這個問題,但我還有一個疑問,我想驗證實體是否與其他字段匹配,我知道我可以使用 BooleanJuntion,但是我需要混合使用“必須”和“應該”的用法對嗎? 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() );

然后,我正在驗證實體必須與“名稱”匹配,並且它們與給定的 orgId 之一匹配,對嗎?

正如錯誤消息所說:

指定的查詢 [...] 包含一個基於字符串的子查詢,它以數字編碼字段“orgId”為目標。

simpleQueryString只能用於定位文本字段。 不支持數字字段。

如果您的字符串是以編程方式生成的,並且您有一個整數列表,那么您需要執行以下操作:

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字段包含138的文檔。

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

編輯:如果您需要附加條款,我建議不要在同一個 boolean 結中混合必須和應該,而是嵌套 boolean 結。

例如:

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();

從技術上講,您可以混合使用“必須”和“應該”,但效果不會是您所期望的:“應該”子句將成為可選的,並且只會在匹配時提高文檔的分數。 所以,這里不是你需要的。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM