Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/search/2.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
Search 如何在Marklogic中搜索除一个目录外的所有目录中的记录_Search_Directory_Marklogic - Fatal编程技术网

Search 如何在Marklogic中搜索除一个目录外的所有目录中的记录

Search 如何在Marklogic中搜索除一个目录外的所有目录中的记录,search,directory,marklogic,Search,Directory,Marklogic,我尝试使用marklogic java api在数据库中搜索XML,但有以下限制: 1) 特定的XML标记必须包含我给定的ex:tradeId值必须等于我传递的值 2) 结果必须在我提供的集合中 3) 结果可以位于marklogic数据库中的任何位置,但不在一个特定目录中 我没有第三点的答案。满足前两个条件的记录中很少有URI以/TRADES/*开头,因此我想搜索除目录“/TRADES”之外的所有地方 这就是我的代码的外观: public static List<DocumentPage&

我尝试使用marklogic java api在数据库中搜索XML,但有以下限制:

1) 特定的XML标记必须包含我给定的ex:tradeId值必须等于我传递的值

2) 结果必须在我提供的集合中

3) 结果可以位于marklogic数据库中的任何位置,但不在一个特定目录中

我没有第三点的答案。满足前两个条件的记录中很少有URI以/TRADES/*开头,因此我想搜索除目录“/TRADES”之外的所有地方

这就是我的代码的外观:

public static List<DocumentPage> getResults() throws KeyManagementException, NoSuchAlgorithmException,
        KeyStoreException, CertificateException, IOException {


    String tradeId = "XYZ";

    DatabaseClient client = getDBClient();
    QueryManager queryMgr = client.newQueryManager();
    XMLDocumentManager xmlMngr = client.newXMLDocumentManager();

    StringHandle rawHandle = new StringHandle();
    rawHandle.withFormat(Format.XML).set(getQueryToFetchMessagesByTradeId(tradeId));
    RawQueryByExampleDefinition querydef = queryMgr.newRawQueryByExampleDefinition(rawHandle);

    querydef.setCollections("/messages/processed", /messages/toBeProcessed");
    querydef.setDirectory("/");

    return getDocumentPageList(querydef, client);
}

private static String getQueryToFetchMessagesByTradeId(String tradeId) {

    String query = "<q:qbe xmlns:q=\"http://marklogic.com/appservices/querybyexample\">\n" + "<q:query>\n<q:word>"
            + "<tradeId tradeIdScheme=" + "\"http://www.abcd.com/internalid/trade-id\"" + ">" + tradeId
            + "</tradeId></q:word>\n" + "</q:query>\n" + "</q:qbe>";
    return query;
}
publicstaticlist getResults()抛出KeyManagementException、nosuchagorithmexception、,
KeyStoreException、CertificateException、IOException{
字符串tradeId=“XYZ”;
DatabaseClient=getDBClient();
QueryManager queryMgr=client.newQueryManager();
XMLDocumentManager xmlMngr=client.newXMLDocumentManager();
StringHandle rawHandle=新的StringHandle();
withFormat(Format.XML).set(getQueryToFetchMessagesByTradeId(tradeId));
RawQueryByExampleDefinition QueryDeff=queryMgr.newRawQueryByExampleDefinition(rawHandle);
querydf.setCollections(“/messages/processed”,/messages/toBeProcessed”);
querydef.setDirectory(“/”);
返回getDocumentPageList(querydef,客户端);
}
私有静态字符串getQueryToFetchMessagesByTradeId(字符串tradeId){
字符串查询=“\n”+“\n”
+“”+tradeId
+“\n”+”\n“+”;
返回查询;
}

非常感谢您的帮助。

我看不到在“按示例语法查询”中组合元数据(目录)查询的选项。因此,您必须改用结构化查询。我发现它们在Java中更具可读性,因为它们不需要字符串连接。请像这样使用StructuredQueryBuilder:

StructuredQueryBuilder qb = new StructuredQueryBuilder();
StructuredQueryDefinition querydef =
  qb.and(
      qb.containerQuery(
        qb.element(new QName("http://www.abcd.com/internalid/trade-id", "tradeId")),
        qb.and(
          qb.term( tradeId ),
          qb.value(
            qb.elementAttribute(
              qb.element(new QName("http://www.abcd.com/internalid/trade-id", "tradeId")),
              qb.attribute("tradeIdScheme")
            ),
            "http://www.abcd.com/internalid/trade-id"
          )
        )
      ),
      qb.not(
        qb.directory(1, "/TRADES/")
      )
  );

querydef.setCollections("/messages/processed", "/messages/toBeProcessed")

return getDocumentPageList(querydef, client);

不确定Java实现,但是
cts:Not query(cts:directory query(“TRADES”,“1”))
将是XQuery的等价物。嗨,山姆,我只需要搜索具有以下XML标记的XML:抱歉,耽搁了。我更新了我的答案以包含属性查询。