0

假设我在弹性搜索中创建了一个索引并导入数据

PUT test
{
  "mappings": {
    "orders": {
      "properties": {
        "devices": {
          "type": "integer"
        },
        "location": {
          "type":"geo_point"
        },
        "time" : {
          "type":"date",
          "format": "epoch_second"
        },
       "company" : {
         "type":"keyword"    
        }  
      }
    }
  }
}

在 kibana 中相当简单的事情是每月获得唯一的公司数量,这很好,但不足以让许多公司在当月获得第一笔订单。这在 kibana 或 timelion 中可能吗?如果不知道我应该如何将数据保存到弹性中以便我可以得到这个数字?我正在使用 Kibana 5.1.2

4

1 回答 1

0

我在索引中添加了一个名为 sequence 的属性类型,它是顺序的编号,所以如果它是第一个订单,我给它 1,如果是第二个,我给它 2,依此类推......映射看起来像这样

PUT test
{
  "mappings": {
    "orders": {
      "properties": {
        "devices": {
          "type": "integer"
        },
        "email": {
          "type":"keyword"
        },
        "company": {
          "type":"keyword"
        },
        "location": {
          "type":"geo_point"
        },
        "sequence":{
          "type":"integer"
        },
        "time": {
          "type":"date",
          "format": "strict_date_optional_time||epoch_second"

        }
      }
    }
  }
}

所以对于这个操作,我选择了 Timelion,它很酷,可以让你计算值。MoM % 新用户的公式是...

 (new users this month / cumulative users till previous month) 

这看起来像这样的timelion表达式

.es(q=sequence:1,index=index,timefield=time,metric=cardinality:company)
.divide(.es(index=index,timefield=time,metric=cardinality:company,offset=-1M)
.cusum()).bars()

请注意,此查询是一个查询,为了便于阅读,我只将其分成 3 部分。我添加了 bar() 只是为了好玩。

于 2017-02-19T12:39:45.977 回答