calculate

package
v0.1.7 Latest Latest
Warning

This package is not in the latest version of its module.

Go to latest
Published: Jan 26, 2024 License: GPL-3.0 Imports: 8 Imported by: 0

Documentation

Index

Constants

View Source
const (
	SignAggList       = "metrics_list"
	SignSingle        = "metric_data"
	SignFilter        = "metric_filter"
	SignFilterReverse = "metric_filter_reverse"
	SignTerms         = "metrics_terms"
	SignChild         = "metrics_child"
	SignNested        = "."              // nested类型字段连接方式  nested A下的字段B, 写成 A.B 实际按
	SignObject        = ">"              // object类型字段链接方式  object A下的字段 B, 写成 A>B, 最终转换成 A.B
	SignTimeRange     = "agg_time_range" // 从外来参数传入到指标中的参数标识
)
View Source
const (
	TypeTerms         = "terms"
	TypeCount         = "count"
	TypeTerm          = "term"
	TypeSum           = "sum"
	TypeAvg           = "avg"
	TypeNested        = "nested"
	QueryMust         = "must"
	QueryRange        = "range"
	QueryMustMulti    = "mustMulti"
	QueryMustNot      = "MustNot"
	QueryMustNotMulti = "mustNotMulti"
	SignNotNull       = "NOT_NULL"     // 非空标识符
	SignMustNot       = "MUST_NOT"     // 标记必须非空
	SignExist         = "COLUMN_EXIST" // 标记字段必须存在

	MaxSize = 10000000 // 聚合 terms 的时候的最大数量
)

Variables

This section is empty.

Functions

func BatchGenerateMetricsAgg

func BatchGenerateMetricsAgg(scene string, agg *elastic.TermsAggregation, params map[string]interface{}, metricsList []string, currentTerm string) *elastic.TermsAggregation

BatchGenerateMetricsAgg 将指标批量加载进去

func BatchGetValueFromAggData

func BatchGetValueFromAggData(aggRes elastic.Aggregations, metricList []string) (result map[string]interface{}, err error)

BatchGetValueFromAggData 从 agg 中提取数据

func BuildHistogramMetricsAgg

func BuildHistogramMetricsAgg(histogramName string, params map[string]interface{}, metricsList []string, sceneName ...string) elastic.Aggregation

BuildHistogramMetricsAgg 构建直方图的agg

func BuildTermAgg

func BuildTermAgg(scene string, params map[string]interface{}, termList []string, metricsList []string, level ...int) elastic.Aggregation

BuildTermAgg 递归生成多级 term

func CheckAggNeeReverse added in v0.0.23

func CheckAggNeeReverse(metricName string, sceneName ...string) bool

CheckAggNeeReverse 检测该指标是否就是需要在 nested 环境下使用 true 则不执行 reverse_nested

func CheckKeyNested added in v0.0.6

func CheckKeyNested(key string) (pth string, ky string, isNested bool)

func GenTermKey added in v0.0.6

func GenTermKey(key string) string

GenTermKey 组合 term聚合的 key

func GetBasicMetrics

func GetBasicMetrics(ctx context.Context, metricsList []string, params map[string]interface{}, client *elastic.Client, sceneName ...string) (result map[string]interface{}, err error)

GetBasicMetrics 获取简单指标

func GetBasicMetricsWithQuery

func GetBasicMetricsWithQuery(ctx context.Context, params map[string]interface{}, metricsList []string, query elastic.Query, client *elastic.Client, sceneName ...string) (result map[string]interface{}, err error)

GetBasicMetricsWithQuery 以原生传query 的方式获取值

func GetValueFromAggData

func GetValueFromAggData(aggRes elastic.Aggregations, metricsName string) (result interface{})

GetValueFromAggData 单个指标从 agg 中取数

func SetESIndexNameFunc added in v0.1.2

func SetESIndexNameFunc(fn ESIndexFunc)

SetESIndexNameFunc 设置默认的索引

func SetEsIndex

func SetEsIndex(index string)

SetEsIndex 确定要查询的esindex

func SetHistogramAgg

func SetHistogramAgg(histogramName string, metricsFunc AggHistogramFunc)

