Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/398.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Marklogic DMSDK转换模块?_Marklogic_Java - Fatal编程技术网

Marklogic DMSDK转换模块?

Marklogic DMSDK转换模块?,marklogic,java,Marklogic,Java,Usecase:我想在数据库中获取文档的所有内容,并将其存储在一个zip文件中 我使用mljavautil将内容转换为zip文件。我的服务器端转换模块逻辑如下: 我查看了每个文档,并使用节点Xpath只提取了必需的字段 但当我执行时,它在我打开时创建了一个zip文件,它有一组基于Uri名称和提取内容的文件。它不是将所有文件内容合并为一个,而是为每个URI创建新文件 我怎样才能改变这种行为?我希望所有文档中的所有内容(即提取的值)都位于一个文件中,该文件也可以转换为zip文件 试图为循环应用,但认

Usecase:我想在数据库中获取文档的所有内容,并将其存储在一个zip文件中

我使用
mljavautil
将内容转换为zip文件。我的服务器端转换模块逻辑如下:

  • 我查看了每个文档,并使用节点Xpath只提取了必需的字段
  • 但当我执行时,它在我打开时创建了一个zip文件,它有一组基于Uri名称和提取内容的文件。它不是将所有文件内容合并为一个,而是为每个URI创建新文件
  • 我怎样才能改变这种行为?我希望所有文档中的所有内容(即提取的值)都位于一个文件中,该文件也可以转换为zip文件

    试图为循环应用
    ,但认为没有用,因为函数本身一个接一个地获取uri(即context.uri)

    感谢您的帮助

    谢谢

    您可以使用!ExportToWriterListener导出QueryBatcher检索到的所有内容并写入文件

    DatabaseClient client = DatabaseClientFactory.newClient("localhost", 8012,
        new DatabaseClientFactory.DigestAuthContext("admin", "admin"));
    DataMovementManager moveMgr = client.newDataMovementManager();
    ServerTransform transform = new ServerTransform("transformName");
    File outputFile = new File("output.txt"); // pass in your file here
    String collection = "customers";
    StructuredQueryDefinition query = new  StructuredQueryBuilder().collection(collection); // Substitute your query here
    try (FileWriter writer = new FileWriter(outputFile)) {
      ExportToWriterListener exportListener = new ExportToWriterListener(writer)
        .withRecordSuffix("\n")
        .withTransform(transform) // pass in your Server Transform here
        .onGenerateOutput(
          record -> {
            String contents = record.getContentAs(String.class); 
            return contents; // return the content as it is which is the server transformed documents' content
          }
        );
    
      QueryBatcher queryJob =
        moveMgr.newQueryBatcher(query)
          .withThreadCount(5)
          .withBatchSize(10)
          .onUrisReady(exportListener)
          .onQueryFailure( throwable -> throwable.printStackTrace() );
      moveMgr.startJob( queryJob );
      queryJob.awaitCompletion();
      moveMgr.stopJob(queryJob);
    }
    
    然后您可以创建一个压缩文件

    你可以使用!ExportToWriterListener导出QueryBatcher检索到的所有内容并写入文件

    DatabaseClient client = DatabaseClientFactory.newClient("localhost", 8012,
        new DatabaseClientFactory.DigestAuthContext("admin", "admin"));
    DataMovementManager moveMgr = client.newDataMovementManager();
    ServerTransform transform = new ServerTransform("transformName");
    File outputFile = new File("output.txt"); // pass in your file here
    String collection = "customers";
    StructuredQueryDefinition query = new  StructuredQueryBuilder().collection(collection); // Substitute your query here
    try (FileWriter writer = new FileWriter(outputFile)) {
      ExportToWriterListener exportListener = new ExportToWriterListener(writer)
        .withRecordSuffix("\n")
        .withTransform(transform) // pass in your Server Transform here
        .onGenerateOutput(
          record -> {
            String contents = record.getContentAs(String.class); 
            return contents; // return the content as it is which is the server transformed documents' content
          }
        );
    
      QueryBatcher queryJob =
        moveMgr.newQueryBatcher(query)
          .withThreadCount(5)
          .withBatchSize(10)
          .onUrisReady(exportListener)
          .onQueryFailure( throwable -> throwable.printStackTrace() );
      moveMgr.startJob( queryJob );
      queryJob.awaitCompletion();
      moveMgr.stopJob(queryJob);
    }
    

    然后您可以创建一个压缩文件

    基于“不是将所有文件内容合并为一个,而是为每个URI创建新文件”,我认为您需要澄清您的用例。您是否希望一个zip包含一个文件,其中包含所有匹配的文档?或者您希望每个匹配文档有一个包含一个文件的zip?是的,我希望有一个包含一个文件的zip,它将所有匹配文档内容连接在一起基于“不是将所有文件内容合并为一个,而是为每个URI创建新文件”,我认为您需要澄清您的用例。您是否希望一个zip包含一个文件,其中包含所有匹配的文档?或者,您希望每个匹配的文档都有一个包含一个文件的zip吗?是的,我希望一个包含一个文件的zip,它将所有匹配的文档内容连接在一起。我认为这并不能解决将文档写入zip文件的使用情况。我对DMSDK的经验是,ExportListener应该用于将每个文档添加到zip的使用者。这就是ml javaclient util中支持的内容—您是对的。这并不能解决将文档写入zip文件的用例。他希望从服务器提取的所有内容都进入一个文件,然后希望单独从该文件创建一个zip文件,他希望在使用ml javaclient util job转换为zip文件时会发生这种情况。我已经创建了上述代码,应该满足客户的用例。感谢@Vivek将其转换为zip。我可以在上述代码中实现
    writetozipconsumer
    类。不,writetozipconsumer接受文档记录。创建文件后,它就是普通的java代码。您可以看到将输出文件转换为zip文件的链接。我认为这并不能解决将文档写入zip文件的用例。我对DMSDK的经验是,ExportListener应该用于将每个文档添加到zip的使用者。这就是ml javaclient util中支持的内容—您是对的。这并不能解决将文档写入zip文件的用例。他希望从服务器提取的所有内容都进入一个文件,然后希望单独从该文件创建一个zip文件,他希望在使用ml javaclient util job转换为zip文件时会发生这种情况。我已经创建了上述代码,应该满足客户的用例。感谢@Vivek将其转换为zip。我可以在上述代码中实现
    writetozipconsumer
    类。不,writetozipconsumer接受文档记录。创建文件后,它就是普通的java代码。您可以看到此链接以将输出文件转换为zip文件。