我有一个文档,其属性 userId:sri
、collection
为“sony”,并且
文档内容如下所示:
<?xml version="1.0" encoding="UTF-8"?>
<songs>
<song>
<title>Against the Wind</title>
<artist>Bob Seger</artist>
<song>
<song>
<title>one love</title>
<artist>Bob Marley</artist>
<song>
<song>
<title>Beat it</title>
<artist>Micheal Jackson</artist>
<song>
<songs>
我想按 artist
编写一个查询,其属性 userId
等于“XYZ”,集合名称等于“abc”,artist
等于“per”。最终结果应如下所示:
<song>
<title>MNO</title>
</song>
最佳答案
您可以对数据进行建模以将每首歌曲存储为单独的文档吗?在 MarkLogic 中建模的一个最佳实践是使用文档作为关系数据库中的行的等效项,并使用集合作为表的等效项。
您可以将 userId 存储在文档中吗? MarkLogic 中建模的另一个最佳实践是使用信封模式(与 HTML 头和正文一样),以便元数据和数据都位于同一文档中。这样,查询就可以通过读取单个片段来获取元数据和数据(速度更快)。
如果您对模型进行建议的更改,则在 Java API 中使用 StructuredQueryBuilder 的查询将类似于以下代码:
QueryManager queryMgr = client.newQueryManager();
StructuredQueryBuilder qb = new StructuredQueryBuilder();
StructuredQueryDefinition querydef = qb.and(
qb.collection("abc"),
qb.value(element("userId"), "xyz"),
qb.value(element("artist"), "pqr")
);
SearchHandle resultsHandle = queryMgr.search(querydef, new SearchHandle());
要迭代结果,请参阅此示例:
有关匹配集合的更多详细信息:
有关匹配值的更多详细信息:
如果必须匹配属性中的元数据,可以使用properties()构建器函数,但这不是最佳实践:
希望有帮助,
关于marklogic - 使用 MarkLogic Java API,搜索和检索格式化的 XML 匹配属性、集合和内容,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30850248/