SetHistogramAgg 设置

func SetMetricsAgg

func SetMetricsAgg(metricName string, aggFuncList ...AggFunc)

func SetMetricsAggFunc added in v0.0.22

func SetMetricsAggFunc(fn GetAggFunc)

SetMetricsAggFunc 设置获取指标信息的方法

func SetMetricsReverse added in v0.0.23

func SetMetricsReverse(fn CheckAggReverseNest)

Types

type AggFunc

type AggFunc func(params map[string]interface{}, currentTerm ...string) elastic.Aggregation

AggFunc 指标查询函数要求的格式

type AggHistogramFunc

type AggHistogramFunc func(aggList map[string]elastic.Aggregation) elastic.Aggregation

AggHistogramFunc 直方聚合查询

type CheckAggReverseNest added in v0.0.23

type CheckAggReverseNest func(metricName string, sceneName ...string) bool // 检测函数是否需要反转 true的时候, 不执行 reverse_nest 操作

type ESConfig

type ESConfig struct {
	EsIndex         string                      // 要用到的 es 文档
	AggFuncList     map[string]AggFunc          // 存放 AggFunc 函数
	HistogramList   map[string]AggHistogramFunc // 存放直方图聚合指标
	GetAggListFunc  GetAggFunc
	ESIndexNameFunc ESIndexFunc
	sync.Mutex
}

func GetEsConfig added in v0.0.7

func GetEsConfig() *ESConfig

func (*ESConfig) GetEsIndex

func (ec *ESConfig) GetEsIndex(params map[string]interface{}, scene ...string) string

func (*ESConfig) GetHistogramAgg

func (ec *ESConfig) GetHistogramAgg(histogramName string, metricsList map[string]elastic.Aggregation, sceneName ...string) elastic.Aggregation

func (*ESConfig) GetMetricsAgg

func (ec *ESConfig) GetMetricsAgg(metricName string, sceneName ...string) AggFunc

GetMetricsAgg 获取注入的指标

type ESIndexFunc added in v0.1.2

type ESIndexFunc func(params map[string]interface{}, sceneName ...string) string

type EsAggregation

type EsAggregation struct {
	ESIndex     string         `json:"es_index"`
	Type        string         `json:"type"`         // 聚合类型  count/terms/avg
	MetricsName string         `json:"metrics_name"` // 指标名称
	Field       string         `json:"field"`        // 要聚合的字段名
	FieldPath   string         `json:"filed_path"`   // 字段路径
	Size        int            `json:"size"`         // 数量限制 1000
	FieldType   string         `json:"filed_type"`   // 字段类型 term/nested
	TermQuery   *EsQueryConfig `json:"term_query"`   // 如果是type是 terms 的, 需要指定筛选条件
	SearchQuery *EsQueryConfig `json:"search_query"` // 整体数据的搜索条件

	ParamsMapList *ParamsMapList // 初始化后的参数配置
	// contains filtered or unexported fields
}

type EsQueryBuilder added in v0.0.6

type EsQueryBuilder struct {
	RequestQuery interface{} `json:"request_query"`
	// contains filtered or unexported fields
}

func (*EsQueryBuilder) GetStringQuery added in v0.0.6

func (builder *EsQueryBuilder) GetStringQuery() string

func (*EsQueryBuilder) GetTermsMetrics added in v0.0.22

func (builder *EsQueryBuilder) GetTermsMetrics(ctx context.Context, client *elastic.Client, indexList []string, termsList []string, metricsList []string, params map[string]interface{}, sceneName ...string) (result TermResult, requestQuery string, err error)

func (*EsQueryBuilder) LoadParams added in v0.0.6

func (builder *EsQueryBuilder) LoadParams(termsList []string, metricsList []string, params map[string]interface{}, sceneName ...string) *EsQueryBuilder

LoadParams 这里是一切的入口

func (*EsQueryBuilder) ParseAgg added in v0.0.6

func (builder *EsQueryBuilder) ParseAgg(params map[string]interface{}, termsList []string, metricsList []string, sceneName ...string) interface{}

ParseAgg 解析 agg

func (*EsQueryBuilder) ParseParamsToQuery added in v0.0.6

