当前位置: 首页 > 面试题库 >

Elasticsearch分析百分比

艾照
2023-03-14
问题内容

我正在使用Elasticsearch 1.7.3累积用于分析报告的数据。

我有一个包含文档的索引,其中每个文档都有一个名为“ duration”的数字字段(请求花费了几毫秒)和一个名为“
component”的字符串字段。可能有许多具有相同组件名称的文档。

例如。

{"component": "A", "duration": 10}
{"component": "B", "duration": 27}
{"component": "A", "duration": 5}
{"component": "C", "duration": 2}

我想生成一份报告,说明每个组件:

此组件的所有“持续时间”字段的总和。

A: 15
B: 27
C: 2

此总和在 所有 文档的总期限中所占的百分比。在我的例子中

A: (10+5) / (10+27+5+2) * 100
B: 27 / (10+27+5+2) * 100
C: 2 / (10+27+5+2) * 100

在每个组件中占每个组件的文档百分比。

A: 2 / 4 * 100
B: 1 / 4 * 100
C: 1 / 4 * 100

如何使用Elasticsearch 1.7.3做到这一点?


问题答案:

使用ES 1.7.3,无法基于两个不同聚合的结果来计算数据,但是,在ES
2.0中,可以使用管道聚合来完成此操作。

但是,您要问的内容并不太复杂,无法在客户端使用1.7.3进行。如果使用下面的查询,您将获得获得期望数字所需要的一切:

POST components/_search
{
   "size": 0,
   "aggs": {
      "total_duration": {
         "sum": {
            "field": "duration"
         }
      },
      "components": {
         "terms": {
            "field": "component"
         },
         "aggs": {
            "duration_sum": {
               "sum": {
                  "field": "duration"
               }
            }
         }
      }
   }
}

结果将如下所示:

{
   "took": 1,
   "timed_out": false,
   "_shards": {
      "total": 5,
      "successful": 5,
      "failed": 0
   },
   "hits": {
      "total": 4,
      "max_score": 0,
      "hits": []
   },
   "aggregations": {
      "total_duration": {
         "value": 44
      },
      "components": {
         "doc_count_error_upper_bound": 0,
         "sum_other_doc_count": 0,
         "buckets": [
            {
               "key": "a",
               "doc_count": 2,
               "duration_sum": {
                  "value": 15
               }
            },
            {
               "key": "b",
               "doc_count": 1,
               "duration_sum": {
                  "value": 27
               }
            },
            {
               "key": "c",
               "doc_count": 1,
               "duration_sum": {
                  "value": 2
               }
            }
         ]
      }
   }
}

现在,您需要做的只是以下内容。我正在使用JavaScript,但是您可以使用任何其他可以读取JSON的语言来执行此操作。

var response = ...the JSON response above...
var total_duration = response.aggregations.total_duration.value;
var total_docs = response.hits.total;

response.aggregations.components.buckets.forEach(function(comp_stats) {
    // total duration for the component
    var total_duration_comp = comp_stats.duration_sum.value;

    // percentage duration of the component
    var perc_duration_comp = total_duration_comp / total_duration * 100;

    // percentage documents for the component
    var perc_doc_comp = comp_stats.doc_count / total_docs * 100;
});


 类似资料:
  • 主要内容:分析器,令牌器/标记生成器,令牌过滤器,字符过滤器当在搜索操作期间处理查询时,任何索引中的内容由分析模块分析。该模块由分析器,分词器,分词器过滤器和字符过滤器组成。 如果没有定义分析器,则默认情况下注册内置的分析器,分词器,分词器过滤器和字符过滤器到分析模块。例如。 请求正文 响应 分析器 分析器由令牌器和可选的令牌过滤器组成。这些分析器在具有逻辑名的分析模块中注册,可以在映射定义或某些API中引用它们。有许多默认分析仪如下 - 编号 分析器 描

  • 问题内容: 假设我要按第10到20个百分点内的某个字段过滤文档。我想知道是否可以通过一些简单的查询(例如)进行查询。 说我有这些文件: 我需要按(升序) 从前10位到第10位进行过滤,然后按降序对结果进行排序,然后进行分页(如第2页,第10页)每页的项目)。 想到的一种解决方案是: 获取文件总数。 将文档按排序,取对应的限制 写最终查询,像 但是缺点也很明显: 如果我们谈论的是亚秒级延迟,则似乎效

  • 我正在使用Elasticsearch 1.7.3为分析报告积累数据。 我有一个保存文档的索引,其中每个文档都有一个名为“duration”(请求花费了多少毫秒)的数字字段和一个名为“component”的字符串字段。可能有许多文档具有相同的组件名称。 例如。 我想生成一份报告,说明每个组件: 此组件的所有“持续时间”字段的总和。 此总数占所有文档总持续时间的百分比。在我的例子中 每个组件的文档占总

  • 问题内容: 是否可以创建可按空间拆分索引然后创建两个令牌的自定义elasticsearch分析器?一是空间前的一切,二是空间。例如:我存储的记录字段包含以下文本:“ 35 G”。现在,我想通过仅在该字段中键入“ 35”或“ 35 G”查询来接收该记录。因此,Elastic应该创建两个令牌:[‘35’,‘35 G’],并且不再更多。 如果可能,如何实现? 问题答案: 可使用tokenizer实现。

  • 问题内容: 我在理解带轮胎宝石的elasticsearch中分析仪的概念时遇到了麻烦。我实际上是这些搜索概念的新手。这里有人可以帮我提供一些参考文章还是解释一下分析仪的实际作用以及为什么要使用它们? 我看到在Elasticsearch中提到了不同的分析器,例如关键字,标准,简单,滚雪球。没有分析仪的知识,我无法确定真正适合我的需求。 问题答案: 我给你一个简短的答案。 在索引时间和搜索时间使用分析

  • 问题内容: 我正在建立搜索,但需要使用不同的分析器分析1个字段。我的问题是,对于一个字段,我需要在其上安装一个分析器以进行词干分析(雪球),然后还需要一个分析器将完整的单词保留为一个标记(关键字)。我可以通过以下索引设置来使其工作: 在标题字段中搜索单个单词时出现问题。如果其中装有“帽子里的猫”,它将存储为“帽子里的猫”,但是如果我搜索猫,我什么也得不到。 这是否有可能实现?还是我需要有2个单独的