Create & Init Project...

This commit is contained in:
2019-04-22 18:49:16 +08:00
commit fc4fa37393
25440 changed files with 4054998 additions and 0 deletions

View File

@@ -0,0 +1,44 @@
load(
"@io_bazel_rules_go//go:def.bzl",
"go_library",
)
package(default_visibility = ["//visibility:public"])
filegroup(
name = "package-srcs",
srcs = glob(["**"]),
tags = ["automanaged"],
visibility = ["//visibility:private"],
)
filegroup(
name = "all-srcs",
srcs = [":package-srcs"],
tags = ["automanaged"],
visibility = ["//visibility:public"],
)
go_library(
name = "go_default_library",
srcs = [
"archive.go",
"copyright.go",
"es.go",
"log.go",
"mapdata.go",
"mng.go",
"mng_v2.go",
"param.go",
"query.go",
"query_extra.go",
"uname.go",
"upsert.go",
],
importpath = "go-common/app/admin/main/search/model",
tags = ["automanaged"],
deps = [
"//library/log:go_default_library",
"//vendor/gopkg.in/olivere/elastic.v5:go_default_library",
],
)

View File

@@ -0,0 +1,101 @@
package model
import "strconv"
// ArchiveCheckParams search params.
type ArchiveCheckParams struct {
Bsp *BasicSearchParams
Aids []int64 `form:"aids,split" params:"aids"`
TypeIds []int64 `form:"typeids,split" params:"typeids"`
States []int64 `form:"states,split" params:"states"`
Attrs []int64 `form:"attrs,split" params:"attrs"`
DurationFrom int64 `form:"duration_from" params:"duration_from"`
DurationTo int64 `form:"duration_to" params:"duration_to"`
Mids []int64 `form:"mids,split" params:"mids"`
MidFrom int64 `form:"mid_from" params:"mid_from"`
MidTo int64 `form:"mid_to" params:"mid_to"`
AllKW int `form:"all_kw" params:"all_kw" default:"0"`
TimeFrom string `form:"time_from" params:"time_from"`
TimeTo string `form:"time_to" params:"time_to"`
Time string `form:"time" params:"time"`
FromIP string `form:"from_ip" params:"from_ip"`
}
// VideoParams search video
type VideoParams struct {
Bsp *BasicSearchParams
VIDs []int64 `form:"vids,split" params:"vids"`
AIDs []int64 `form:"aids,split" params:"aids"`
CIDs []int64 `form:"cids,split" params:"cids"`
TIDs []int64 `form:"tids,split" params:"tids"`
FileNames []string `form:"filename,split" params:"filename"`
TagID int64 `form:"tag_id" params:"tag_id"`
Status []int64 `form:"status,split" params:"status"`
XCodeState []int64 `form:"xcode_state,split" params:"xcode_state"`
UserType int `form:"user_type" params:"user_type"`
// archive
RelationStates []int64 `form:"relation_state,split" params:"relation_state"`
ArcMids []int64 `form:"arc_mids,split" params:"arc_mids"`
DurationFrom int `form:"duration_from" params:"duration_from"`
DurationTo int `form:"duration_to" params:"duration_to"`
// other
OrderType int `form:"order_type" params:"order_type"`
}
// TaskQa .
type TaskQa struct {
Bsp *BasicSearchParams
Ids []int64 `form:"ids,split" params:"ids"`
TaskIds []string `form:"task_ids,split" params:"task_ids"`
Uids []string `form:"uids,split" params:"uids"`
ArcTagIds []string `form:"arc_tagids,split" params:"arc_tagids"`
AuditTagIds []int64 `form:"audit_tagids,split" params:"audit_tagids"`
UpGroups []string `form:"up_groups,split" params:"up_groups"`
ArcTitles []string `form:"arc_titles,split" params:"arc_titles"`
ArcTypeIds []string `form:"arc_typeids,split" params:"arc_typeids"`
States []string `form:"states,split" params:"states"`
AuditStatuses []string `form:"audit_statuses,split" params:"audit_statuses"`
FansFrom string `form:"fans_from" params:"fans_from"`
FansTo string `form:"fans_to" params:"fans_to"`
CtimeFrom string `form:"ctime_from" params:"ctime_from"`
CtimeTo string `form:"ctime_to" params:"ctime_to"`
FtimeFrom string `form:"ftime_from" params:"ftime_from"`
FtimeTo string `form:"ftime_to" params:"ftime_to"`
}
// ArchiveCommerce .
type ArchiveCommerce struct {
Bsp *BasicSearchParams
Ids []string `form:"ids,split" params:"ids"`
PTypeIds []string `form:"ptypeids,split" params:"ptypeids"`
TypeIds []string `form:"typeids,split" params:"typeids"`
Mids []string `form:"mids,split" params:"mids"`
States []string `form:"states,split" params:"states"`
Copyrights []string `form:"copyrights,split" params:"copyrights"`
OrderIds []string `form:"order_ids,split" params:"order_ids"`
// 逻辑判断
Action string `form:"action" params:"action"` // 获取一级分区列表、等其他定制查询
IsOrder int `form:"is_order" params:"is_order" default:"-1"` //是否商单
IsOriginal int `form:"is_original" params:"is_original" default:"-1"` //是否原创
}
// TaskQaFansParams .
type TaskQaFansParams struct {
ID int64 `json:"id"`
Fans int64 `json:"fans"`
}
// IndexName .
func (m *TaskQaFansParams) IndexName() string {
return "task_qa"
}
// IndexType .
func (m *TaskQaFansParams) IndexType() string {
return "base"
}
// IndexID .
func (m *TaskQaFansParams) IndexID() string {
return strconv.FormatInt(m.ID, 10)
}

