Using Java to Implement MarkLogic Aggregation Queries
Using MarkLogic for aggregate queries in Java can be done using MarkLogic's Java Client API. Below are some common examples of aggregation queries and corresponding Java code examples.
Firstly, you need to add the MarkLogic Java Client API to your project's Maven dependencies. The following are the required Maven coordinates:
<dependency>
<groupId>com.marklogic</groupId>
<artifactId>marklogic-client-api</artifactId>
<version>5.4.0</version>
</dependency>
1. Get Total Aggregation Query:
import com.marklogic.client.DatabaseClient;
import com.marklogic.client.DatabaseClientFactory;
import com.marklogic.client.query.AggregateResult;
import com.marklogic.client.query.CountedDistinctValue;
import com.marklogic.client.query.QueryManager;
import com.marklogic.client.query.StructuredQueryBuilder;
import com.marklogic.client.query.StructuredQueryDefinition;
public class TotalCountAggregationExample {
public static void main(String[] args) {
//Create a database client connection
DatabaseClient client = DatabaseClientFactory.newClient("<hostname>", 8000,
new DatabaseClientFactory.DigestAuthContext("<username>", "<password>"));
//Create Query Manager
QueryManager queryManager = client.newQueryManager();
//Creating Query Definitions Using a Structured Query Builder
StructuredQueryBuilder qb = queryManager.newStructuredQueryBuilder();
StructuredQueryDefinition query = qb.collection("your-collection");
//Execute Aggregate Query
AggregateResult totalCount = queryManager.aggregate(query, qb.count());
//Get Total
System.out.println("Total count: " + totalCount.get("xs:integer", Integer.class));
//Release resources
client.release();
}
}
2. Group aggregation query:
import com.marklogic.client.DatabaseClient;
import com.marklogic.client.DatabaseClientFactory;
import com.marklogic.client.query.AggregateResult;
import com.marklogic.client.query.QueryManager;
import com.marklogic.client.query.StructuredQueryBuilder;
import com.marklogic.client.query.StructuredQueryDefinition;
import com.marklogic.client.query.ValuesDefinition;
public class GroupByAggregationExample {
public static void main(String[] args) {
//Create a database client connection
DatabaseClient client = DatabaseClientFactory.newClient("<hostname>", 8000,
new DatabaseClientFactory.DigestAuthContext("<username>", "<password>"));
//Create Query Manager
QueryManager queryManager = client.newQueryManager();
//Define grouping fields using ValuesDefinition
ValuesDefinition valuesDefinition = queryManager.newValuesDefinition("your-grouping-field");
//Create Query Definition
StructuredQueryBuilder qb = queryManager.newStructuredQueryBuilder();
StructuredQueryDefinition query = qb.collection("your-collection");
//Execute group aggregation query
AggregateResult groupByResult = queryManager.aggregate(query, qb.groupBy(valuesDefinition, qb.count()));
//Traverse grouping results
for (AggregateResult group : groupByResult) {
String groupValue = group.get("your-grouping-field", String.class);
int count = group.get("xs:integer", Integer.class);
System.out.println(groupValue + ": " + count);
}
//Release resources
client.release();
}
}
These examples demonstrate how to use Java to implement different types of aggregate queries for MarkLogic. You can adjust the query definition and aggregation options according to your own needs. Ensure to replace the correct host name, port, username, password, set name, and field name in the code example.
Please note that the above example only covers basic aggregation queries. MarkLogic provides more advanced aggregation features and options, and you can refer to the official documentation for further guidance.