gpt4 book ai didi

java : get distinct values from an elasticsearch index

转载 作者:塔克拉玛干 更新时间:2023-11-02 19:48:07 24 4
gpt4 key购买 nike

目前我正在使用我编写的这段代码来从字段中获取值:

QueryBuilder qb = QueryBuilders.matchPhrasePrefixQuery("tagName", "june");
SearchResponse response = esclient.prepareSearch(index).setTypes(type)
.setQuery(qb)
.execute().actionGet();

SearchHit[] hits = response.getHits().getHits();
System.out.println(hits.length);

for (SearchHit hit : hits) {
Map map = hit.getSource();
System.out.println((String) map.get("tagName"));
strings.add((String) map.get("tagName"));
}

但是是否有其他方法可以从索引中获取不同的值?或者上面的可以修改吗?

最佳答案

您可以使用 terms aggregation

这要求字段不被解析

    public static List<String> getDistinctAgg(TransportClient client, String indexName, String fieldName, int requiredSize) {
List<String> values = new LinkedList<>();

try {


TermsAggregationBuilder aggregationBuilder = new TermsAggregationBuilder(fieldName + "_Agg", ValueType.STRING);
aggregationBuilder.field(fieldName);
aggregationBuilder.bucketCountThresholds(new TermsAggregator.BucketCountThresholds(1, 1, requiredSize, 5));

QueryBuilder query = QueryBuilders.matchAllQuery();


SearchResponse response = client.prepareSearch(indexName)
.setSearchType(SearchType.DFS_QUERY_THEN_FETCH)
.setQuery(query).addAggregation(aggregationBuilder).setSize(0).get();
if (response == null) return null;

StringTerms terms = ((StringTerms) response.getAggregations().get(fieldName + "_Agg"));

if (terms != null) {

List<Terms.Bucket> buckets = terms.getBuckets();
if (buckets != null && buckets.size() > 0) {


for (Terms.Bucket bucket : buckets) {
values.add(bucket.getKeyAsString());
}
}
return values;
}

} catch (Exception e) {
return null;
}
return null;
}

关于java : get distinct values from an elasticsearch index,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48748439/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com