@Override public List<DocumentationItem> searchDocumentation(CoreSession session, String distribId, String fulltext, String targetType) { DistributionSnapshot snap = Framework.getService(SnapshotManager.class).getSnapshot(distribId, session); DocumentModel dist = ((RepositoryDistributionSnapshot) snap).getDoc(); String query = QueryHelper.select(DocumentationItem.TYPE_NAME, dist, NXQL.ECM_FULLTEXT, fulltext); if (targetType != null) { query += " AND " + DocumentationItem.PROP_TARGET_TYPE + " = " + NXQL.escapeString(targetType); } ElasticSearchService ess = Framework.getService(ElasticSearchService.class); DocumentModelList docs = ess.query(new NxQueryBuilder(session).nxql(query).limit(MAX_RESULTS)); List<DocumentationItem> result = new ArrayList<>(); for (DocumentModel doc : docs) { DocumentationItem docItem = doc.getAdapter(DocumentationItem.class); if (docItem != null) { result.add(docItem); } } return result; }
@Override public List<NuxeoArtifact> searchArtifact(CoreSession session, String distribId, String fulltext) { List<NuxeoArtifact> result = new ArrayList<>(); DistributionSnapshot snap = Framework.getService(SnapshotManager.class).getSnapshot(distribId, session); if (!(snap instanceof RepositoryDistributionSnapshot)) { return Collections.emptyList(); } DocumentModel dist = ((RepositoryDistributionSnapshot) snap).getDoc(); StrBuilder q = new StrBuilder("SELECT * FROM Document WHERE "); q.append("ecm:path STARTSWITH '").append(dist.getPathAsString()).append("'"); String query = q.toString(); if (fulltext != null) { query += " AND " + NXQL.ECM_FULLTEXT + " = " + NXQL.escapeString(fulltext); } ElasticSearchService ess = Framework.getService(ElasticSearchService.class); DocumentModelList docs = ess.query(new NxQueryBuilder(session).nxql(query).limit(MAX_RESULTS)); for (DocumentModel doc : docs) { NuxeoArtifact artifact = mapDoc2Artifact(doc); if (artifact != null) { result.add(artifact); } } return result; }
/** * Execute paginated query on ES. * * @param session * @param nxql * @param currentPageIndex * @param pageSize * @return DocumentModelList fetched from Es or from DB */ public static DocumentModelList query(CoreSession session, String nxql, int currentPageIndex, int pageSize, boolean fetchDocFromEs) { // Builder NxQueryBuilder qB = new NxQueryBuilder(session).nxql(nxql); // Fetch documents from Es if (fetchDocFromEs) { qB.fetchFromElasticsearch(); } else { qB.fetchFromDatabase(); } // Pagination if (pageSize > 0 && currentPageIndex >= 0) { qB.offset(currentPageIndex * pageSize); qB.limit(pageSize); } else { qB.limit(DEFAULT_MAX_RESULT_SIZE); } // Query return getElasticSearchService().query(qB); }