【问题标题】:MarkLogic Java API - how to get documentMarkLogic Java API - 如何获取文档
【发布时间】:2013-07-04 12:18:37
【问题描述】:

目前我正在尝试使用 Java API 从我的 MarkLogic 服务器获取数据 (XML)。

因此我添加了命名空间:

NamespacesManager nsManager = client.newServerConfigManager()
  .newNamespacesManager();
nsManager.addPrefix("document",
  "http://test/dummy/master/doc");
...

之后我尝试了以下操作:

DatabaseClient client = DatabaseClientFactory.newClient("IP_ADDRESS",
  PORT, user, password, Authentication.DIGEST);

SearchHandle handle = new SearchHandle();
QueryManager queryMgr = client.newQueryManager();

KeyValueQueryDefinition query = queryMgr.newKeyValueDefinition();
query.put(
  queryMgr.newElementLocator(new QName("doc:id")),
  "1439-1074");
SearchHandle resultsHandle = queryMgr.search(query, handle);
System.out.println("results: " + resultsHandle.getTotalResults());

// System.out.println("Matched "+resultsHandle.getTotalResults()+
// " documents with '"+query.getCriteria()+"'\n");

// iterate over the result documents
MatchDocumentSummary[] docSummaries = resultsHandle.getMatchResults();
System.out.println("Listing "+docSummaries.length+" documents:\n");

所有作品;我得到了结果,但它们不包含 XML 文档(只是文档的 URI)。是否可以使用此查询获取 XML 结果,或者我是否必须提交第二个查询,例如:

JSONDocumentManager docMgr = client.newJSONDocumentManager();
StringHandle doc = docMgr.read(uri, new StringHandle());

【问题讨论】:

    标签: marklogic


    【解决方案1】:

    您必须使用与您想要的结果相匹配的结果句柄。看看http://developer.marklogic.com/learn/java/processing-search-resultshttp://docs.marklogic.com/javadoc/client/index.html?com/marklogic/client/io/SearchHandle.html

    不要使用SearchHandle,而是使用StringHandle。这是文档示例:

    // create a handle for the search results to be received as raw XML
    StringHandle resultsHandle = new StringHandle();
    // run the search
    queryMgr.search(query, resultsHandle);
    // dump the XML results to the console
    System.out.println(resultsHandle);
    

    【讨论】:

    • 感谢您的回复,但仅更改结果句柄并不能解决我的问题。结果是一样的(数据只包含 uris)。
    【解决方案2】:

    要取回整个文档而不是 sn-p,请指定 查询选项中的原始转换结果:

    <transform-results apply="raw" />
    

    请看:

    http://docs.marklogic.com/guide/search-dev/search-api#id_58295
    

    如果文档是 XML,您可能希望使用内置的 XML 解析句柄,例如 DOMHandle、SAXHandle 或 XMLStreamReaderHandle(或 JDOMHandle 或 XOMHandle 示例)而不是 SearchHandle 并提取 来自响应负载的文档。

    如果文档是 JSON,您可能需要使用 JacksonHandle 示例。

    【讨论】:

    • 我必须如何添加它?我尝试了以下操作: String options = ""; StringHandle 句柄 = new StringHandle(options);但结果没有改变..
    • String options = "marklogic.com/appservices/search'><transform-results apply=\"raw\"/>"; // 也不改变结果。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-12-11
    • 2021-11-25
    • 2017-06-08
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多