public long getCollectionSize(String collectionName) { QueryManager queryMgr = getClient().newQueryManager(); StringQueryDefinition def = queryMgr.newStringDefinition(); def.setCollections(collectionName); SearchHandle sh = queryMgr.search(def, new SearchHandle()); return sh.getTotalResults(); }
@Override public boolean start() throws IOException { MarkLogicConnection connection = (MarkLogicConnection) getCurrentSource(); result = new ResultWithLongNB(); connectionClient = connection.connect(container); if (connectionClient == null) { return false; } docManager = connectionClient.newDocumentManager(); boolean isDocContentFieldPresent = (settings.outputSchema.getFields().size() >= 2); if (isDocContentFieldPresent) { docContentField = settings.outputSchema.getFields().get(1); } docContentReader = new DocContentReader(docManager, settings.outputSchema, docContentField); if (settings.useQueryOption && StringUtils.isNotEmpty(settings.queryOptionName)) { prepareQueryOption(); } queryManager = connectionClient.newQueryManager(); stringQueryDefinition = (settings.useQueryOption) ? queryManager.newStringDefinition(settings.queryOptionName) : queryManager.newStringDefinition(); stringQueryDefinition.setCriteria(settings.criteria); searchHandle = queryManager.search(stringQueryDefinition, new SearchHandle()); matchedDocuments = searchHandle.getTotalResults(); pageSize = (settings.pageSize <= 0) ? matchedDocuments : settings.pageSize; maxRetrieve = settings.maxRetrieve; //if < 0 - it will be ignored queryManager.setPageLength(pageSize); documentCounter = 1; readNextPage(); return (matchedDocuments > 0); }
@Override public boolean start() throws IOException { MarkLogicConnection connection = (MarkLogicConnection) getCurrentSource(); result = new ResultWithLongNB(); connectionClient = connection.connect(container); if (connectionClient == null) { return false; } docManager = connectionClient.newDocumentManager(); boolean isDocContentFieldPresent = (settings.outputSchema.getFields().size() >= 2); if (isDocContentFieldPresent) { docContentField = settings.outputSchema.getFields().get(1); } docContentReader = new DocContentReader(docManager, settings.outputSchema, docContentField); if (settings.useQueryOption && StringUtils.isNotEmpty(settings.queryOptionName)) { prepareQueryOption(); } queryManager = connectionClient.newQueryManager(); stringQueryDefinition = (settings.useQueryOption) ? queryManager.newStringDefinition(settings.queryOptionName) : queryManager.newStringDefinition(); stringQueryDefinition.setCriteria(settings.criteria); searchHandle = queryManager.search(stringQueryDefinition, new SearchHandle()); matchedDocuments = searchHandle.getTotalResults(); pageSize = (settings.pageSize <= 0) ? matchedDocuments : settings.pageSize; maxRetrieve = settings.maxRetrieve; //if < 0 - it will be ignored queryManager.setPageLength(pageSize); documentCounter = 1; readNextPage(); return (matchedDocuments > 0); }
@Override public JobExecution getJobExecution(Long executionId) { JobExecution jobExec = null; StructuredQueryBuilder qb = new StructuredQueryBuilder(SEARCH_OPTIONS_NAME); StructuredQueryDefinition querydef = qb.rangeConstraint("jobExecutionId", Operator.EQ, executionId.toString()); QueryManager queryMgr = databaseClient.newQueryManager(); SearchHandle results = queryMgr.search(querydef, new SearchHandle()); if (results.getTotalResults() > 0L) { MatchDocumentSummary[] summaries = results.getMatchResults(); JAXBHandle<MarkLogicJobInstance> handle = new JAXBHandle<>(jaxbContext()); MarkLogicJobInstance mji = summaries[0].getFirstSnippet(handle).get(); if (mji.getJobExecutions().size() >= 1) { for (JobExecution je : mji.getJobExecutions()) { if (je.getId().equals(executionId)) { jobExec = je; } } } } return jobExec; }
@Override public int getJobInstanceCount(String jobName) throws NoSuchJobException { StructuredQueryBuilder qb = new StructuredQueryBuilder(SEARCH_OPTIONS_NAME); StructuredQueryDefinition querydef = qb.and( qb.valueConstraint("jobName", jobName), qb.collection(COLLECTION_JOB_INSTANCE) ); QueryManager queryMgr = databaseClient.newQueryManager(); SearchHandle results = queryMgr.search(querydef, new SearchHandle()); int count = (int) results.getTotalResults(); if (count == 0) { throw new NoSuchJobException(jobName + " not found"); } else { return count; } }
queryMgr.search(querydef, resultsHandle); totalResults = resultsHandle.getTotalResults();
assertEquals(0, results.getTotalResults());
private void check(StructureWriteHandle handle, String optionsName) { QueryManager queryMgr = Common.client.newQueryManager(); queryMgr.setPageLength(0); RawCombinedQueryDefinition query = queryMgr.newRawCombinedQueryDefinition(handle); SearchHandle response = queryMgr.search(query, new SearchHandle()); String wrappedCtsQuery = response.getQuery(new StringHandle()).get(); // remove the <search:query> wrapper element String ctsQuery = wrappedCtsQuery.replaceAll("</?search:query[^>]*>", ""); long numMatches = response.getTotalResults(); checkCts(new StringHandle(ctsQuery), optionsName, numMatches); }
client.newDocumentManager().writeAs(collection + "/test2.txt", meta, "text"); client.newDocumentManager().writeAs(collection + "/test3.txt", meta, "text"); assertEquals(3, client.newQueryManager().search(collectionQuery, new SearchHandle()).getTotalResults()); assertEquals(0, client.newQueryManager().search(collectionQuery, new SearchHandle()).getTotalResults());
assertEquals(uris.size(), queryMgr.search(collectionQuery, new SearchHandle()).getTotalResults()); assertEquals(0, queryMgr.search(collectionQuery, new SearchHandle()).getTotalResults());
@Test public void testRangeConstraintRelativeBucket() throws KeyManagementException, NoSuchAlgorithmException, IOException { DatabaseClient client = getDatabaseClient("rest-admin", "x", getConnType()); // write docs for (String filename : filenames) { writeDocumentReaderHandle(client, filename, "/range-constraint-rel-bucket/", "XML"); } // write the query options to the database setQueryOption(client, queryOptionName); // run the search SearchHandle resultsHandle = runSearch(client, queryOptionName, "date:older"); // search result String result = "Matched " + resultsHandle.getTotalResults(); String expectedResult = "Matched 5"; assertEquals("Document match difference", expectedResult, result); // release client client.release(); }
assertEquals("Count of documents outside of the transaction",0,outOfTransactionResults.getTotalResults()); assertEquals("Count of documents inside of the transaction", 2, inTransactionResults.getTotalResults());
@Test public void testFieldConstraint() throws KeyManagementException, NoSuchAlgorithmException, IOException { DatabaseClient client = getDatabaseClient("rest-admin", "x", getConnType()); // write docs for (String filename : filenames) { writeDocumentReaderHandle(client, filename, "/field-constraint/", "XML"); } // write the query options to the database setQueryOption(client, queryOptionName); // run the search SearchHandle resultsHandle = runSearch(client, queryOptionName, "summary:Louisiana AND summary:sweet"); // search result String matchResult = "Matched " + resultsHandle.getTotalResults(); String expectedMatchResult = "Matched 1"; assertEquals("Match results difference", expectedMatchResult, matchResult); String result = returnSearchResult(resultsHandle); String expectedResult = "|Matched 3 locations in /field-constraint/bbq3.xml"; assertEquals("Results difference", expectedResult, result); // release client client.release(); }
searchHandleEx.append(ex); long res = results.getTotalResults(); System.out.println("No query results available. Total Results should be zero: " + res); assertTrue("Exception should not have been thrown when no query results are available", searchHandleEx.toString().isEmpty());
@Test public void testQueryBatcher() { client.newDocumentManager().writeAs(collection + "/test1.json", meta, "[true]"); client.newDocumentManager().writeAs(collection + "/test1.xml", meta, "<xml/>"); client.newDocumentManager().writeAs(collection + "/test1.txt", meta, "text"); assertEquals(3, client.newQueryManager().search(collectionQuery, new SearchHandle()).getTotalResults()); StructuredQueryDefinition query = collectionQuery; // begin copy from "Using QueryBatcher" in src/main/java/com/marklogic/datamovement/package-info.java QueryBatcher qhb = dataMovementManager.newQueryBatcher(query) .withBatchSize(1000) .withThreadCount(20) .withConsistentSnapshot() .onUrisReady(batch -> { for ( String uri : batch.getItems() ) { if ( uri.endsWith(".txt") ) { client.newDocumentManager().delete(uri); } } }) .onQueryFailure(queryBatchException -> queryBatchException.printStackTrace()); JobTicket ticket = dataMovementManager.startJob(qhb); qhb.awaitCompletion(); dataMovementManager.stopJob(ticket); // end copy from "Using QueryBatcher" in src/main/java/com/marklogic/datamovement/package-info.java SearchHandle results = client.newQueryManager().search(collectionQuery, new SearchHandle()); assertEquals(2, results.getTotalResults()); for ( MatchDocumentSummary match : results.getMatchResults() ) { assertTrue(match.getUri().matches(".*/test1.(json|xml)")); } }
@Test public void xmlQbe() { XMLDocumentManager xdm = Common.client.newXMLDocumentManager(); QueryManager qm = Common.client.newQueryManager(); String queryAsString = "<q:qbe xmlns:q='http://marklogic.com/appservices/querybyexample'>" + "<q:query>" + "<kind>bird</kind>" + "</q:query>" + "</q:qbe>"; RawQueryByExampleDefinition query = qm.newRawQueryByExampleDefinition(new StringHandle(queryAsString).withFormat(Format.XML)); StringHandle report = qm.validate(query, new StringHandle()); System.out.println(report.toString()); SearchHandle results = qm.search(query, new SearchHandle()); assertEquals("No XML results should have matched", results.getTotalResults(), 0); DocumentPage documents = xdm.search(query, 1); assertEquals("No XML documents should have matched", documents.getTotalSize(), 0); documents = xdm.search(query, 1, new DOMHandle()); assertEquals("No XML documents should have matched", documents.getTotalSize(), 0); }
SearchHandle inDefaultDbResults = queryMgr1.search(directoryQuery1, new SearchHandle()); assertEquals("Count of documents in runtime db", 12, inRuntimeDbResults.getTotalResults()); assertEquals("Count of documents in default db", 0, inDefaultDbResults.getTotalResults()); }catch(Exception e){ System.out.println(e.getMessage());
private void checkCts(CtsQueryWriteHandle handle, String optionsName, long numMatches) { RawCtsQueryDefinition rawCtsQueryDefinition; if (optionsName == null) { rawCtsQueryDefinition = queryMgr.newRawCtsQueryDefinition(handle); } else { rawCtsQueryDefinition = queryMgr.newRawCtsQueryDefinition(handle, optionsName); } SearchHandle results; results = queryMgr.search(rawCtsQueryDefinition, new SearchHandle()); assertNotNull(results); assertEquals(results.getTotalResults(), numMatches); assertFalse(results.getMetrics().getTotalTime() == -1); MatchDocumentSummary[] summaries = results.getMatchResults(); assertNotNull(summaries); assertTrue(summaries.length > 0); for (MatchDocumentSummary summary : summaries) { assertTrue("Mime type of document", summary.getMimeType().matches("(application|text)/xml")); assertEquals("Format of document", Format.XML, summary.getFormat()); MatchLocation[] locations = summary.getMatchLocations(); for (MatchLocation location : locations) { assertNotNull(location.getAllSnippetText()); } } }
@Test public void jsonQbe() { JSONDocumentManager jdm = Common.client.newJSONDocumentManager(); QueryManager qm = Common.client.newQueryManager(); String queryAsString = "{ \"$query\": { \"kind\": \"bird\" } }"; StringHandle handle = new StringHandle(); handle.withFormat(Format.JSON).set(queryAsString); RawQueryByExampleDefinition query = qm.newRawQueryByExampleDefinition(handle); StringHandle report = qm.validate(query, new StringHandle()); System.out.println(report.toString()); SearchHandle results = qm.search(query, new SearchHandle()); assertEquals("6 json results should have matched", results.getTotalResults(), 6); DocumentPage documents = jdm.search(query, 1); assertEquals("6 json documents should have matched", documents.getTotalSize(), 6); documents = jdm.search(query, 1, new JacksonHandle()); assertEquals("6 json documents should have matched", documents.getTotalSize(), 6); documents = jdm.search(query, 1, new SearchHandle()); assertEquals("6 json documents should have matched", documents.getTotalSize(), 6); }
@Test public void testC_BulkSearch() { XMLDocumentManager docMgr = Common.client.newXMLDocumentManager(); SearchHandle searchHandle = new SearchHandle(); int pageLength = 100; docMgr.setPageLength(pageLength); DocumentPage page = docMgr.search(new StructuredQueryBuilder().directory(1, DIRECTORY), 1, searchHandle); try { for ( DocumentRecord record : page ) { validateRecord(record); } assertEquals("Failed to find number of records expected", RECORDS_EXPECTED, page.getTotalSize()); assertEquals("SearchHandle failed to report number of records expected", RECORDS_EXPECTED, searchHandle.getTotalResults()); assertEquals("SearchHandle failed to report pageLength expected", pageLength, searchHandle.getPageLength()); assertEquals("Should have results", true, page.hasContent()); int expected = RECORDS_EXPECTED > pageLength ? pageLength : RECORDS_EXPECTED; assertEquals("Failed to report number of records expected", expected, page.size()); assertEquals("No previous page", false, page.hasPreviousPage()); assertEquals("Only one page", RECORDS_EXPECTED > pageLength, page.hasNextPage()); assertEquals("Only one page", true, page.isFirstPage()); assertEquals("Only one page", page.hasNextPage() == false, page.isLastPage()); assertEquals("Wrong page", 1, page.getPageNumber()); assertEquals("Wrong page size", pageLength, page.getPageSize()); assertEquals("Wrong start", 1, page.getStart()); double totalPagesExpected = Math.ceil((double) RECORDS_EXPECTED/(double) pageLength); assertEquals("Wrong totalPages", totalPagesExpected, page.getTotalPages(), .01); } finally { page.close(); } }