View File

@@ -0,0 +1,33 @@
package model
import (
"strconv"
)
// CopyRight .
type CopyRight struct {
ID int64 `json:"id"`
Name string `json:"name"`
OName string `json:"oname"`
AkaNames string `json:"aka_names"`
Level string `json:"level"`
AVoid string `json:"avoid"`
Plan string `json:"plan"`
Description string `json:"description"`
URL string `json:"url"`
}
// IndexName .
func (c *CopyRight) IndexName() string {
return "copyright"
}
// IndexType .
func (c *CopyRight) IndexType() string {
return "base"
}
// IndexID .
func (c *CopyRight) IndexID() string {
return strconv.FormatInt(c.ID, 10)
}

View File

@@ -0,0 +1,59 @@
package model
import (
"encoding/json"
)
// ES .
type ES struct {
Addr string
}
// Page .
type Page struct {
Pn int `json:"num"`
Ps int `json:"size"`
Total int64 `json:"total"`
}
// SearchResult search result (deprecated).
type SearchResult struct {
Order string `json:"order"`
Sort string `json:"sort"`
Result []json.RawMessage `json:"result"`
Debug string `json:"debug"`
Page *Page `json:"page"`
}
// BasicSearchParams (deprecated).
type BasicSearchParams struct {
AppID string `form:"appid" params:"appid"`
Pattern string `form:"pattern" params:"pattern" default:"equal"` //关键字匹配模式完成匹配equal模糊查询like
KW string `form:"kw" params:"kw"`
KwFields []string `form:"kw_fields,split" params:"kw_fields"`
KWs []string `form:"kws,split" params:"kws"` //关键词组用于AND OR连接
Order []string `form:"order,split" params:"order"`
Sort []string `form:"sort,split" params:"sort" default:"desc"`
Pn int `form:"pn" params:"pn;Range(1,5000)" default:"1"`
Ps int `form:"ps" params:"ps;Range(1,1000)" default:"10"`
Highlight bool `form:"highlight" params:"highlight" default:"false"`
ScoreFirst bool `form:"score_first" params:"score_first" default:"true"`
Debug bool `form:"debug" params:"debug"`
Source []string
}
// BasicMNGSearchParams .
type BasicMNGSearchParams struct {
Order string `form:"order" params:"order"`
Sort string `form:"sort" params:"sort" default:"desc"`
Pn int `form:"pn" params:"pn;Range(1,5000)" default:"1"`
Ps int `form:"ps" params:"ps;Range(1,1000)" default:"10"`
}
// BasicUpdateParams (deprecated).
type BasicUpdateParams struct {
AppID string
}
// UpdateParams update params (deprecated).
type UpdateParams map[string]interface{}

View File