func (builder *EsQueryBuilder) ParseParamsToQuery(termsList []string, metricsList []string, params map[string]interface{}, sceneName ...string) interface{}

ParseParamsToQuery 返回完整的 terms 聚合query, 直接用到es查询中

func (*EsQueryBuilder) ParseQuery added in v0.0.6

func (builder *EsQueryBuilder) ParseQuery(params map[string]interface{}) interface{}

ParseQuery 解析筛选主文档的 query

func (*EsQueryBuilder) ParseSearchResult added in v0.0.6

func (builder *EsQueryBuilder) ParseSearchResult(searchResult *elastic.SearchResult) (result TermResult, err error)

ParseSearchResult 解析结果, 得是从 builder 生成出去的 query 返回的结果这里能解析出来

type EsQueryCondition

type EsQueryCondition struct {
	Type       string // key 类型   term/terms/nested
	Path       string // nested 的路径  join_classes
	Conditions []*SearchCondition
}

EsQueryCondition es 搜索条件

func (*EsQueryCondition) BuildWithQuery

func (ec *EsQueryCondition) BuildWithQuery(query *elastic.BoolQuery) *elastic.BoolQuery

func (*EsQueryCondition) LoadConditionsFromParamsConfig

func (ec *EsQueryCondition) LoadConditionsFromParamsConfig(mapList map[string]bool, pl *ParamsMapList)

LoadConditionsFromParamsConfig 从参数配置中加载对应的配置

func (*EsQueryCondition) LoadValueFromParams

func (ec *EsQueryCondition) LoadValueFromParams(params map[string]interface{}) error

LoadValueFromParams 从外部传入的 params 中获取参数

type EsQueryConfig

type EsQueryConfig struct {
	Conditions []*EsQueryCondition
}

func (*EsQueryConfig) BuildBoolQuery

func (ecg *EsQueryConfig) BuildBoolQuery() *elastic.BoolQuery

func (*EsQueryConfig) CombineParamsConfig

func (eqc *EsQueryConfig) CombineParamsConfig(paramsConfig *ParamsMapList)

CombineParamsConfig 将 params 的配置合并到当前搜索中

func (*EsQueryConfig) LoadValueFromParams

func (eqc *EsQueryConfig) LoadValueFromParams(params map[string]interface{}) error

LoadValueFromParams 从外部传入的 params 中获取参数

type EsTerm

type EsTerm struct {
	ConfigType string //指标的类型 terms
	ColumnType string //字段类型  term/nested
	Path       string // 字段是 nested 时的路径, 如 join_classes
	ColumnName string // 字段 key 值, 例如 join_classes.cust_wxid
}

EsTerm 指标配置, 只允许一个字段值做指标

type FilterFunc added in v0.0.12

type FilterFunc func(curTermItem []interface{}) bool

type GetAggFunc added in v0.0.22

type GetAggFunc func(metricName string, sceneName ...string) AggFunc // 外部注入的获取指标的方法, 如果没有的话, 就默认读取AggFuncList这里的指标

type HistogramItem

type HistogramItem struct {
	KeyAsString string
	Key         interface{}
	DocCount    int64
	Metrics     map[string]interface{}
}

func (*HistogramItem) LoadDataFromItem

func (hi *HistogramItem) LoadDataFromItem(bucketItem *elastic.AggregationBucketHistogramItem, metricsList []string) error

type HistogramResult

type HistogramResult struct {
	HistogramName string
	MetricsList   []string
	Result        []HistogramItem
}

func GetHistogramMetrics

func GetHistogramMetrics(ctx context.Context, histogramName string, metricsList []string, params map[string]interface{}, client *elastic.Client, sceneName ...string) (result HistogramResult, err error)

GetHistogramMetrics 获取直方图聚合指标

func GetHistogramMetricsWithQuery

func GetHistogramMetricsWithQuery(ctx context.Context, histogramName string, params map[string]interface{}, metricsList []string, query elastic.Query, client *elastic.Client, sceneName ...string) (result HistogramResult, err error)

GetHistogramMetricsWithQuery 获取直方图, 参数由 query 格式传入

func (*HistogramResult) LoadDataFromAggregations

