protected CompassQuery buildQuery(CompassSearchCommand criteria, CompassSession session) { if (criteria.getCompassQuery() != null) { return criteria.getCompassQuery(); } CompassQueryBuilder queryBuilder = session.queryBuilder(); Long userId = SecurityContextUtils.getUserInContext().getId(); List magazines = SecurityContextUtils.getMagazinesInContext(); CompassQuery ceQuery = queryBuilder.bool() .addMust(queryBuilder.term("EditedArticleBean.magazine.chiefEditor.id", userId)) .toQuery(); CompassQuery editorQuery = queryBuilder.bool() .addMust(queryBuilder.alias("EditedArticleBean")) .addMust(queryBuilder.term("EditedArticleBean.editor.id", userId)) .toQuery(); CompassQuery authorQuery = queryBuilder.bool() .addMust(queryBuilder.alias("BaseArticleBean")) .addMust(queryBuilder.term("BaseArticleBean.author.id", userId)) .toQuery(); CompassQuery query = null; CompassQuery baseQuery = queryBuilder.queryString(criteria.getQuery().trim()).toQuery(); if (0 == magazines.size()) { query = queryBuilder.bool().addMust(baseQuery).addMust(authorQuery).toQuery(); } else { boolean isCE = false; CompassQueryBuilder.CompassBooleanQueryBuilder qb = queryBuilder.bool().addMust(baseQuery); for (Magazine mag: magazines) { if (mag.getChiefEditor().getId() == userId) { isCE = true; break; } } if (isCE) { query = qb .addMust(queryBuilder.bool() .addShould(authorQuery) .addShould(editorQuery) .addShould(ceQuery) .toQuery()) .toQuery(); } else { query = qb .addMust(queryBuilder.bool() .addShould(authorQuery) .addShould(editorQuery) .toQuery()) .toQuery(); } } return query; }