Сделайте подсчет для различных значений в Elastic search - PullRequest
0 голосов
/ 01 октября 2018

У меня есть дубликаты идентификаторов в моей БД, и я хочу получить счет для отдельных значений, только похожих на SELECT COUNT (столбец DISTINCT) FROM в SQL.

public SearchSourceBuilder createQueryForCount(QueryBuilder queryBuilder, int start, boolean fetchSource, String field){
        logger.info("Creating aggregation count ");

        QueryBuilder finalQuery = QueryBuilders.boolQuery().must(queryBuilder);

        AggregationBuilder aggregationCount = AggregationBuilders.terms("agg").field(USER_ID)
                .subAggregation(AggregationBuilders.topHits("top").explain(false).from(start))
                .subAggregation(AggregationBuilders.count("count").field(field));

        return new SearchSourceBuilder()
                .query(finalQuery)
                .fetchSource(fetchSource)
                .from(start)
                .aggregation(aggregationCount);

    }

Есть ли способ сделать отдельныйсчитать в упругом поиске?

Ответы [ 2 ]

0 голосов
/ 01 октября 2018

Чтобы получить счет различных значений в упругом поиске, используйте агрегирование кардинальности.

0 голосов
/ 01 октября 2018

Вы должны искать Агрегирование кардинальности.Javadocs доступны здесь .Кроме того, помните, что эластичный поиск использует приближение для компромисса с производительностью.Вы можете контролировать это с помощью Precision_threshold до некоторой степени.Хорошее объяснение доступно здесь .

...