У меня есть полнотекстовый запрос, который по совету из предыдущего вопроса я отфильтровал с помощью запроса Id. По какой-то причине запрос не запускается (я уверен, что он был запущен раньше, но ...) Кто-нибудь может понять почему?
Class<?> entityClass = entityType.getJavaType();
List<String> fields = buildFields(entityType.getProperties());
FullTextEntityManager fullTextEntityManager = Search.getFullTextEntityManager(getEntityManager());
SearchFactory searchFactory = fullTextEntityManager.getSearchFactory();
QueryContextBuilder queryContextBuilder = searchFactory.buildQueryBuilder();
QueryBuilder queryBuilder = queryContextBuilder.forEntity(entityClass).get();
CriteriaBuilder idBuilder = m_storage.getCriteriaBuilder();
CriteriaQuery idQuery = idBuilder.createQuery(entityClass);
Root from = idQuery.from(entityClass);
idQuery.select(from.get("OID"));
Subquery<Long> subquery = idQuery.subquery(Long.class);
Root dateSQ = subquery.from(entityClass);
subquery.select(idBuilder.max(dateSQ.get("modDateTime")));
subquery.groupBy(dateSQ.get("surname"));
idQuery.where(idBuilder.in(from.get("modDateTime")).value(subquery));
TypedQuery typedQuery = m_storage.createQuery(idQuery);
List<Long> ids = typedQuery.getResultList();
BooleanJunction<?> idJunction = queryBuilder.bool();
for (Long id : ids) {
idJunction.must(queryBuilder.keyword().onField("recId").matching(id).createQuery());
}
SearchOption searchOption = uriInfo.getSearchOption();
Query query = queryBuilder.bool()
.must(processSearchExpression(searchOption.getSearchExpression(), queryBuilder,
fields.toArray(new String[fields.size()]))).filteredBy(idJunction.createQuery())
.createQuery();
FullTextQuery fullTextQuery = fullTextEntityManager.createFullTextQuery(query, entityClass);
return fullTextQuery;
//fullTextQuery fails to run
Если я уберу фильтр и так
query = queryBuilder.bool()
.must(processSearchExpression(searchOption.getSearchExpression(), queryBuilder,
fields.toArray(new String[fields.size()])))
.createQuery();
Запрос выполняется, но, очевидно, не фильтруется по идентификаторам. В фильтре есть идентификаторы. Когда я устанавливаю для showSQL значение true, я вижу запрос, если у меня нет фильтра, но не отображается запрос, когда у меня есть фильтр (но не выдается ошибка)
Кажется, я не могу найти никаких проблем?!