@Override public MatchDocumentSummary findOne(QueryDefinition querydef, Transaction transaction) { SearchHandle results = search(querydef, new SearchHandle(), transaction); MatchDocumentSummary[] summaries = results.getMatchResults(); if (summaries.length > 0) { return summaries[0]; } else { return null; } }
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(); }
/** * Returns the query plan associated with this search. * * <p>Query plans are highly variable.</p> * @return the plan as a DOM Document */ @Override public Document getPlan() { DOMHandle handle = getPlan(new DOMHandle()); return (handle == null) ? null : handle.get(); } @Override
@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; }
PojoQueryDefinition qd = (PojoQueryDefinition) queryMgr.newRawQueryByExampleDefinition(new StringHandle(queryAsString).withFormat(Format.JSON)); qd.setCollections("even"); SearchHandle results = new SearchHandle(); products.setPageLength(10); p = products.search(qd, 1, results); MatchDocumentSummary[] mds = results.getMatchResults(); assertEquals("Size of the results summary", 10, mds.length); for (MatchDocumentSummary md : mds) { assertTrue("every uri should contain the class name", md.getUri().contains("Artifact")); String[] facetNames = results.getFacetNames(); for (String fname : facetNames) { System.out.println(fname);
"<search xmlns='http://marklogic.com/appservices/search'>" + "<options>" + "<extract-document-data selected='all'>" + "<extract-path>//description[@xml:lang='en']</extract-path>" + "</extract-document-data>" + "<constraint name='myFacet'>" + "<range type='xs:string' facet='true'>" + "<element name='grandchild'/>" + "</range>" + "</constraint>" + "<extract-metadata>" + "<qname elem-name='description'/>" + "</extract-metadata>" + "<return-constraints>true</return-constraints>" + "<return-facets>true</return-facets>" + "<return-metrics>true</return-metrics>" + "<return-plan>true</return-plan>" + "<return-qtext>true</return-qtext>" + "<return-query>true</return-query>" + "<return-results>true</return-results>" + "<debug>true</debug>" + "</options>" + "<query>" + "<and-query>" + "<collection-query><uri>xml</uri></collection-query>" + "<collection-query><uri>products</uri></collection-query>" + "</and-query>" + "</query>" + "</search>")); queryMgr.setView(QueryView.ALL); SearchHandle results = queryMgr.search(query, new SearchHandle()); assertTrue(results.getConstraintIterator(new StringHandle()).next().get().startsWith("<search:constraint")); assertTrue(results.getConstraintNames()[0].equals("myFacet")); assertTrue(results.getConstraint("myFacet", new StringHandle()).get().startsWith("<search:constraint")); assertEquals("myFacet", results.getFacetNames()[0]); SearchMetrics metrics = results.getMetrics(); assertTrue(metrics.getFacetResolutionTime() >= 0); assertTrue(metrics.getQueryResolutionTime() >= 0); assertTrue(metrics.getExtractResolutionTime() >= 0); assertTrue(metrics.getTotalTime() >= 0); assertTrue(results.getPlan(new StringHandle()).get().startsWith("<search:plan")); assertEquals("plan", results.getPlan().getFirstChild().getLocalName()); assertEquals("SEARCH-FLWOR", results.getReports()[0].getId()); assertTrue(results.getQuery(new StringHandle()).get().startsWith("<search:query")); assertEquals("snippet", results.getSnippetTransformType()); assertTrue(results.getWarnings().length == 0); assertTrue(out.toString().startsWith("searched"));
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 testStringSearch4() throws IOException, FailedRequestException, ForbiddenUserException, ResourceNotFoundException, ResourceNotResendableException { String optionsName = writeOptions(); QueryManager queryMgr = Common.client.newQueryManager(); StringQueryDefinition qdef = queryMgr.newStringDefinition(optionsName); qdef.setCriteria("grandchild1 OR grandchild4"); qdef.setDirectory("/sample/"); queryMgr.setView(QueryView.FACETS); SearchHandle results = queryMgr.search(qdef, new SearchHandle()); assertNotNull(results); FacetResult[] facets = results.getFacetResults(); assertNotNull(facets); assertEquals("expected 1 facet", 1, facets.length); FacetValue[] facetVals = facets[0].getFacetValues(); assertEquals("expected 6 facet values", 6, facetVals.length); MatchDocumentSummary[] summaries = results.getMatchResults(); assertTrue(summaries == null || summaries.length == 0); queryMgr.setView(QueryView.RESULTS); results = queryMgr.search(qdef, new SearchHandle()); assertNotNull(results); facets = results.getFacetResults(); assertTrue(facets == null || facets.length == 0); summaries = results.getMatchResults(); assertNotNull(summaries); assertEquals("expected 2 results", 2, summaries.length); assertEquals("empty-snippet", results.getSnippetTransformType()); }
public SearchHandle runSearch(DatabaseClient client, String queryOptionName, String criteria) { // create a manager for searching QueryManager queryMgr = client.newQueryManager(); // create a search definition StringQueryDefinition querydef = queryMgr.newStringDefinition(queryOptionName); querydef.setCriteria(criteria); // create a handle for the search results SearchHandle resultsHandle = new SearchHandle(); // run the search return queryMgr.search(querydef, resultsHandle); }
@Test public void testStringSearch() throws IOException, ParserConfigurationException, SAXException, FailedRequestException, ForbiddenUserException, ResourceNotFoundException, ResourceNotResendableException { String optionsName = writeOptions(); QueryManager queryMgr = Common.client.newQueryManager(); StringQueryDefinition qdef = queryMgr.newStringDefinition(optionsName); qdef.setCriteria("grandchild1 OR grandchild4"); qdef.setDirectory("/sample/"); SearchHandle results = queryMgr.search(qdef, new SearchHandle()); assertNotNull(results); assertFalse(results.getMetrics().getTotalTime() == -1); FacetResult[] facets = results.getFacetResults(); assertNotNull(facets); assertEquals("expected 1 facet", 1, facets.length); FacetValue[] facetVals = facets[0].getFacetValues(); assertEquals("expected 6 facet values", 6, facetVals.length); MatchDocumentSummary[] summaries = results.getMatchResults(); assertNotNull(summaries); assertEquals("expected 2 results", 2, summaries.length); }
RawCombinedQueryDefinition rawCombinedQueryDefinition = queryMgr.newRawCombinedQueryDefinition(new StringHandle(combinedSearch).withMimetype("application/xml")); SearchHandle results = queryMgr.search(rawCombinedQueryDefinition, new SearchHandle()); MatchDocumentSummary[] summaries = results.getMatchResults(); assertNotNull(summaries); int nSummariesLen = summaries.length; int nPageLen = results.getPageLength(); System.out.println("Page Length from search results is " + nPageLen); System.out.println("Summaries Length is " + nSummariesLen); RawCombinedQueryDefinition rawCombinedQueryDefinitionNoPage = queryMgr.newRawCombinedQueryDefinition(new StringHandle(combinedSearchNoPage).withMimetype("application/xml")); SearchHandle resultsNoPage = queryMgr.search(rawCombinedQueryDefinitionNoPage, new SearchHandle()); MatchDocumentSummary[] summariesNoPage = resultsNoPage.getMatchResults(); assertNotNull(summariesNoPage); int nSummariesLenNP = summariesNoPage.length; int nPageLenNP = resultsNoPage.getPageLength(); System.out.println("Page Length from search results is " + nPageLenNP); System.out.println("Summaries Length is " + nSummariesLenNP); SearchHandle searchHandle = new SearchHandle(); queryMgr.search(querydef, searchHandle); MatchDocumentSummary[] docSummaries = searchHandle.getMatchResults(); assertNotNull(docSummaries); int nSummariesLenOpt = docSummaries.length; SearchHandle searchHandleNoOpts = new SearchHandle(); queryMgr.search(querydefNoOpts, searchHandleNoOpts);
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); }
@Test public void testStructuredSearch() throws IOException { QueryManager queryMgr = Common.client.newQueryManager(); StructuredQueryBuilder qb = queryMgr.newStructuredQueryBuilder(); for (QueryDefinition t:new QueryDefinition[]{ qb.term("leaf3"), qb.build(qb.value(qb.element("leaf"), "leaf3")) }) { SearchHandle results = queryMgr.search(t, new SearchHandle()); assertNotNull(results); assertFalse(results.getMetrics().getTotalTime() == -1); MatchDocumentSummary[] summaries = results.getMatchResults(); assertNotNull(summaries); assertEquals("expected 1 result", 1, summaries.length); for (MatchDocumentSummary summary : summaries) { MatchLocation[] locations = summary.getMatchLocations(); assertEquals("expected 1 match location", 1, locations.length); for (MatchLocation location : locations) { assertNotNull(location.getAllSnippetText()); } } } }
SearchHandle sHandle = new SearchHandle(); SearchHandle sHandleOnForest1 = new SearchHandle(); SearchHandle sHandleOnForest2 = new SearchHandle(); System.out.println("Documents available on Forest 1 is " + sHandleOnForest1.getTotalResults()); assertTrue("Documents count on Forest 1 is ", sHandleOnForest1.getTotalResults() == 10); System.out.println("Documents available on Forest 2 is " + sHandleOnForest2.getTotalResults()); assertTrue("Documents count on Forest 2 is ", sHandleOnForest2.getTotalResults() == 10); assertTrue("Document count is incorrect", sHandleOnForest1.getTotalResults() + sHandleOnForest2.getTotalResults() == 20); System.out.println(sHandle.getTotalResults()); assertTrue("Document count is incorrect", sHandle.getTotalResults() == 20); sHandleOnForest1 = new SearchHandle(); sHandleOnForest2 = new SearchHandle(); System.out.println("Start Page on first search on Forest 1 is " + sHandleOnForest1.getStart()); assertTrue("Start Page on first search on Forest 1 is incorrect", sHandleOnForest1.getStart() == 2); System.out.println("Start Page on second search on Forest 2 is " + sHandleOnForest2.getStart()); assertTrue("Start Page on second search on Forest 2 is incorrect", sHandleOnForest2.getStart() == 3); assertTrue("Document count is incorrect", sHandleOnForest1.getTotalResults() + sHandleOnForest2.getTotalResults() == 20); sHandleOnForest1 = new SearchHandle(); sHandleOnForest2 = new SearchHandle();
@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(); } }
@Test public void testBug20979() throws KeyManagementException, NoSuchAlgorithmException, IOException, ParserConfigurationException, SAXException, XpathException, TransformerException { System.out.println("Running testBug20979"); String[] filenames = { "constraint1.xml", "constraint2.xml", "constraint3.xml", "constraint4.xml", "constraint5.xml" }; String queryOptionName = "wordConstraintWithElementAndAttributeIndexPlanOpt.xml"; DatabaseClient client = getDatabaseClient("rest-admin", "x", getConnType()); // write docs for (String filename : filenames) { writeDocumentUsingInputStreamHandle(client, filename, "/word-constraint/", "XML"); } setQueryOption(client, queryOptionName); QueryManager queryMgr = client.newQueryManager(); // create query def StringQueryDefinition querydef = queryMgr.newStringDefinition(queryOptionName); querydef.setCriteria("intitle:1945 OR inprice:12"); // create handle SearchHandle resultsHandle = new SearchHandle(); queryMgr.search(querydef, resultsHandle); // get the result // Document resultDoc = resultsHandle.getPlan(); // System.out.println(convertXMLDocumentToString(resultDoc)); String strPlan = resultsHandle.getPlan(new StringHandle()).get(); System.out.println(strPlan); assertTrue("string is not matched", strPlan.contains("qry:result estimate=\"3\"")); // release client client.release(); }
private void readNextPage() { queryManager.search(stringQueryDefinition, searchHandle, documentCounter); currentPage = searchHandle.getMatchResults(); }
@Test public void testFacetSearch() throws IOException, ParserConfigurationException, SAXException, FailedRequestException, ForbiddenUserException, ResourceNotFoundException, ResourceNotResendableException { DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance(); factory.setNamespaceAware(true); factory.setValidating(false); DocumentBuilder builder = factory.newDocumentBuilder(); Document document = builder.parse(new InputSource(new StringReader(options))); mgr = Common.adminClient.newServerConfigManager().newQueryOptionsManager(); mgr.writeOptions("photos", new DOMHandle(document)); QueryManager queryMgr = Common.client.newQueryManager(); StringQueryDefinition qdef = queryMgr.newStringDefinition("photos"); qdef.setCriteria("Grand"); SearchHandle results = queryMgr.search(qdef, new SearchHandle()); assertNotNull(results); FacetResult[] facets = results.getFacetResults(); assertNotNull(facets); }
private void checkResults(SearchHandle results) { assertNotNull(results); 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()); Document relevanceTrace = summary.getRelevanceInfo(); if (relevanceTrace != null) { assertEquals(relevanceTrace.getDocumentElement().getLocalName(),"relevance-info"); } MatchLocation[] locations = summary.getMatchLocations(); for (MatchLocation location : locations) { assertNotNull(location.getAllSnippetText()); } } }
@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(); }