func (hr *HistogramResult) LoadDataFromAggregations(aggRes elastic.Aggregations) (HistogramResult, error)

LoadDataFromAggregations 从返回结果中解析直方图的结果

type ParamsMapList

type ParamsMapList struct {
	SceneName string `json:"scene_name"`
	//MetricsName   string                      `json:"metrics_name"`
	Params        map[string]string           `json:"params"`
	NestedGroup   map[string]map[string]bool  // 结构是 nested path: []key
	OriginList    map[string]*SearchCondition // 指定的 key => 最终生效的查询
	EsQueryConfig *EsQueryConfig              // 最终生成的 query 组合
}

ParamsMapList 参数映射图

func (*ParamsMapList) GenerateEsQueryConfig

func (pl *ParamsMapList) GenerateEsQueryConfig() []*EsQueryCondition

func (*ParamsMapList) GenerateQuery

func (pl *ParamsMapList) GenerateQuery() elastic.Query

func (*ParamsMapList) GetKeyBodyOnce

func (pl *ParamsMapList) GetKeyBodyOnce(path string, key string) (item *SearchCondition, exist bool)

GetKeyBodyOnce 从 OriginList 去除

func (*ParamsMapList) LoadConfig

func (pl *ParamsMapList) LoadConfig(sceneName string, params map[string]interface{}) *ParamsMapList

type SearchCondition

type SearchCondition struct {
	Type     string      // term/terms/range/
	Key      string      // 字段名  join_classes.cust_wxid
	Optional int         // 是否可选, 1 可选, 0 必填
	Value    interface{} //字段值  xxxwww
}

func (*SearchCondition) LoadValueFromParams

func (sc *SearchCondition) LoadValueFromParams(params map[string]interface{}) error

LoadValueFromParams 从外部传入的 params 中获取参数

type TermItem

type TermItem struct {
	Terms []interface{}
	Cnt   int64
	Data  map[string]interface{}
	// contains filtered or unexported fields
}

func (*TermItem) GetCombineTerm

func (t *TermItem) GetCombineTerm(outputTerm []int) string

GetCombineTerm 获取

func (*TermItem) GetFilteredData

func (t *TermItem) GetFilteredData() map[string]interface{}

GetFilteredData 将 nil 值转成0

type TermResult

type TermResult struct {
	Result      []TermItem
	TermsList   []string
	MetricsList []string
}

func BatchGetValueFromTerms

func BatchGetValueFromTerms(aggRes elastic.Aggregations, metricList []string, termsList []string) (result TermResult, err error)

BatchGetValueFromTerms 从聚合 terms 中批量获取值

func GetTermsMetrics

func GetTermsMetrics(ctx context.Context, termsList []string, metricsList []string, params map[string]interface{}, client *elastic.Client, sceneName ...string) (result TermResult, err error)

GetTermsMetrics 获取多级指标

func GetTermsMetricsWithQuery

func GetTermsMetricsWithQuery(ctx context.Context, params map[string]interface{}, termsList []string, metricsList []string, query elastic.Query, client *elastic.Client, sceneName ...string) (result TermResult, err error)

GetTermsMetricsWithQuery 以原生传参的方式, 获取聚合指标

func (*TermResult) GetMapDataResult

func (ti *TermResult) GetMapDataResult(outputTerm []int, termFilter FilterFunc) (result []map[string]interface{}, err error)

GetMapDataResult 获取扁平化的结果, 如果存在 termFilter , 则根据filter 值得顺序进行过滤

func (*TermResult) LoopTermsFromAgg

func (ti *TermResult) LoopTermsFromAgg(aggRes *elastic.AggregationBucketKeyItems, columnValue []interface{}, level ...int) error

LoopTermsFromAgg 当传入到这里的时候, 已经能取一级 term 的 bucket 了 LoopTermsFromAgg 当传入到这里的时候, 已经能取一级 term 的 bucket 了

func (*TermResult) TermFilter added in v0.0.11

func (ti *TermResult) TermFilter(targetTerms TermItem, termFilter ...interface{}) bool

Jump to

Keyboard shortcuts

? : This menu
/ : Search site
f or F : Jump to
y or Y : Canonical URL