Я работаю в приложении Hibernate-search, Java с сущностью, для которой индексированное числовое поле:
@Field
@NumericField
private Long orgId;
Я хочу получить список сущностей, которые соответствуют списку длинных значений дляэто свойство. Я использовал "simpleQueryString", потому что он позволяет использовать логику "ИЛИ" с char |для нескольких объективных ценностей. У меня есть что-то вроде этого:
queryBuilder.simpleQueryString().onField("orgId").matching("1|3|8").createQuery()
После запуска приложения mi я получаю:
Указанный запрос '+ (orgId: 1 orgId: 3 orgId: 8)' содержитСтроковый подзапрос, который нацелен на числовое кодированное поле (поля) orgId. Проверьте свой запрос или попробуйте ограничить целевые объекты.
Итак, может ли кто-нибудь сказать мне, что не так с этим кодом ?, Есть ли другой способ сделать то, что мне нужно?.
======================================== ОБНОВЛЕНИЕ 1:
yrodiere 'ответ решает проблему,но у меня есть еще одно сомнение, я хочу проверить, соответствуют ли сущности другим полям, я знаю, что могу использовать BooleanJuntion, но тогда мне нужно смешивать выражения «должен» и «должен», верно? то есть:
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() );
Затем я проверяю, что сущности должны соответствовать «имени», а также они соответствуют одному из заданных orgIds, я прав?