@@ -0,0 +1,75 @@
package model
// LogParams .
type LogParams struct {
Bsp *BasicSearchParams
Business int `form:"business" params:"business"`
CTimeFrom string `form:"ctime_from" params:"ctime_from"`
CTimeTo string `form:"ctime_to" params:"ctime_to"`
}
// Business .
type Business struct {
ID int
AppID string
Name string
AdditionalMapping string
Mapping map[string]string
IndexFormat string
IndexCluster string
PermissionPoint string
}
// UDepTsData .
type UDepTsData struct {
Code int `json:"code"`
Data map[string]string
}
// IPData .
type IPData struct {
Code int `json:"code"`
Data map[string]struct {
Country string `json:"country"`
Province string `json:"province"`
City string `json:"city"`
Isp string `json:"isp"`
}
}
// LogAuditDefaultMapping .
var LogAuditDefaultMapping = map[string]string{
"uname": "string",
"uid": "string",
"type": "string",
"oid": "string",
"action": "string",
"ctime": "time",
"int_0": "int",
"int_1": "int",
"int_2": "int",
"str_0": "string",
"str_1": "string",
"str_2": "string",
"extra_data": "string",
}
// LogUserActionDefaultMapping .
var LogUserActionDefaultMapping = map[string]string{
"mid": "string",
"platform": "string",
"build": "string",
"buvid": "string",
"type": "string",
"oid": "string",
"action": "string",
"ip": "string",
"ctime": "time",
"int_0": "int",
"int_1": "int",
"int_2": "int",
"str_0": "string",
"str_1": "string",
"str_2": "string",
"extra_data": "string",
}

View File

@@ -0,0 +1,48 @@
package model
import (
"encoding/json"
"fmt"
"reflect"
"strings"
"go-common/library/log"
)
// MapData .
type MapData map[string]interface{}
// StrID .
func (m MapData) StrID(indexID string) string {
if indexID == "base" { // 需要改配置
return ""
}
var data []interface{}
arr := strings.Split(indexID, ",")
for _, v := range arr[1:] {
v = strings.TrimSpace(v)
if item, ok := m[v].(interface{}); ok {
if reflect.TypeOf(item).Kind() == reflect.Float64 {
item = int64(item.(float64))
}
data = append(data, item)
continue
}
log.Error("model.MapData.StrID err (%v)", v)
}
if len(data) == 0 {
return ""
}
return fmt.Sprintf(arr[0], data...)
}
func (m MapData) NumberToInt64() (err error) {
for k, v := range m {
if integer, ok := v.(json.Number); ok {
if m[k], err = integer.Int64(); err != nil {
log.Error("service.log.numberToInt64(%v)(%v)", integer, err)
}
}
}
return
}

View File

