Xquery Marklogic 8 Java中的聚合

Xquery Marklogic 8 Java中的聚合,xquery,marklogic,Xquery,Marklogic,我试图根据元素值对所有文档进行分组。通过X-Query,我可以得到元素值及其对应的计数。但是,使用JavaAPI我无法做到这一点 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])); 爪哇: QueryMa

我试图根据元素值对所有文档进行分组。通过X-Query,我可以得到元素值及其对应的计数。但是,使用JavaAPI我无法做到这一点

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]));
爪哇:

QueryManager qryMgr=client.newQueryManager();
StructuredQueryBuilder qb=新StructuredQueryBuilder();
StructuredQueryDefinition querydef=qb.containerQuery(qb.element(“”),qb.term(“A”);
SearchHandle=新的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的响应将包含与您的查询匹配的所有值和频率。检查RESTAPI文档以构建这样的搜索选项文件

可以很好地使用XQuery。如果可能的话,请您也与options共享示例Java代码。因为,我对Marklogic还不熟悉。谢谢有关如何设置和查询范围索引的示例,请参见。请参阅,了解如何在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());
for $val in cts:element-values(xs:QName("element_name"))
return text{$val, cts:frequency($val)}