You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
169 lines
7.2 KiB
169 lines
7.2 KiB
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:"*" _source,default = * |
|
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"` //todo:sdk增加子集返回数 |
|
// 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"}, |
|
} |
|
)
|
|
|