@@ -0,0 +1,109 @@
package model
const (
// MngAssetTypeDB .
MngAssetTypeDB = 1
// MngAssetTypeES .
MngAssetTypeES = 2
// MngAssetTypeDatabus .
MngAssetTypeDatabus = 3
// MngAssetTypeTable .
MngAssetTypeTable = 4
)
// MngBusiness .
type MngBusiness struct {
ID int64 `json:"id"`
Name string `json:"name"`
Desc string `json:"desc"`
Apps []*MngBusinessApp `json:"apps"`
AppsJSON string `json:"-"`
}
// MngBusinessApp .
type MngBusinessApp struct {
AppID string `json:"appid"`
IncrWay string `json:"incr_way"`
IncrOpen bool `json:"incr_open"`
}
// MngAsset .
type MngAsset struct {
ID int64 `json:"id"`
Name string `json:"name"`
Type int `json:"type"`
Config string `json:"config"`
Desc string `json:"desc"`
}
// MngAssetTable .
type MngAssetTable struct {
TablePrefix string `json:"prefix"`
TableFormat string `json:"format"`
}
// MngAssetDatabus .
type MngAssetDatabus struct {
DatabusInfo string `json:"info"`
DatabusIndexID string `json:"index_id"`
}
// MngApp .
type MngApp struct {
ID int64 `json:"id" form:"id"`
Business string `json:"business" form:"business"`
AppID string `json:"appid" form:"appid"`
Desc string `json:"desc" form:"desc"`
DBName string `json:"db_name" form:"db_name"`
ESName string `json:"es_name" form:"es_name"`
TableName string `json:"table_name" form:"table_name"`
TablePrefix string `json:"-"`
TableFormat string `json:"-"`
DatabusName string `json:"databus_name" form:"databus_name"`
DatabusInfo string `json:"-"`
DatabusIndexID string `json:"-"`
IndexPrefix string `json:"index_prefix" form:"index_prefix"`
IndexVersion string `json:"index_version" form:"index_version"`
IndexFormat string `json:"index_format" form:"index_format"`
IndexType string `json:"index_type" form:"index_type"`
IndexID string `json:"index_id" form:"index_id"`
DataIndexSuffix string `json:"data_index_suffix" form:"data_index_suffix"`
IndexMapping string `json:"index_mapping" form:"index_mapping"`
DataFields string `json:"data_fields" form:"data_fields"`
DataExtra string `json:"data_extra" form:"data_extra"`
ReviewNum int `json:"review_num" form:"review_num"`
ReviewTime int `json:"review_time" form:"review_time"`
Sleep float64 `json:"sleep" form:"sleep"`
Size int `json:"size" form:"size"`
SQLByID string `json:"sql_by_id" form:"sql_by_id"`
SQLByMtime string `json:"sql_by_mtime" form:"sql_by_mtime"`
SQLByIDMtime string `json:"sql_by_idmtime" form:"sql_by_idmtime"`
QueryMaxIndexes int `json:"query_max_indexes" form:"query_max_indexes"`
}
// MngCount .
type MngCount struct {
Business string `json:"business" form:"business"`
Type string `json:"type" form:"type"`
Name string `json:"name"`
Chart string `json:"chart"`
Param string `json:"param"`
}
// MngCountRes .
type MngCountRes struct {
Time string `json:"time"`
Count string `json:"count"`
}
// MngPercentRes .
type MngPercentRes struct {
Name string `json:"name"`
Count string `json:"count"`
}
// UnamesData .
type UnamesData struct {
Code int `json:"code"`
Data map[string]string
}

View File

@@ -0,0 +1,42 @@
package model
const (
// UserSearchDB bili_search.
UserSearchDB = "bili_search"
// DBDsnFormat .
DBDsnFormat = "%s:%s@tcp(%s:%s)/%s?timeout=5s&readTimeout=5s&writeTimeout=5s&parseTime=true&loc=Local&charset=utf8mb4,utf8"
)
// GFAsset .
type GFAsset struct {
ID int64 `json:"id"`
Type string `json:"type"`
Name string `json:"name"`
DSN string `json:"dsn"`
DB string `json:"db"`
Regex string `json:"relex"`
Fields string `json:"fields"`
Description string `json:"description"`
State int8 `json:"state"`
}
// GFBusiness .
type GFBusiness struct {
ID int64 `json:"id"`
PID int64 `json:"pid"`
Name string `json:"name"`
DataConf string `json:"data_conf"`
IndexConf string `json:"index_conf"`
BusinessConf string `json:"business_conf"`
Description string `json:"description"`
State int8 `json:"state"`
Mtime string `json:"mtime"`
}
// TableField .
type TableField struct {
Name string `json:"name"`
Type string `json:"type"`
Count int `json:"count"`
Primary bool `json:"primary"`
}

View File

@@ -0,0 +1,36 @@
package model
// Pager .
type Pager struct {
Pn int `form:"pn" validate:"min=1" default:"1"`
Ps int `form:"ps" validate:"min=1" default:"10"`
}
// ParamMngBusiness .
type ParamMngBusiness struct {
ID int64 `form:"id"`
Name string `form:"name"`
Desc string `form:"desc"`
Apps string `form:"apps"`
IsJob bool `form:"is_job"`
Pager
}
// ParamMngBusinessApp .
type ParamMngBusinessApp struct {
Business string `form:"business"`
App string `form:"app"`
IsJob bool `form:"is_job"`
IncrWay string `form:"incr_way"`
IncrOpen bool `form:"incr_open"`
}
// ParamMngAsset .
type ParamMngAsset struct {
ID int64 `form:"id"`
Type int `form:"type"`
Name string `form:"name"`
Config string `form:"config"`
Desc string `form:"desc"`
Pager
}

View File

