MarkLogic Java API如何连接两个文档?

3
有没有一种利用MarkLogic的Java API在MarkLogic数据库中合并两个文档的方法?
例如,假设有以下两个文档:
doc1.xml:
<a>    
    <id>123</id>
    <doc2ID>111</doc2ID>
    <first_name>John</first_name>
</a>

doc2.xml:

<b>
    <id>111</id>
    <doc1ID>123</doc1ID>
    <last_name>Smith</last_name>
    <age>25</age>
</b>

我能在MarkLogic中执行以下查询吗:检索所有名字为John,姓氏为Smith且年龄大于20岁的记录吗? 在SQL中,您可以执行以下操作: 选择a.first_name,b.last_name from doc1 a JOIN doc2 b ON(a.doc2ID = b.id)WHERE a.first_name = 'John' and b.last_name = 'Smith' and b.age > 24
2个回答

2
如果你只想使用一个文档作为另一个文档的过滤器,你可以发送带有自定义约束条件的查询选项来实现子查询。
如果你真的想要连接文档,你需要创建一个资源服务扩展,该扩展在cts:search()级别实现连接。
然而,退一步来看,你应该考虑对文档进行去规范化处理,这样你就不需要像在关系数据库中那样频繁地连接。你提供的文档本质上是表行,这并没有充分利用文档数据库的强大灵活性。在文档数据库中使用关系模型和关系查询并不是最佳方法。

0

您的示例不是有效的xml(没有根元素),并且可能有多个子元素。如果没有有效的xml,很难给出精确的答案。

一般的方法是使用FLOWR表达式:

for $master in doc("doc1.xml")//something,   
    $detail in doc("doc2.xml")//something 
where $master/doc2ID = $detail/id
return ($master/first_name/string(), $detail/last_name/string())

这似乎是 XQuery,而该语言不仅适用于 Java API,也适用于 Java XCC。 - user2370664
XQuery现在可以通过资源扩展和ServerEvaluationCall在Java客户端API中使用。 - Sam Mefford

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接