如何在 ElasticSearch 中为聚合创建子字段关键字
How to create subfield keyword for Aggregation in ElasticSearch
我正在尝试从 ElasticSearch 索引中获取聚合结果
例如,我的索引中的值
"_source": {
"ctry": "abc",
"totalentry": 1,
"entrydate": "2022-01-06"
},
"_source": {
"ctry": "abc",
"totalentry": 3,
"entrydate": "2022-01-07"
},
"_source": {
"ctry": "xyz",
"totalentry": 1,
"entrydate": "2022-01-08"
}
预期的结果应该是根据国家
获得总条目
ctry : abc
totalentry : 4
ctry : xyz
totalentry : 1
我的聚合查询
QueryBuilder querybuilder = QueryBuilders.boolQuery().must(QueryBuilders.rangeQuery("entrydate")
.gte("2022-01-01").lte ("2022-01-31"));
TermsAggregationBuilder groupBy = AggregationBuilders.terms("ctry").field("ctry");
SearchQuery searchQuery = new NativeSearchQueryBuilder()
.withQuery(querybuilder).addAggregation(groupBy)
.build();
List<Sample> records = elasticsearchRestTemplate.queryForList(searchQuery, Sample.class);
以上聚合查询返回 3 个记录而不是 2 个聚合结果。
我的索引属性
"ctry": {
"type": "keyword"
如何改成下面这样,希望能得到正确的聚合结果
ctry": {
"type": "text",
"fields": {
"keyword": {
"ignore_above": 256,
"type": "keyword"
}
}
}
我的java代码
@Document(indexName="sample", createIndex=true, shards = 4)
public class Sample {
@Field(type = FieldType.Keyword)
private String ctry;
您使用的是 Spring Data Elasticsearch 的过时版本。 queryForList
变体在 4.0 中已弃用,并已在 4.2 中删除。
您需要使用 search...()
方法之一 return 一个 SearchHits<Sample>>
对象。这将包含您查询的文档 和 聚合。
我正在尝试从 ElasticSearch 索引中获取聚合结果
例如,我的索引中的值
"_source": {
"ctry": "abc",
"totalentry": 1,
"entrydate": "2022-01-06"
},
"_source": {
"ctry": "abc",
"totalentry": 3,
"entrydate": "2022-01-07"
},
"_source": {
"ctry": "xyz",
"totalentry": 1,
"entrydate": "2022-01-08"
}
预期的结果应该是根据国家
获得总条目ctry : abc
totalentry : 4
ctry : xyz
totalentry : 1
我的聚合查询
QueryBuilder querybuilder = QueryBuilders.boolQuery().must(QueryBuilders.rangeQuery("entrydate")
.gte("2022-01-01").lte ("2022-01-31"));
TermsAggregationBuilder groupBy = AggregationBuilders.terms("ctry").field("ctry");
SearchQuery searchQuery = new NativeSearchQueryBuilder()
.withQuery(querybuilder).addAggregation(groupBy)
.build();
List<Sample> records = elasticsearchRestTemplate.queryForList(searchQuery, Sample.class);
以上聚合查询返回 3 个记录而不是 2 个聚合结果。 我的索引属性
"ctry": {
"type": "keyword"
如何改成下面这样,希望能得到正确的聚合结果
ctry": {
"type": "text",
"fields": {
"keyword": {
"ignore_above": 256,
"type": "keyword"
}
}
}
我的java代码
@Document(indexName="sample", createIndex=true, shards = 4)
public class Sample {
@Field(type = FieldType.Keyword)
private String ctry;
您使用的是 Spring Data Elasticsearch 的过时版本。 queryForList
变体在 4.0 中已弃用,并已在 4.2 中删除。
您需要使用 search...()
方法之一 return 一个 SearchHits<Sample>>
对象。这将包含您查询的文档 和 聚合。