123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169 |
- 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"},
- }
- )
|