xquery - Marklogic 8 Java 中的聚合

标签 xquery marklogic

我正在尝试根据元素值对所有文档进行分组。通过X-Query,我能够获取元素值及其相应的计数。但是,使用 Java API 我无法做到这一点。

X 查询:

for $name in distinct-values(doc()/document/<element_name>)
return fn:concat("Element Value:",$name,", Count:",fn:count(doc()/document/[element_name eq $name]));

输出:

Element Value:A, Count:100
Element Value:B, Count:200

Java:

QueryManager qryMgr = client.newQueryManager();
StructuredQueryBuilder qb = new StructuredQueryBuilder();
StructuredQueryDefinition querydef = qb.containerQuery(qb.element("<element_name>"), qb.term("A"));
SearchHandle handle = new SearchHandle();
qryMgr.search(querydef, handle);
System.out.println(handle.getTotalResults());

通过这种方法,我只能获取特定值的文档计数。有什么办法可以统计所有文档的数量吗?请帮忙!

最佳答案

如果我理解您的用例,您可以使用范围索引来解决这个问题,即您想知道特定元素的所有值是什么,然后有多少文档具有该值。这正是范围索引的用途。

尝试在“element_name”上添加范围索引 - 您可以使用 ML Admin 应用程序 - 转到您的数据库并单击“元素范围索引”。

在 XQuery 中,您可以执行如下操作:

for $val in cts:element-values(xs:QName("element_name"))
return text{$val, cts:frequency($val)}

使用 Java 客户端,您可以通过向搜索选项文件添加基于范围的约束来执行相同的操作,然后 SearchManager 的响应将包含与您的查询匹配的所有值和频率。检查 REST API 文档以构建此类搜索选项文件。

关于xquery - Marklogic 8 Java 中的聚合,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50718004/

相关文章:

node.js - MarkLogic node.js api - 按总和分组

sql-server - XQuery 获取属性列表

xquery - XQuery 中的变量范围?

xml - 如何使用 R 的 XML 库进行 xpath 查询?

optimization - MarkLogic XQuery 尾调用优化

java - 使用 Marklogic 的 Java API 和 JAXB 对文档进行列表/搜索/分页

marklogic - 与搜索 :suggest 混淆

maven - 如何在 xquery 中访问环境变量?

full-text-search - 忽略 cts :search 中的元素

XQuery 在谓词中使用函数