Optional getDefaultFinalDistinctClause()

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());
    }