// This test has set response to JSON and pass StringHandle with format as JSON, expectint it to // work, logged an issue 82 @Test public void testBulkSearchSQDwithResponseFormatandStringHandle() throws Exception { loadJSONDocuments(); JSONDocumentManager docMgr = client.newJSONDocumentManager(); QueryManager queryMgr = client.newQueryManager(); StructuredQueryBuilder qb = new StructuredQueryBuilder(); StructuredQueryDefinition qd = qb.and(qb.term("dog1", "dog11")); queryMgr.search(qd, new SearchHandle()); docMgr.setNonDocumentFormat(Format.JSON); docMgr.setSearchView(QueryView.METADATA); docMgr.setMetadataCategories(Metadata.PERMISSIONS); StringHandle results = new StringHandle().withFormat(Format.JSON); DocumentPage page = docMgr.search(qd, 1, results); DocumentMetadataHandle mh = new DocumentMetadataHandle(); while (page.hasNext()) { DocumentRecord rec = page.next(); validateRecord(rec, Format.JSON); docMgr.readMetadata(rec.getUri(), mh); assertTrue("Records has permissions? ", mh.getPermissions().containsKey("flexrep-eval")); assertTrue("Record has collections ?", mh.getCollections().isEmpty()); } assertFalse("Search handle contains", results.get().isEmpty()); }
@Test public void testFailedSearch() throws IOException { QueryManager queryMgr = Common.client.newQueryManager(); StructuredQueryBuilder qb = queryMgr.newStructuredQueryBuilder(); StructuredQueryDefinition qdef = qb.term("criteriaThatShouldNotMatchAnyDocument"); SearchHandle results = queryMgr.search(qdef, new SearchHandle()); assertNotNull(results); MatchDocumentSummary[] summaries = results.getMatchResults(); assertTrue(summaries == null || summaries.length == 0); }
@Test public void testJSON() { QueryManager queryMgr = Common.client.newQueryManager(); StructuredQueryBuilder qb = queryMgr.newStructuredQueryBuilder(); StructuredQueryDefinition t = qb.term("leaf3"); // create a handle for the search results StringHandle resultsHandle = new StringHandle().withFormat(Format.JSON); // run the search queryMgr.search(t, resultsHandle); assertEquals("{", resultsHandle.get().substring(0, 1)); // It's JSON, right? }
// This test is testing SearchView options and search handle @Test public void testBulkSearchSQDwithJSONResponseFormat() throws Exception { loadJSONDocuments(); JSONDocumentManager docMgr = client.newJSONDocumentManager(); QueryManager queryMgr = client.newQueryManager(); StructuredQueryBuilder qb = new StructuredQueryBuilder(); StructuredQueryDefinition qd = qb.and(qb.term("woof")); docMgr.setNonDocumentFormat(Format.JSON); docMgr.setSearchView(QueryView.FACETS); JacksonHandle jh = new JacksonHandle(); docMgr.search(qd, 1, jh); // System.out.println(jh.get().toString()); assertTrue("Searh response has entry for facets", jh.get().has("facets")); assertFalse( "Searh response has entry for facets", jh.get().has("results")); // Issue 84 is tracking this assertFalse("Searh response has entry for facets", jh.get().has("metrics")); docMgr.setSearchView(QueryView.RESULTS); docMgr.search(qd, 1, jh); assertFalse("Searh response has entry for facets", jh.get().has("facets")); assertTrue("Searh response has entry for facets", jh.get().has("results")); assertFalse( "Searh response has entry for facets", jh.get().has("metrics")); // Issue 84 is tracking this docMgr.setSearchView(QueryView.METADATA); docMgr.search(qd, 1, jh); assertFalse("Searh response has entry for facets", jh.get().has("facets")); assertFalse("Searh response has entry for facets", jh.get().has("results")); assertTrue("Searh response has entry for facets", jh.get().has("metrics")); docMgr.setSearchView(QueryView.ALL); docMgr.search(qd, 1, jh); assertTrue("Searh response has entry for facets", jh.get().has("facets")); assertTrue("Searh response has entry for facets", jh.get().has("results")); assertTrue("Searh response has entry for facets", jh.get().has("metrics")); queryMgr.setView(QueryView.FACETS); queryMgr.search(qd, jh); System.out.println(jh.get().toString()); }
@Test public void testStructuredSearch1() 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"))}) { MatchDocumentSummary summary = queryMgr.findOne(t); assertNotNull(summary); GenericDocumentManager docMgr = Common.client.newDocumentManager(); assertNotNull("Document exists", docMgr.exists(summary.getUri())); } }
@Test public void testStructuredSearch2() throws IOException { QueryManager queryMgr = Common.client.newQueryManager(); EditableNamespaceContext namespaces = new EditableNamespaceContext(); namespaces.put("x", "root.org"); namespaces.put("y", "target.org"); StructuredQueryBuilder qb = new StructuredQueryBuilder(namespaces); StructuredQueryDefinition qdef = qb.geospatial(qb.geoPath(qb.pathIndex("/x:geo/y:path")), qb.box(1, 2, 3, 4)); SearchHandle results = queryMgr.search(qdef, new SearchHandle()); assertNotNull(results); MatchDocumentSummary[] summaries = results.getMatchResults(); assertTrue(summaries == null || summaries.length == 0); }
@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()); } } } }
/* Searching for boolean and string in XML element using value query. * Purpose: To validate QueryBuilder's new value methods (in 8.0) in XML document using an element. * * Load a file that has a boolean value in a XML attribute and use query def to search on that boolean value * * Methods used : value(StructuredQueryBuilder.TextIndex index, boolean) * value(StructuredQueryBuilder.TextIndex index, String) */ @Test public void testQueryBuilderValueWithBooleanAndString() throws XpathException, SAXException, IOException { String docId[] = {"play-persons.xml"}; TextDocumentManager docMgr = client.newTextDocumentManager(); QueryManager queryMgr = client.newQueryManager(); DocumentWriteSet writeset = docMgr.newWriteSet(); // Put meta-data DocumentMetadataHandle metadataHandle = new DocumentMetadataHandle(); metadataHandle.getCollections().addAll("my-collection1", "my-collection2"); metadataHandle.getPermissions().add("app-user", Capability.UPDATE, Capability.READ); metadataHandle.getProperties().put("reviewed", true); metadataHandle.getProperties().put("myString", "foo"); metadataHandle.getProperties().put("myInteger", 10); metadataHandle.getProperties().put("myDecimal", 34.56678); metadataHandle.getProperties().put("myCalendar", Calendar.getInstance().get(Calendar.YEAR)); metadataHandle.setQuality(23); writeset.addDefault(metadataHandle); // Create a new document using StringHandle StringBuffer strBuf = new StringBuffer(); strBuf.append("<PLAY>"); strBuf.append("<TITLE>All's Well That Ends Well</TITLE>"); strBuf.append("<PERSONAE>"); strBuf.append("<TITLE>Dramatis Personae</TITLE>"); strBuf.append("<PGROUP>"); strBuf.append("<subgroup>true</subgroup>"); strBuf.append("<PERSONA>KING OF FRANCE</PERSONA>"); strBuf.append("<PERSONA>DUKE OF FLORENCE</PERSONA>"); strBuf.append("<PERSONA>BERTRAM, Count of Rousillon.</PERSONA>"); strBuf.append("<PERSONA>LAFEU, an old lord.</PERSONA>"); strBuf.append("</PGROUP>"); strBuf.append("<PGROUP>"); strBuf.append("<subgroup>false</subgroup>"); strBuf.append("<PERSONA>PAROLLES, a follower of Bertram.</PERSONA>"); strBuf.append("<PERSONA>A Page. </PERSONA>"); strBuf.append("</PGROUP>"); strBuf.append("<PGROUP>"); strBuf.append("<subgroup>false</subgroup>"); strBuf.append("<PERSONA>COUNTESS OF ROUSILLON, mother to Bertram. </PERSONA>"); strBuf.append("<PERSONA>HELENA, a gentlewoman protected by the Countess.</PERSONA>"); strBuf.append("<PERSONA>An old Widow of Florence. </PERSONA>"); strBuf.append("<PERSONA>DIANA, daughter to the Widow.</PERSONA>"); strBuf.append("</PGROUP>"); strBuf.append("<PGROUP>"); strBuf.append("<subgroup>false</subgroup>"); strBuf.append("<PERSONA>VIOLENTA</PERSONA>"); strBuf.append("<PERSONA>MARIANA</PERSONA>"); strBuf.append("<GRPDESCR>neighbours and friends to the Widow.</GRPDESCR>"); strBuf.append("</PGROUP>"); strBuf.append("<PERSONA>Lords, Officers, Soldiers, &c., French and Florentine.</PERSONA>"); strBuf.append("</PERSONAE>"); strBuf.append("</PLAY>"); writeset.add("/1/" + docId[0], new StringHandle().with(strBuf.toString())); docMgr.write(writeset); docMgr.write(writeset); // Search for the range with attribute value true in rangeRelativeBucketConstraintOpt.xml // document. StructuredQueryBuilder qb = new StructuredQueryBuilder(); // Build an object that represents StructuredQueryBuilder.ElementAttribute for use in values // method // that is of type StructuredQueryBuilder.TextIndex QueryDefinition qd = qb.value(qb.element("subgroup"), false); // Create handle for the result StringHandle resultsHandle = new StringHandle().withFormat(Format.XML); queryMgr.search(qd, resultsHandle); // Get the result String resultDoc = resultsHandle.get(); System.out.println(resultDoc); // Verify that search response has found 1 element attribute assertXpathEvaluatesTo( "fn:doc(\"/1/play-persons.xml\")", "string(//*[local-name()='response']//*[local-name()='result']//@*[local-name()='path'])", resultDoc); assertXpathEvaluatesTo( "3", "count(//*[local-name()='response']//*[local-name()='match'])", resultDoc); // Search for the following royal (XML ELEMENT) in all-well.xml document. StructuredQueryBuilder qbStr = new StructuredQueryBuilder(); QueryDefinition qdStr = qbStr.value( qbStr.element("PERSONA"), "KING OF FRANCE", "DUKE OF FLORENCE", "BERTRAM, Count of Rousillon.", "LAFEU, an old lord."); // Create handle for the result StringHandle resultsHandleStr = new StringHandle().withFormat(Format.XML); queryMgr.search(qdStr, resultsHandleStr); // Get the result String resultDocStr = resultsHandleStr.get(); System.out.println(resultDocStr); // Verify that search response has found 4 PERSONA elements under /PLAY/PERSONAE assertXpathEvaluatesTo( "fn:doc(\"/1/play-persons.xml\")", "string(//*[local-name()='response']//*[local-name()='result']//@*[local-name()='path'])", resultDocStr); assertXpathEvaluatesTo( "4", "count(//*[local-name()='response']//*[local-name()='match'])", resultDocStr); }
// This test is to verify the transactions, verifies the search works with transaction before // commit, after rollback and after commit @Test public void testBulkSearchSQDwithTransactionsandDOMHandle() throws Exception { XMLDocumentManager docMgr = client.newXMLDocumentManager(); DOMHandle results = new DOMHandle(); StructuredQueryBuilder qb = new StructuredQueryBuilder(); StructuredQueryDefinition qd = qb.and(qb.term("much", "thought")); Transaction t = client.openTransaction(); try { int count = 1; XMLDocumentManager xmldocMgr = client.newXMLDocumentManager(); DocumentWriteSet writeset = xmldocMgr.newWriteSet(); for (int i = 0; i < 102; i++) { writeset.add( DIRECTORY + "boo" + i + ".xml", new DOMHandle(getDocumentContent("This is so too much thought " + i))); if (count % BATCH_SIZE == 0) { xmldocMgr.write(writeset, t); writeset = xmldocMgr.newWriteSet(); } count++; } if (count % BATCH_SIZE > 0) { xmldocMgr.write(writeset, t); } count = 0; docMgr.setSearchView(QueryView.RESULTS); DocumentPage page = docMgr.search(qd, 1, results, t); while (page.hasNext()) { DocumentRecord rec = page.next(); validateRecord(rec, Format.XML); count++; } assertTrue("Page has conttent :", page.hasContent()); assertEquals( "Total search results before transaction rollback are ", "102", results .get() .getElementsByTagNameNS("*", "response") .item(0) .getAttributes() .getNamedItem("total") .getNodeValue()); // System.out.println(results.get().getElementsByTagNameNS("*", // "response").item(0).getAttributes().getNamedItem("total").getNodeValue()); } catch (Exception e) { throw e; } finally { t.rollback(); } docMgr.search(qd, 1, results); System.out.println(convertXMLDocumentToString(results.get())); assertEquals( "Total search results after rollback are ", results .get() .getElementsByTagNameNS("*", "response") .item(0) .getAttributes() .getNamedItem("total") .getNodeValue(), "0"); }
@Test public void testBulkSearchSQDwithDifferentPageSizes() throws IOException, ParserConfigurationException, SAXException, TransformerException { int count; loadXMLDocuments(); // Creating a txt document manager for bulk search TextDocumentManager docMgr = client.newTextDocumentManager(); // using QueryManger for query definition and set the search criteria StructuredQueryBuilder qb = new StructuredQueryBuilder(); StructuredQueryDefinition qd = qb.and(qb.term("foo", "bar")); // set document manager level settings for search response System.out.println("Default Page length setting on docMgr :" + docMgr.getPageLength()); docMgr.setPageLength(1); docMgr.setSearchView(QueryView.RESULTS); docMgr.setNonDocumentFormat(Format.XML); assertEquals("format set on document manager", "XML", docMgr.getNonDocumentFormat().toString()); assertEquals( "Queryview set on document manager ", "RESULTS", docMgr.getSearchView().toString()); assertEquals("Page length ", 1, docMgr.getPageLength()); // Search for documents where content has bar and get first result record, get search handle on // it SearchHandle sh = new SearchHandle(); DocumentPage page = docMgr.search(qd, 0); // test for page methods assertEquals("Number of records", 1, page.size()); assertEquals("Starting record in first page ", 1, page.getStart()); assertEquals("Total number of estimated results:", 102, page.getTotalSize()); assertEquals("Total number of estimated pages :", 102, page.getTotalPages()); // till the issue #78 get fixed assertTrue("Is this First page :", page.isFirstPage()); // this is bug assertFalse("Is this Last page :", page.isLastPage()); assertTrue("Is this First page has content:", page.hasContent()); // Need the Issue #75 to be fixed assertFalse("Is first page has previous page ?", page.hasPreviousPage()); // long pageNo = 1; do { count = 0; page = docMgr.search(qd, pageNo, sh); if (pageNo > 1) { assertFalse("Is this first Page", page.isFirstPage()); assertTrue("Is page has previous page ?", page.hasPreviousPage()); } while (page.hasNext()) { DocumentRecord rec = page.next(); rec.getFormat(); validateRecord(rec, Format.XML); // System.out.println(rec.getUri()); count++; } MatchDocumentSummary[] mds = sh.getMatchResults(); assertEquals("Matched document count", 1, mds.length); // since we set the query view to get only results, facet count supposed be 0 assertEquals("Matched Facet count", 0, sh.getFacetNames().length); assertEquals("document count", page.size(), count); // assertEquals("Page Number #",pageNo,page.getPageNumber()); pageNo = pageNo + page.getPageSize(); } while (!page.isLastPage()); // assertTrue("page count is 101 ",pageNo > page.getTotalPages()); assertTrue("Page has previous page ?", page.hasPreviousPage()); assertEquals("page size", 1, page.getPageSize()); assertEquals("document count", 102, page.getTotalSize()); page = docMgr.search(qd, 103); assertFalse("Page has any records ?", page.hasContent()); }