elasticsearch-aggregation 相关问题

使用 Kibana 如何可视化用户网站访问的基数

假设我有包含用户 ID 和他们访问我的网站的时间戳的文档。我想知道有多少用户访问过该网站 x 次。我一直找不到合适的组合...

回答 1 投票 0

新 Java 客户端中的术语聚合 - 是否有获取结果的通用方法?

在新的 API Java 客户端中创建聚合时,我遇到了问题。 这就是我创建请求的方式。我的一些字段名称是字符串类型。有些可以是长的或双的等 地图 在新的 API Java 客户端中创建聚合时,我遇到了一个问题。 这就是我创建请求的方式。我的一些字段名称是字符串类型。有些可以是长的或双的等 Map<String, Aggregation> termsAggregationMap= new HashMap<>(); for (String fieldName : fieldNames) { Aggregation termsAggregation = new Aggregation.Builder() .terms(new TermsAggregation.Builder().field(fieldName).order( NamedValue.of("_key", SortOrder.Asc)) .build()) .build(); map.put(fieldName, termsAggregation); } SearchRequest searchRequest = new SearchRequest.Builder() .index(indexAliasName).size(0) .aggregations(termsAggregationMap) .build(); 当我阅读它时,我发现我必须知道聚合类型:string、long、double 等.. 例如,为了读取字符串的聚合,我需要使用 sterms Map<String, Aggregate> aggregationsMap = searchResponse.aggregations(); Aggregate aggregation = aggregationsMap.get(aggregationName); for (var entry : termAggregation.sterms().buckets().array()) { //does something with it entry.key().stringValue(); entry.docCount(); } 但为了获得长期价值,我需要使用lterms方法 termAggregation.lterms().buckets().array() 是否有更好的方法来完成一件通用的事情,而不是像旧客户端中那样每次都检查聚合类型? 我探讨了你的问题。我找不到更好的方法来通用化解决方案。 lterms、sterms、dateHistogram 等方法不可通用(还有 isLterms、isSterms、isDateHistogram 等方法) 所以我的解决方案是枚举 public enum AggregationKind { TERMS_STRING { @Override boolean identify(Aggregate aggregation) { return aggregation.isSterms(); } @Override MultiBucketAggregateBase<?> getSpecificAggregation(Aggregate aggregation) { return aggregation.sterms(); } }, TERMS_LONG { @Override boolean identify(Aggregate aggregation) { return aggregation.isLterms(); } @Override MultiBucketAggregateBase<?> getSpecificAggregation(Aggregate aggregation) { return aggregation.lterms(); } }, DATA_HISTOGRAM { @Override boolean identify(Aggregate aggregation) { return aggregation.isDateHistogram(); } @Override MultiBucketAggregateBase<?> getSpecificAggregation(Aggregate aggregation) { return aggregation.dateHistogram(); } }; abstract boolean identify(Aggregate aggregation); abstract MultiBucketAggregateBase<?> getSpecificAggregation( Aggregate aggregation); public static List<?> getBucketList(Aggregate aggregation) { AggregationKind[] aggregationKinds = AggregationKind.values(); for (AggregationKind aggregationKind : aggregationKinds) { if (aggregationKind.identify(aggregation)) { MultiBucketAggregateBase<?> specificAggregation = aggregationKind .getSpecificAggregation(aggregation); return specificAggregation.buckets().array(); } } return Collections.emptyList(); } } 使用 SearchResponse<Void> response = elasticsearchClient.search(searchRequest, Void.class); List<StringTermsBucket> buckets = (List<StringTermsBucket>) AggregationKind .getBucketList(response.aggregations().get(aggregationName)); 如您所见,此解决方案适用于所有 Elasticsearch 存储桶聚合(MultiBucketAggregateBase子类(直接和传递))

回答 1 投票 0

elasticsearch 中术语聚合的可用存储桶键的自动完成建议

在用户界面上,我需要显示自动完成建议,该建议为我提供包含搜索术语的术语。例如如果我搜索,我可能会得到秘鲁、佩里、卡斯珀、内珀维尔、库珀斯敦等建议...

回答 2 投票 0

Elastic Search 中的百分比聚合仅给出百分位数值,就像缺失参数中给出的值一样

我只是简化了我的查询,如下所示 GET /索引名称/_search { “来自”:0, “询问”: { “布尔”:{ “筛选”: [ { “条款”:...

回答 1 投票 0

新 Jave 客户端中的术语聚合 - 是否有通用方法来获取结果?

在新的 API Java 客户端中创建聚合时,我遇到了问题。 这就是我创建请求的方式。我的一些字段名称是字符串类型。有些可以是长的或双的等 地图 在新的 API Java 客户端中创建聚合时,我遇到了一个问题。 这就是我创建请求的方式。我的一些字段名称是字符串类型。有些可以是长的或双的等 Map<String, Aggregation> termsAggregationMap= new HashMap<>(); for (String fieldName : fieldNames) { Aggregation termsAggregation = new Aggregation.Builder() .terms(new TermsAggregation.Builder().field(fieldName).order( NamedValue.of("_key", SortOrder.Asc)) .build()) .build(); map.put(fieldName, termsAggregation); } SearchRequest searchRequest = new SearchRequest.Builder() .index(indexAliasName).size(0) .aggregations(termsAggregationMap) .build(); 当我阅读它时,我发现我必须知道聚合类型:string、long、double 等.. 例如,为了读取字符串的聚合,我需要使用 sterms Map<String, Aggregate> aggregationsMap = searchResponse.aggregations(); Aggregate aggregation = aggregationsMap.get(aggregationName); for (var entry : termAggregation.sterms().buckets().array()) { //does something with it entry.key().stringValue(); entry.docCount(); } 但为了获得长期价值,我需要使用lterms方法 termAggregation.lterms().buckets().array() 有没有更好的方法来做一件通用的事情,而不是像旧客户端那样每次都检查聚合类型? 我探索了你的问题。我找不到更好的方法来通用化解决方案。 lterms、sterms、dateHistogram 等方法不可通用(还有 isLterms、isSterms、isDateHistogram 等方法) 所以我的解决方案是枚举 public enum AggregationKind { TERMS_STRING { @Override boolean identify(Aggregate aggregation) { return aggregation.isSterms(); } @Override MultiBucketAggregateBase<?> getSpecificAggregation(Aggregate aggregation) { return aggregation.sterms(); } }, TERMS_LONG { @Override boolean identify(Aggregate aggregation) { return aggregation.isLterms(); } @Override MultiBucketAggregateBase<?> getSpecificAggregation(Aggregate aggregation) { return aggregation.lterms(); } }, DATA_HISTOGRAM { @Override boolean identify(Aggregate aggregation) { return aggregation.isDateHistogram(); } @Override MultiBucketAggregateBase<?> getSpecificAggregation(Aggregate aggregation) { return aggregation.dateHistogram(); } }; abstract boolean identify(Aggregate aggregation); abstract MultiBucketAggregateBase<?> getSpecificAggregation( Aggregate aggregation); public static List<?> getBucketList(Aggregate aggregation) { AggregationKind[] aggregationKinds = AggregationKind.values(); for (AggregationKind aggregationKind : aggregationKinds) { if (aggregationKind.identify(aggregation)) { MultiBucketAggregateBase<?> specificAggregation = aggregationKind .getSpecificAggregation(aggregation); return specificAggregation.buckets().array(); } } return Collections.emptyList(); } } 使用 SearchResponse<Void> response = elasticsearchClient.search(searchRequest, Void.class); List<StringTermsBucket> buckets = (List<StringTermsBucket>) AggregationKind .getBucketList(response.aggregations().get(aggregationName)); 如您所见,此解决方案适用于所有 Elasticsearch 存储桶聚合(MultiBucketAggregateBase子类(直接和传递))

回答 1 投票 0

如何在Elasticsearch中过滤字段聚合中使用的列表类型字段的聚合结果?

我想对elasticsearch中的列表字段进行聚合。但是在做同样的事情时,因为这是列表字段,如果列表中还有其他值以及搜索值,那么聚合也将...

回答 1 投票 0

Elasticsearch - 不区分大小写的聚合不起作用

ES 版本 - 7.17.7 我有一个索引,我对其运行聚合以获取与某些正则表达式匹配的所有字段。这应该不区分大小写,即 纽约应该匹配纽约和纽约和新

回答 1 投票 0

在聚合 ElasticSearch 中增强存储桶

我有一个 Elasticsearch 查询,用于按文档中名为“类别”的文本字段对结果进行分组。我的 _docs 中还有一个键称为整数类型的 id。现在,有两个要求...

回答 1 投票 0

elasticsearch 字符串聚合数组

我需要一个聚合查询来获取包含所有根文件夹的存储桶。我的elasticsearch中的所有文档都有一个名为path的字段,我在其中存储一个数组,其中包含文档所在的路径(...

回答 2 投票 0

Elasticsearch/OpensSearch 查询产品变体

我正在使用 AWS OpenSearch 数据库,它是 Elasticsearch 的一个分支。我的用例如下: 一个产品包含一个ID、一个标题、一个品牌、一个productGroupId 查询:给定一个字符串,查找所有产品...

回答 1 投票 0

如何根据另一个聚合的具体值聚合elasticsearch结果?

我无法根据之前聚合的结果正确过滤数据。 我的 Elasticsearch 数据有以下映射: “特性”: { “天”: { “输入&...

回答 1 投票 0

Elasticsearch 查询从每个索引检索固定数量的文档

我有一个包含多个索引的 Elasticsearch 设置(假设 a、b、c、d、e 和 f)。我的目标是总共检索 20 个文档,每个索引恰好有 4 个文档。但是,如果有任何索引...

回答 1 投票 0

Elasticsearch 按热门点击参数中的字段排序

我试图通过搜索查询 Elasticsearch 中的 top_hits 参数对数据进行排序,但不知何故它没有影响任何东西。谁能帮我解决这个问题吗? 所以我尝试像有些人一样使用排序......

回答 1 投票 0

如何在elasticsearch中按分组字段计数进行排序?

我的数据对象包含 3 个字符串字段:部分、类别和用户名。 我想按类别和用户名进行分组,并找出前 20 个“部分”及其在分组中的计数...

回答 1 投票 0

Elasticsearch 在热门点击聚合中按字段排序

我试图通过搜索查询 Elasticsearch 中的 top_hits 参数对数据进行排序,但不知何故它没有影响任何东西。谁能帮我解决这个问题吗? 所以我尝试像有些人一样使用排序......

回答 1 投票 0

Elasticsearch“ignore_above”问题

索引映射(Kibana) 获取 /new_index/_mapping 我已经将“ignore_above”重置为更大的尺寸,但当我查询搜索时,它似乎不适用于我的索引。 我听其他人说

回答 1 投票 0

如何限制弹性搜索中术语聚合的响应大小

我使用下面的弹性搜索查询并获取响应,但如何限制查询中指定的每个 itemDetails.itemId 的响应大小。 弹性搜索版本:8.7.1 弹性搜索示例...

回答 1 投票 0

在弹性搜索中应用术语聚合之前如何对数据进行排序

我们希望在应用术语聚合之前使用几个字段对数据进行排序,尝试使用术语并对子聚合进行排序,使用哪种排序有效,但是术语聚合给出了重复的记录...

回答 1 投票 0

这是一种使用弹性搜索在检索搜索结果时将特定字段数据替换为空的方法吗?

我需要在nestjs中使用弹性搜索来查询以从索引中检索一些结果。 要求:我需要所有结果,包括 access_level: "Restricted" 和 access_level: "Unrestri...

回答 1 投票 0

弹性转储从 8.9 到 2.3 抛出错误

当我运行以下命令时 C:\Users\ASDF>elasticdump --input=http://用户名:pwd@domainname/indexnameone/ --output=http://用户名:pwd@domainnameone/indexnametwo --type=data 错误是

回答 1 投票 0

© www.soinside.com 2019 - 2024. All rights reserved.