/** * * @param r * @return */ public Resource installQueryOptions(Resource r) { if (!hasFileBeenModified(r) || ignoreResource(r)) { return null; } final String filename = r.getFilename(); final String name = getExtensionNameFromFile(r); logger.info(String.format("Loading %s query options from file %s", name, filename)); final QueryOptionsManager mgr = client.newServerConfigManager().newQueryOptionsManager(); StringHandle h = new StringHandle(readAndReplaceTokens(r)); executeTask(() -> { if (filename.endsWith(".json")) { mgr.writeOptions(name, h.withFormat(Format.JSON)); } else { mgr.writeOptions(name, h); } }); updateTimestamp(r); return r; }
private void prepareQueryOption() { QueryOptionsManager qryOptMgr = connectionClient.newServerConfigManager().newQueryOptionsManager(); if (StringUtils.isNotEmpty(settings.queryOptionLiterals)) { StringHandle strHandle = new StringHandle(); switch (settings.queryLiteralType) { case "JSON": { strHandle.withFormat(Format.JSON); break; } case "XML": { strHandle.withFormat(Format.XML); break; } } strHandle.set(settings.queryOptionLiterals); qryOptMgr.writeOptions(settings.queryOptionName, strHandle); } }
private void prepareQueryOption() { QueryOptionsManager qryOptMgr = connectionClient.newServerConfigManager().newQueryOptionsManager(); if (StringUtils.isNotEmpty(settings.queryOptionLiterals)) { StringHandle strHandle = new StringHandle(); switch (settings.queryLiteralType) { case "JSON": { strHandle.withFormat(Format.JSON); break; } case "XML": { strHandle.withFormat(Format.XML); break; } } strHandle.set(settings.queryOptionLiterals); qryOptMgr.writeOptions(settings.queryOptionName, strHandle); } }
/** * Set query option in XML * * @param client * @param queryOptionName * @throws FileNotFoundException */ public void setQueryOption(DatabaseClient client, String queryOptionName) throws FileNotFoundException { // create a manager for writing query options QueryOptionsManager optionsMgr = client.newServerConfigManager().newQueryOptionsManager(); // create handle ReaderHandle handle = new ReaderHandle(); // write the files BufferedReader docStream = new BufferedReader(new FileReader("src/test/java/com/marklogic/client/functionaltest/queryoptions/" + queryOptionName)); handle.set(docStream); // handle.setFormat(Format.XML); // write the query options to the database optionsMgr.writeOptions(queryOptionName, handle); System.out.println("Write " + queryOptionName + " to database"); }
@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); }
@Test public void testXMLDocsAsSearchOptions() throws ParserConfigurationException, SAXException, IOException, ResourceNotFoundException, ForbiddenUserException, FailedRequestException, ResourceNotResendableException { String optionsName = "invalid"; Document domDocument = DocumentBuilderFactory.newInstance().newDocumentBuilder().newDocument(); Element root = domDocument.createElementNS("http://marklogic.com/appservices/search","options"); Element rf = domDocument.createElementNS("http://marklogic.com/appservices/search","return-facets"); rf.setTextContent("true"); root.appendChild(rf); root.setAttributeNS("http://www.w3.org/XML/1998/namespace", "lang", "en"); // MarkLogic adds this if I don't domDocument.appendChild(root); QueryOptionsManager queryOptionsMgr = Common.adminClient.newServerConfigManager().newQueryOptionsManager(); queryOptionsMgr.writeOptions(optionsName, new DOMHandle(domDocument)); String domString = ((DOMImplementationLS) DocumentBuilderFactory.newInstance().newDocumentBuilder() .getDOMImplementation()).createLSSerializer().writeToString(domDocument); String optionsString = queryOptionsMgr.readOptions(optionsName, new StringHandle()).get(); assertNotNull("Read null string for XML content",optionsString); logger.debug("Two XML Strings {} and {}", domString, optionsString); Document readDoc = queryOptionsMgr.readOptions(optionsName, new DOMHandle()).get(); assertNotNull("Read null document for XML content",readDoc); }
private static String writeOptions(DatabaseClient adminClient) throws FailedRequestException, ForbiddenUserException, ResourceNotFoundException, ResourceNotResendableException { String optionsName = "suggest"; String suggestionOptions = " <options xmlns='http://marklogic.com/appservices/search'>" + " <default-suggestion-source>" + " <word><element ns='' name='suggest'/></word>" + " </default-suggestion-source>" + " <constraint name='string'>" + " <range type='xs:string' collation='http://marklogic.com/collation/'>" + " <element ns='' name='string'/>" + " </range>" + " </constraint>" + " </options>"; QueryOptionsManager queryOptionsMgr = adminClient.newServerConfigManager().newQueryOptionsManager(); queryOptionsMgr.writeOptions(optionsName, new StringHandle( suggestionOptions)); return optionsName; }
static public String makeValuesOptions() throws FailedRequestException, ForbiddenUserException, ResourceNotFoundException, ResourceNotResendableException { String options = "<?xml version='1.0'?>"+ "<options xmlns=\"http://marklogic.com/appservices/search\">"+ "<values name=\"grandchild\">"+ "<range type=\"xs:string\">"+ "<element ns=\"\" name=\"grandchild\"/>"+ "</range>"+ "</values>"+ "<values name=\"double\">"+ "<range type=\"xs:double\">"+ "<element ns=\"\" name=\"double\"/>"+ "</range>"+ "</values>"+ "<return-metrics>false</return-metrics>"+ "</options>"; QueryOptionsManager optionsMgr = Common.adminClient.newServerConfigManager().newQueryOptionsManager(); optionsMgr.writeOptions("valuesoptions", new StringHandle(options)); return "valuesoptions"; }
@Test public void testJSONConverter() throws KeyManagementException, NoSuchAlgorithmException, IOException, ParserConfigurationException, SAXException, XpathException, TransformerException { System.out.println("Running testJSONConverter"); // String queryOptionName = "jsonConverterOpt.json"; String queryOptionName = "queryValidationOpt.json"; DatabaseClient client = getDatabaseClient("rest-admin", "x", getConnType()); // create a manager for writing query options QueryOptionsManager optionsMgr = client.newServerConfigManager().newQueryOptionsManager(); // create handle FileHandle handle = new FileHandle(new File("src/test/java/com/marklogic/client/functionaltest/queryoptions/" + queryOptionName)); handle.setFormat(Format.JSON); // write the query options to the database optionsMgr.writeOptions(queryOptionName, handle); System.out.println("Write " + queryOptionName + " to database"); // read query option with QueryOptionsHandle StringHandle readHandle = new StringHandle(); optionsMgr.readOptions(queryOptionName, readHandle); String output = readHandle.toString(); System.out.println(output); System.out.println("============================"); client.release(); }
@BeforeClass public static void setupTestOptions() throws FileNotFoundException, ResourceNotFoundException, ForbiddenUserException, FailedRequestException, ResourceNotResendableException { Common.connectAdmin(); QueryOptionsManager queryOptionsManager = Common.adminClient.newServerConfigManager().newQueryOptionsManager(); File options = new File("src/test/resources/alerting-options.xml"); queryOptionsManager.writeOptions("alerts", new FileHandle(options)); Common.adminClient.newServerConfigManager().setServerRequestLogging(true); Common.connect(); JSONDocumentManager jsonDocMgr = Common.client.newJSONDocumentManager(); jsonDocMgr.write("/basic1.json", new FileHandle(new File("src/test/resources/basic1.json"))); // write three files for alert tests. XMLDocumentManager docMgr = Common.client.newXMLDocumentManager(); docMgr.write("/alert/first.xml", new FileHandle(new File("src/test/resources/alertFirst.xml"))); docMgr.write("/alert/second.xml", new FileHandle(new File("src/test/resources/alertSecond.xml"))); docMgr.write("/alert/third.xml", new FileHandle(new File("src/test/resources/alertThird.xml"))); }
@BeforeClass public static void setupTestOptions() throws FileNotFoundException, ResourceNotFoundException, ForbiddenUserException, FailedRequestException, ResourceNotResendableException { Common.connectAdmin(); QueryOptionsManager queryOptionsManager = Common.adminClient.newServerConfigManager().newQueryOptionsManager(); File options = new File("src/test/resources/alerting-options.xml"); queryOptionsManager.writeOptions("alerts", new FileHandle(options)); Common.adminClient.newServerConfigManager().setServerRequestLogging(true); Common.connect(); JSONDocumentManager jsonDocMgr = Common.client.newJSONDocumentManager(); jsonDocMgr.write("/basic1.json", new FileHandle(new File("src/test/resources/basic1.json"))); // write three files for alert tests. XMLDocumentManager docMgr = Common.client.newXMLDocumentManager(); docMgr.write("/alert/first.xml", new FileHandle(new File("src/test/resources/alertFirst.xml"))); docMgr.write("/alert/second.xml", new FileHandle(new File("src/test/resources/alertSecond.xml"))); docMgr.write("/alert/third.xml", new FileHandle(new File("src/test/resources/alertThird.xml"))); }
private String writeOptions() throws FailedRequestException, ForbiddenUserException, ResourceNotFoundException, ResourceNotResendableException { String optionsName = "facets"; // Get back facets... String options = "{\"options\": " + "{ \"constraint\": " + "[{\"name\":\"grandchild\", \"range\": " + "{ \"type\":\"xs:string\", \"collation\":\"http://marklogic.com/collation/\"," + "\"element\":{\"name\":\"grandchild\"}," + "\"facet\":true" + "}" + "}]," + "\"transform-results\": {\"apply\": \"empty-snippet\"}" + "}" + "}"; QueryOptionsManager queryOptionsMgr = Common.adminClient.newServerConfigManager().newQueryOptionsManager(); queryOptionsMgr.writeOptions(optionsName, new StringHandle(options).withFormat(Format.JSON)); return optionsName; } }
@Test public void testQueryOptionsManager() throws JAXBException, ResourceNotFoundException, ForbiddenUserException, FailedRequestException, ResourceNotResendableException { QueryOptionsManager mgr = Common.adminClient.newServerConfigManager().newQueryOptionsManager(); assertNotNull("Client could not create query options manager", mgr); mgr.writeOptions("testempty", new StringHandle("{\"options\":{}}").withFormat(Format.JSON)); String optionsResult = mgr.readOptions("testempty", new StringHandle()).get(); logger.debug("Empty options from server {}", optionsResult); assertTrue("Empty options result not empty",optionsResult.contains("options")); assertTrue("Empty options result not empty",optionsResult.contains("\"http://marklogic.com/appservices/search\"/>")); mgr.deleteOptions("testempty"); };
@Test public void testJSONOptions() throws JAXBException, ResourceNotFoundException, ForbiddenUserException, FailedRequestException, ResourceNotResendableException { QueryOptionsManager mgr = Common.adminClient.newServerConfigManager().newQueryOptionsManager(); assertNotNull("Client could not create query options manager", mgr); FileHandle jsonHandle = new FileHandle(new File("src/test/resources/json-config.json")); jsonHandle.setFormat(Format.JSON); mgr.writeOptions("jsonoptions", jsonHandle); JsonNode options = mgr.readOptions("jsonoptions", new JacksonHandle()).get(); assertEquals("JSON options came back incorrectly", options.findPath("constraint").get(0).get("name").textValue(), "decade"); StringHandle jsonStringHandle = new StringHandle(); jsonStringHandle.setFormat(Format.JSON); mgr.readOptions("jsonoptions", jsonStringHandle); assertTrue("JSON String from QueryManager must start with json options", jsonStringHandle.get().startsWith("{\"options\":")); mgr.deleteOptions("jsonoptions"); }; }
@Test public void testBug19140() throws KeyManagementException, NoSuchAlgorithmException, IOException, ParserConfigurationException, SAXException, XpathException, TransformerException { System.out.println("Running testBug19140"); DatabaseClient client = getDatabaseClient("rest-admin", "x", getConnType()); // create query options manager QueryOptionsManager optionsMgr = client.newServerConfigManager().newQueryOptionsManager(); // create query options handle String xmlOptions = "<search:options xmlns:search='http://marklogic.com/appservices/search'>" + "<search:transform-results apply='raw'/>" + "</search:options>"; StringHandle handle = new StringHandle(xmlOptions); // write query options optionsMgr.writeOptions("RawResultsOpt", handle); // read query option StringHandle readHandle = new StringHandle(); readHandle.setFormat(Format.XML); optionsMgr.readOptions("RawResultsOpt", readHandle); String output = readHandle.get(); System.out.println(output); assertTrue("transform-results is incorrect", output.contains("transform-results apply=\"raw\"/")); assertFalse("preferred-elements is exist", output.contains("preferred-elements/")); // release client client.release(); }
@Test public void testAggregates() throws IOException, ParserConfigurationException, SAXException, ResourceNotFoundException, ForbiddenUserException, FailedRequestException, ResourceNotResendableException { QueryOptionsManager optionsMgr = Common.adminClient.newServerConfigManager().newQueryOptionsManager(); optionsMgr.writeOptions("valuesoptions2", new StringHandle(options)); logger.debug(options.toString()); QueryManager queryMgr = Common.client.newQueryManager(); ValuesDefinition vdef = queryMgr.newValuesDefinition("co", "valuesoptions2"); vdef.setAggregate("correlation", "covariance"); TuplesHandle t = queryMgr.tuples(vdef, new TuplesHandle()); AggregateResult[] agg = t.getAggregates(); assertEquals("Two aggregates are expected", 2, agg.length); double cov = t.getAggregate("covariance").get("xs:double", Double.class); assertTrue("The covariance is between 1.551 and 1.552", cov > 1.551 && cov < 1.552); Tuple[] tuples = t.getTuples(); assertEquals("Twelve tuples are expected", 12, tuples.length); assertEquals("The tuples are named 'co'", "co", t.getName()); ValuesMetrics metrics = t.getMetrics(); assertTrue("The values resolution time is >= 0", metrics.getValuesResolutionTime() >= 0); assertTrue("The aggregate resolution time is >= 0", metrics.getAggregateResolutionTime() >= 0); optionsMgr.deleteOptions("valuesoptions2"); }
@Test public void testCoVariances() throws IOException, ParserConfigurationException, SAXException, ResourceNotFoundException, ForbiddenUserException, FailedRequestException, ResourceNotResendableException { QueryOptionsManager optionsMgr = Common.adminClient.newServerConfigManager().newQueryOptionsManager(); optionsMgr.writeOptions("valuesoptions3", new StringHandle(options)); QueryManager queryMgr = Common.client.newQueryManager(); ValuesDefinition vdef = queryMgr.newValuesDefinition("co", "valuesoptions3"); TuplesHandle t = queryMgr.tuples(vdef, new TuplesHandle()); Tuple[] tuples = t.getTuples(); assertEquals("Twelve tuples are expected", 12, tuples.length); assertEquals("The tuples are named 'co'", "co", t.getName()); ValuesMetrics metrics = t.getMetrics(); assertTrue("The values resolution time is >= 0", metrics.getValuesResolutionTime() >= 0); // Restore after bug:18747 is fixed // assertEquals("The aggregate resolution time is -1 (absent)", metrics.getAggregateResolutionTime(), -1); optionsMgr.deleteOptions("valuesoptions3"); }
@Test public void testValuesHandle() throws IOException, ParserConfigurationException, SAXException, ResourceNotFoundException, ForbiddenUserException, FailedRequestException, ResourceNotResendableException { QueryOptionsManager optionsMgr = Common.adminClient.newServerConfigManager().newQueryOptionsManager(); optionsMgr.writeOptions("valuesoptions", new StringHandle(options)); QueryManager queryMgr = Common.client.newQueryManager(); ValuesDefinition vdef = queryMgr.newValuesDefinition("co", "valuesoptions"); TuplesHandle t = queryMgr.tuples(vdef, new TuplesHandle()); Tuple[] tuples = t.getTuples(); assertEquals("Twelve tuples are expected", 12, tuples.length); assertEquals("The tuples are named 'co'", "co", t.getName()); TypedDistinctValue[] dv = tuples[0].getValues(); assertEquals("Two values per tuple expected", 2, dv.length); assertEquals("First is long", "xs:double", dv[0].getType()); assertEquals("Second is int", "xs:int", dv[1].getType()); assertEquals("Frequency is 1", 1, tuples[0].getCount()); assertEquals("First value", 1.1, (double) dv[0].get(Double.class), 0.01); assertEquals("Second value", (int) 1, (int) dv[1].get(Integer.class)); optionsMgr.deleteOptions("valuesoptions"); }
public static void setup() throws Exception { WriteBatcher writeBatcher = moveMgr.newWriteBatcher(); moveMgr.startJob(writeBatcher); // a collection so we're only looking at docs related to this test DocumentMetadataHandle meta = new DocumentMetadataHandle() .withCollections(collection, qhbTestCollection); // all the docs are one-word text docs writeBatcher.addAs(uri1, meta, new StringHandle("{name:\"John Doe\", department:\"HR\"}").withFormat(JSON)); writeBatcher.addAs(uri2, meta, new StringHandle("{name:\"Jane Doe\", department:\"HR\"}").withFormat(JSON)); writeBatcher.addAs(uri3, meta, new StringHandle("{name:\"John Smith\", department:\"HR\"}").withFormat(JSON)); writeBatcher.addAs(uri4, meta, new StringHandle("{name:\"John Lennon\",department:\"HR\"}").withFormat(JSON)); writeBatcher.addAs(uri5, meta, new StringHandle("{name:\"John Man\", department:\"Engineering\"}").withFormat(JSON)); writeBatcher.flushAsync(); writeBatcher.awaitCompletion(); moveMgr.stopJob(writeBatcher); StringHandle options = new StringHandle( "<options xmlns='http://marklogic.com/appservices/search'>" + "<constraint name='dept'>" + "<value>" + "<json-property>department</json-property>" + "</value>" + "</constraint>" + "</options>") .withFormat(XML); QueryOptionsManager queryOptionsMgr = Common.connectAdmin().newServerConfigManager().newQueryOptionsManager(); queryOptionsMgr.writeOptions("employees", options); }
@Test public void testNWayTuples() throws ResourceNotFoundException, ForbiddenUserException, FailedRequestException, ResourceNotResendableException { QueryOptionsManager optionsMgr = Common.adminClient.newServerConfigManager().newQueryOptionsManager(); optionsMgr.writeOptions("valuesoptions", new StringHandle(options)); QueryManager queryMgr = Common.client.newQueryManager(); ValuesDefinition vdef = queryMgr.newValuesDefinition("n-way", "valuesoptions"); TuplesHandle t = queryMgr.tuples(vdef, new TuplesHandle()); Tuple[] tuples = t.getTuples(); assertEquals("Four tuples are expected", 4, tuples.length); assertEquals("The tuples are named 'n-way'", "n-way", t.getName()); TypedDistinctValue[] dv = tuples[0].getValues(); assertEquals("Three values per tuple expected", 3, dv.length); assertEquals("First is long", "xs:double", dv[0].getType()); assertEquals("Second is int", "xs:int", dv[1].getType()); assertEquals("Third is string", "xs:string", dv[2].getType()); assertEquals("Frequency is 1", 1, tuples[0].getCount()); assertEquals("First value", 1.1, (double) dv[0].get(Double.class), 0.01); assertEquals("Second value", (int) 1, (int) dv[1].get(Integer.class)); assertEquals("Third value", "Alaska", (String) dv[2].get(String.class)); optionsMgr.deleteOptions("valuesoptions"); }