in aliyun-sdk-opensearch/src/main/java/com/aliyun/opensearch/search/AbstractSubClausesBuilder.java [335:383]
Optional<String> getDefaultFinalDistinctClause() {
if (!params.isSetFinalDistinct()) {
return Optional.absent();
}
FinalDistinct finalDistinct = params.getFinalDistinct();
List<String> kvPairs = Lists.newArrayList();
append(kvPairs, DISTINCT_CLAUSE_DIST_TYPE, ":",
finalDistinct.getType().name().toLowerCase());
List<String> distKeyList = Lists.newArrayList();
List<String> distCountList = Lists.newArrayList();
for (FinalDistinctKey key : finalDistinct.getKeyList()) {
distKeyList.add(key.getKey());
distCountList.add(String.valueOf(key.getCount()));
}
String distKey = Joiner.on(";").join(distKeyList);
String distCount = Joiner.on(";").join(distCountList);
append(kvPairs, DISTINCT_CLAUSE_DIST_KEY, ":", distKey);
append(kvPairs, DISTINCT_CLAUSE_DIST_COUNT, ":", distCount);
if (finalDistinct.isSetSort()) {
String distSort = Joiner.on(";").join(finalDistinct.getSort());
append(kvPairs, DISTINCT_CLAUSE_DIST_SORT, ":", distSort);
}
if (finalDistinct.isSetSpecialCount()) {
List<String> specialCountList = Lists.newArrayList();
for (Map.Entry<String, Integer> entry : finalDistinct.getSpecialCount().entrySet()) {
StringBuilder specialCountBuilder = new StringBuilder();
specialCountBuilder.append(entry.getKey());
specialCountBuilder.append("@");
specialCountBuilder.append(entry.getValue());
specialCountList.add(specialCountBuilder.toString());
}
String distSpecialCount = Joiner.on("|").join(specialCountList);
append(kvPairs, DISTINCT_CLAUSE_DIST_SPECIAL_COUNT, ":", distSpecialCount);
}
if (finalDistinct.isSetCustomFinalDistinct()) {
for (Map.Entry<String, String> entry : finalDistinct.getCustomFinalDistinct().entrySet()) {
append(kvPairs, entry.getKey(), ":", entry.getValue());
}
}
StringBuilder queryClause = new StringBuilder(FinalDistinctClauseKey).append("=");
return Optional.of(queryClause.append(Joiner.on(",").join(kvPairs)).toString());
}