@@ -0,0 +1,169 @@
package model
import (
"encoding/json"
"gopkg.in/olivere/elastic.v5"
)
// QueryParams .
type QueryParams struct {
Business string `form:"business" params:"business;Required" validate:"required"`
QueryBodyStr string `form:"query" params:"query;Required" validate:"required"`
DebugLevel int `form:"debug_level" params:"debug_level" default:"0"` // 2 默认全局debug包含dsl执行后的分析1 dsl执行前的分析防止504啥分析看不到。通过 /x/admin/search/query/debug ※包含es query体是否正确 + dsl体 + explain 返回信息) 方式,非签名请求
QueryBody *QueryBody
AppIDConf *QueryConfDetail
}
// QueryBody .
type QueryBody struct {
Fields []string `json:"fields"` // default:"*" _sourcedefault = *
From string `json:"from"` //索引名,多个用逗号隔开
Where *QueryBodyWhere `json:"where"`
Order []map[string]string `json:"order"`
OrderScoreFirst bool `json:"order_score_first"`
OrderRandomSeed string `json:"order_random_seed"` // 随机排序种子
Scroll bool `json:"scroll"`
Highlight bool `json:"highlight"` //default:"false"
Pn int `json:"pn"` //Range(1,5000) default:"1"
Ps int `json:"ps"` //Range(1,1000) default:"10"
}
// QueryBodyWhere .
type QueryBodyWhere struct {
EQ map[string]interface{} `json:"eq"` //可能是数据或字符,[12,333,67] ["asd", "你好"]
Or map[string]interface{} `json:"or"` //暂时不支持minimum should
In map[string][]interface{} `json:"in"` //TODO改造为slice
Range map[string]string `json:"range"` //[10,20) (2018-05-10 00:00:00,2018-05-31 00:00:00] (,30]
Like []QueryBodyWhereLike `json:"like"`
Enhanced []QueryBodyWhereEnhanced `json:"enhanced"` //包含GourpBy Collapse
Combo []QueryBodyWhereCombo `json:"combo"` //混合与或
Not map[string]map[string]bool `json:"not"` //对eq、in、range条件取反
}
// QueryBodyWhereLike .
type QueryBodyWhereLike struct {
KWFields []string `json:"kw_fields"`
KW []string `json:"kw"` //将kw的值使用空白间隔给query
Or bool `json:"or"` //default:"false"
Level string `json:"level"` //默认default
}
// QueryBodyWhereEnhanced .
type QueryBodyWhereEnhanced struct {
Mode string `json:"mode"`
Field string `json:"field"`
Order []map[string]string `json:"order"`
Size int `json:"size"` //todosdk增加子集返回数
// more conditions...
}
// QueryBodyWhereCombo .
type QueryBodyWhereCombo struct {
EQ []map[string]interface{} `json:"eq"`
In []map[string][]interface{} `json:"in"`
Range []map[string]string `json:"range"`
NotEQ []map[string]interface{} `json:"not_eq"`
NotIn []map[string][]interface{} `json:"not_in"`
NotRange []map[string]string `json:"not_range"`
Min struct {
EQ int `json:"eq"`
In int `json:"in"`
Range int `json:"range"`
NotEQ int `json:"not_eq"`
NotIn int `json:"not_in"`
NotRange int `json:"not_range"`
Min int `json:"min"`
} `json:"min"`
}
// QueryConfDetail .
type QueryConfDetail struct {
ESCluster string
IndexPrefix string
IndexType string
IndexID string
IndexMapping string
MaxIndicesNum int
QueryMode int //1:默认完全走查询体 2:基于查询体的定制 3:nested查询
MaxPageSize int //最大page size
}
// QueryResult query result.
type QueryResult struct {
Order string `json:"order"`
Sort string `json:"sort"`
Result json.RawMessage `json:"result"`
Debug *QueryDebugResult `json:"debug"`
Page *Page `json:"page"`
}
// QueryDebugResult query result.
type QueryDebugResult struct {
ErrMsg []string `json:"err_msg"`
QueryBody string `json:"query_body"`
DSL string `json:"dsl"`
Mapping map[string]interface{} `json:"mapping"`
Profile *elastic.SearchProfile `json:"profile"` //性能分析
}
// AddErrMsg .
func (qdr *QueryDebugResult) AddErrMsg(msg ...string) {
qdr.ErrMsg = append(qdr.ErrMsg, msg...)
}
// UpsertResult upsert result.
type UpsertResult struct {
}
var (
// QueryModeBasic completely using basic query & nested .
QueryModeBasic = 1
// QueryModeExtra write some extra conditions under basic query .
QueryModeExtra = 2
// EnhancedModeGroupBy group by .
EnhancedModeGroupBy = "group_by"
// EnhancedModeSum sum from a filed .
EnhancedModeSum = "sum"
// EnhancedModeCollapse collapse .
EnhancedModeCollapse = "collapse"
// EnhancedModeDistinct distinct .
EnhancedModeDistinct = "distinct"
// EnhancedModeDistinctCount distinct .
EnhancedModeDistinctCount = "distinct_count"
// EnhancedModeGroupBySum group by sum .
EnhancedModeGroupBySum = "group_by_sum"
// EnhancedModeGroupByTop top hits .
EnhancedModeGroupByTop = "group_by_tophits"
// LikeLevelHigh high level .
LikeLevelHigh = "high"
// LikeLevelMiddel middle level .
LikeLevelMiddel = "middle"
// LikeLevelLow low level .
LikeLevelLow = "low"
// QueryConf 自定义部分
QueryConf = map[string]*QueryConfDetail{
"archive_video_score": {ESCluster: "ssd_archive", IndexPrefix: "archive_video", MaxIndicesNum: 1, QueryMode: QueryModeExtra},
"archive_score": {ESCluster: "ssd_archive", IndexPrefix: "archive", MaxIndicesNum: 1, QueryMode: QueryModeExtra},
"task_qa_random": {ESCluster: "internalPublic", IndexPrefix: "task_qa", MaxIndicesNum: 1, QueryMode: QueryModeExtra},
"esports_contests_date": {ESCluster: "pcie_pub_out01", IndexPrefix: "esports_contests_map", MaxIndicesNum: 1, QueryMode: QueryModeExtra},
"creative_archive_search": {ESCluster: "pcie_pub_out01", IndexPrefix: "creative_archive", MaxIndicesNum: 1, QueryMode: QueryModeExtra},
"creative_archive_staff": {ESCluster: "pcie_pub_out02", IndexPrefix: "creative_archive", IndexID: "%d,id", IndexType: "base", MaxIndicesNum: 1, QueryMode: QueryModeExtra},
"creative_archive_apply": {ESCluster: "pcie_pub_out02", IndexPrefix: "creative_archive", MaxIndicesNum: 1, QueryMode: QueryModeExtra},
"dm_history": {ESCluster: "dmout", IndexPrefix: "dm_search", MaxIndicesNum: 1, QueryMode: QueryModeExtra},
// "pgc_contract_info": {ESCluster: "pcie_pub_out01", IndexPrefix: "pgc_contract_info", MaxIndicesNum: 1, QueryMode: QueryModeNested},
// "pgc_contract_video": {ESCluster: "pcie_pub_out01", IndexPrefix: "pgc_contract_video", MaxIndicesNum: 1, QueryMode: QueryModeNested},
}
// PermConf 权限业务
PermConf = map[string]map[string]string{
"star": {"ops_log_billions": "true"}, // 业务使用*批量获取索引
"scroll": {"dm_search": "true"}, // 业务使用scroll
"oht": {"creative_reply": "true", "creative_reply_isreport": "true", "esports": "true"}, // 业务max_result_window 100k
"es_cache": {"comics_firebird": "true", "pgc_media": "true", "pgc_season": "true"}, // request cache(失效时间和索引的refresh_interval一致)
//"routing": {"creative_reply": "o_mid"},
}
)

View File

@@ -0,0 +1 @@
package model

View File

@@ -0,0 +1,9 @@
package model
// UNameParams search params.
type UNameParams struct {
Bsp *BasicSearchParams
MIds []int64 `form:"mids,split" params:"mids"`
Sex int64 `form:"sex" params:"sex" default:"-1"`
Ranks []int64 `form:"ranks,split" params:"ranks"`
}

View File

@@ -0,0 +1,17 @@
package model
// UpsertParams .
type UpsertParams struct {
Business string `form:"business" validate:"required"`
DataStr string `form:"data" validate:"required"`
Insert bool `form:"insert" default:"false"`
UpsertBody []UpsertBody
}
// UpsertBody job的bulk优化参考这个模板 .
type UpsertBody struct {
IndexName string
IndexType string
IndexID string
Doc MapData
}