首页 > 其他分享 >Go实战全家桶之八:统一ES服务接口之通用查询嵌套查询之封装与增删改API

Go实战全家桶之八:统一ES服务接口之通用查询嵌套查询之封装与增删改API

时间:2024-05-25 12:24:52浏览次数:23  
标签:name cmdRequest 查询 dept API Go type id op

开源

 goweb: https://gitee.com/ichub/goweb/settings#index

需求

UML

代码位置

测试用例:

func (this *TestPageEsRequestSuite) Test002_NestBoolQuery() {

    var req1 = Default()
    req1.EsShould().EsMatch("dept_name", "olivere")
    req1.EsTerm("dept_id", "570362815982862336")
    req1.EsMust().EsTerm("dept_id", "570362815982862336")
    var req = Default()
    req.EsMust().EsMatch("dept_name", "olivere")
    req.Nest(req1, req1)
    cmdReq.IndexName = "ichub_sys_dept"
    cmdReq.EsMatch("dept_name", "olivere")
    cmdReq.Source = "dept_id,dept_name"
    cmdReq.Nest(req)
    result, _ := cmdReq.Nest(req, req).EsBoolQueryResult()
    this.Equal(200, result.Code)
    logrus.Info(cmdReq, result)
}

结果:

{
     "code": 200,
     "msg": "成功",
     "page_size": 2,
     "current": 1,
     "total": 1,
     "data": [
          {
               "dept_name": "olivere",
               "dept_id": "570362815982862336"
          }
     ]

请求:

{
     "page_size": 2,
     "current": 1,
     "order_by": [],
     "fields": [
          {
               "field": "dept_name",
               "op_type": "match",
               "values": [
                    "olivere"
               ]
          }
     ],
     "es_bool_type": 3,
     "cmd_category": 7,
     "index_alias": "",
     "index_name": "ichub_sys_dept",
     "cmd_type": 0,
     "source": "dept_id,dept_name",
     "id": "",
     "ids": null,
     "PageEsRequests": [
          {
               "page_size": 20,
               "current": 1,
               "order_by": [],
               "fields": [
                    {
                         "field": "dept_name",
                         "op_type": "match",
                         "values": [
                              "olivere"
                         ]
                    }
               ],
               "es_bool_type": 0,
               "cmd_category": 7,
               "index_alias": "",
               "index_name": "",
               "cmd_type": 0,
               "source": "",
               "id": "",
               "ids": null,
               "PageEsRequests": [
                    {
                         "page_size": 20,
                         "current": 1,
                         "order_by": [],
                         "fields": [
                              {
                                   "field": "dept_name",
                                   "op_type": "match",
                                   "values": [
                                        "olivere"
                                   ]
                              },
                              {
                                   "field": "dept_id",
                                   "op_type": "term",
                                   "values": [
                                        "570362815982862336"
                                   ]
                              },
                              {
                                   "field": "dept_id",
                                   "op_type": "term",
                                   "values": [
                                        "570362815982862336"
                                   ]
                              }
                         ],
                         "es_bool_type": 0,
                         "cmd_category": 7,
                         "index_alias": "",
                         "index_name": "",
                         "cmd_type": 0,
                         "source": "",
                         "id": "",
                         "ids": null,
                         "PageEsRequests": [],
                         "PageEsBoolTypes": []
                    },
                    {
                         "page_size": 20,
                         "current": 1,
                         "order_by": [],
                         "fields": [
                              {
                                   "field": "dept_name",
                                   "op_type": "match",
                                   "values": [
                                        "olivere"
                                   ]
                              },
                              {
                                   "field": "dept_id",
                                   "op_type": "term",
                                   "values": [
                                        "570362815982862336"
                                   ]
                              },
                              {
                                   "field": "dept_id",
                                   "op_type": "term",
                                   "values": [
                                        "570362815982862336"
                                   ]
                              }
                         ],
                         "es_bool_type": 0,
                         "cmd_category": 7,
                         "index_alias": "",
                         "index_name": "",
                         "cmd_type": 0,
                         "source": "",
                         "id": "",
                         "ids": null,
                         "PageEsRequests": [],
                         "PageEsBoolTypes": []
                    }
               ],
               "PageEsBoolTypes": [
                    0,
                    0
               ]
          },
          {
               "page_size": 20,
               "current": 1,
               "order_by": [],
               "fields": [
                    {
                         "field": "dept_name",
                         "op_type": "match",
                         "values": [
                              "olivere"
                         ]
                    }
               ],
               "es_bool_type": 0,
               "cmd_category": 7,
               "index_alias": "",
               "index_name": "",
               "cmd_type": 0,
               "source": "",
               "id": "",
               "ids": null,
               "PageEsRequests": [
                    {
                         "page_size": 20,
                         "current": 1,
                         "order_by": [],
                         "fields": [
                              {
                                   "field": "dept_name",
                                   "op_type": "match",
                                   "values": [
                                        "olivere"
                                   ]
                              },
                              {
                                   "field": "dept_id",
                                   "op_type": "term",
                                   "values": [
                                        "570362815982862336"
                                   ]
                              },
                              {
                                   "field": "dept_id",
                                   "op_type": "term",
                                   "values": [
                                        "570362815982862336"
                                   ]
                              }
                         ],
                         "es_bool_type": 0,
                         "cmd_category": 7,
                         "index_alias": "",
                         "index_name": "",
                         "cmd_type": 0,
                         "source": "",
                         "id": "",
                         "ids": null,
                         "PageEsRequests": [],
                         "PageEsBoolTypes": []
                    },
                    {
                         "page_size": 20,
                         "current": 1,
                         "order_by": [],
                         "fields": [
                              {
                                   "field": "dept_name",
                                   "op_type": "match",
                                   "values": [
                                        "olivere"
                                   ]
                              },
                              {
                                   "field": "dept_id",
                                   "op_type": "term",
                                   "values": [
                                        "570362815982862336"
                                   ]
                              },
                              {
                                   "field": "dept_id",
                                   "op_type": "term",
                                   "values": [
                                        "570362815982862336"
                                   ]
                              }
                         ],
                         "es_bool_type": 0,
                         "cmd_category": 7,
                         "index_alias": "",
                         "index_name": "",
                         "cmd_type": 0,
                         "source": "",
                         "id": "",
                         "ids": null,
                         "PageEsRequests": [],
                         "PageEsBoolTypes": []
                    }
               ],
               "PageEsBoolTypes": [
                    0,
                    0
               ]
          },
          {
               "page_size": 20,
               "current": 1,
               "order_by": [],
               "fields": [
                    {
                         "field": "dept_name",
                         "op_type": "match",
                         "values": [
                              "olivere"
                         ]
                    }
               ],
               "es_bool_type": 0,
               "cmd_category": 7,
               "index_alias": "",
               "index_name": "",
               "cmd_type": 0,
               "source": "",
               "id": "",
               "ids": null,
               "PageEsRequests": [
                    {
                         "page_size": 20,
                         "current": 1,
                         "order_by": [],
                         "fields": [
                              {
                                   "field": "dept_name",
                                   "op_type": "match",
                                   "values": [
                                        "olivere"
                                   ]
                              },
                              {
                                   "field": "dept_id",
                                   "op_type": "term",
                                   "values": [
                                        "570362815982862336"
                                   ]
                              },
                              {
                                   "field": "dept_id",
                                   "op_type": "term",
                                   "values": [
                                        "570362815982862336"
                                   ]
                              }
                         ],
                         "es_bool_type": 0,
                         "cmd_category": 7,
                         "index_alias": "",
                         "index_name": "",
                         "cmd_type": 0,
                         "source": "",
                         "id": "",
                         "ids": null,
                         "PageEsRequests": [],
                         "PageEsBoolTypes": []
                    },
                    {
                         "page_size": 20,
                         "current": 1,
                         "order_by": [],
                         "fields": [
                              {
                                   "field": "dept_name",
                                   "op_type": "match",
                                   "values": [
                                        "olivere"
                                   ]
                              },
                              {
                                   "field": "dept_id",
                                   "op_type": "term",
                                   "values": [
                                        "570362815982862336"
                                   ]
                              },
                              {
                                   "field": "dept_id",
                                   "op_type": "term",
                                   "values": [
                                        "570362815982862336"
                                   ]
                              }
                         ],
                         "es_bool_type": 0,
                         "cmd_category": 7,
                         "index_alias": "",
                         "index_name": "",
                         "cmd_type": 0,
                         "source": "",
                         "id": "",
                         "ids": null,
                         "PageEsRequests": [],
                         "PageEsBoolTypes": []
                    }
               ],
               "PageEsBoolTypes": [
                    0,
                    0
               ]
          }
     ],
     "PageEsBoolTypes": [
          3,
          3,
          3
     ]
}

增删改

package pagereq

import (
    "gitee.com/ichub/goconfig/common/base/baseutils/jsonutils"
    "gitee.com/ichub/goweb/common/pagemsg/pagees"
    "gitee.com/ichub/goweb/common/pagemsg/pagees/esconst"
    "github.com/sirupsen/logrus"
    "github.com/stretchr/testify/suite"
    "testing"
    "time"
)

type TestCmdRequest struct {
    suite.Suite
    cmdRequest   *CmdRequest
    indexName    string
    QueryRequest *QueryRequest
}

const Indexname = "ichub_sys_dept"

func TestCmdRequests(t *testing.T) {
    suite.Run(t, new(TestCmdRequest))
}
func (this *TestCmdRequest) SetupTest() {

    logrus.Info("SetupTest")
    this.cmdRequest = NewCmdRequest()
    this.QueryRequest = NewQueryRequest()
    this.cmdRequest.IndexName = Indexname //"ichub_sys_dept"
}
func (this *TestCmdRequest) Test001_Delete() {
    this.cmdRequest.Id = "999"
    var re, e = this.cmdRequest.Delete()
    logrus.Info(jsonutils.ToJsonPretty(re), e)

}

func (this *TestCmdRequest) Test002_DeleteByQuery() {
    this.cmdRequest.EsFilter().EsTerm("dept_id", "1222")

    ret, err := this.cmdRequest.DeleteByQuery()
    logrus.Info(ret, err)
}

func (this *TestCmdRequest) Test003_BulkDelete() {
    this.cmdRequest.Ids = []string{"999"}
    var res, e = this.cmdRequest.BulkDelete()
    logrus.Info(jsonutils.ToJsonPretty(res), e)

}
func (this *TestCmdRequest) Test004_Update() {
    const creaby = "creaUpdate1"
    this.cmdRequest.Id = "101"
    this.cmdRequest.Doc = map[string]interface{}{"create_by": creaby}
    var res, e = this.cmdRequest.Update()
    logrus.Info(jsonutils.ToJsonPretty(res), e)
    var r, err = this.Query(this.cmdRequest.Id)
    logrus.Info(r, err)
    this.Equal(1, len(r.DataAsArrays()))
    this.Equal(creaby, r.DataAsArrays()[0]["create_by"].(string))

}

func (this *TestCmdRequest) Test004_UpdateQuery() {
    const creaby = "Test004_UpdateQuery"
    this.cmdRequest.Id = "101"
    this.cmdRequest.EsTerm("dept_id", "101")
    var ps = map[string]interface{}{"create_by": creaby}
    this.cmdRequest.ScriptAs(`ctx._source.create_by = params.create_by`, ps)
    var res, err = this.cmdRequest.UpdateByQuery()
    logrus.Info(jsonutils.ToJsonPretty(res), err)
    var r, _ = this.Query(this.cmdRequest.Id)
    this.Equal(1, len(r.DataAsArrays()))
    this.Equal(creaby, r.DataAsArrays()[0]["create_by"].(string))
    logrus.Info("cmdreq=", this.cmdRequest.ToPrettyString())
}

func (this *TestCmdRequest) Test005_BulkUpdate() {
    const creaby = "bulkUpdate0001"
    const deptid = "101"
    var doc = map[string]interface{}{"create_by": creaby}
    this.cmdRequest.AddDoc(deptid, doc)
    var res, e = this.cmdRequest.BulkUpdate()
    logrus.Info(jsonutils.ToJsonPretty(res), e)
    if e != nil {
       logrus.Error(e)
       return
    }
    time.Sleep(time.Second)
    var r, err = this.Query(deptid)
    logrus.Info(r, err)
    this.Equal(true, err == nil)
    this.Equal(1, len(r.DataAsArrays()))
    this.Equal(creaby, r.DataAsArrays()[0]["create_by"].(string))

}
func (this *TestCmdRequest) Test006_Upsert() {

    const creaby = "creaUpsert6"
    this.cmdRequest.Id = "101"
    this.cmdRequest.Doc = map[string]interface{}{"create_by": creaby}
    var res, err = this.cmdRequest.Upsert()
    logrus.Info(jsonutils.ToJsonPretty(res), err)

    time.Sleep(time.Second)
    var r, _ = this.Query(this.cmdRequest.Id)
    this.Equal(1, len(r.DataAsArrays()))
    this.Equal(creaby, r.DataAsArrays()[0]["create_by"].(string))
}
func (this *TestCmdRequest) Test007_DocAsUpsert() {
    const id = "282828"
    const creaby = "creaDocAsUpsert7"
    this.cmdRequest.Id = id
    this.cmdRequest.Doc = map[string]interface{}{
       "create_by": creaby,
       "dept_id":   id,
    }
    //var res, err = this.cmdRequest.DocAsUpsert()
    this.cmdRequest.CmdType = esconst.ES_CMD_TYPE_DOCASUPSERT
    var res = this.cmdRequest.Exceute()
    logrus.Info(jsonutils.ToJsonPretty(res))
    this.Equal(200, res.Code)
    time.Sleep(time.Second)
    var r, _ = this.Query(id)
    this.Equal(1, len(r.DataAsArrays()))
    this.Equal(creaby, r.DataAsArrays()[0]["create_by"].(string))

}
func (this *TestCmdRequest) Query(id string) (*pagees.PageEsResult, error) {
    var queryRequest = this.QueryRequest
    queryRequest.PageSize = 2
    queryRequest.IndexName = Indexname
    queryRequest.EsTerm("dept_id", id)
    var res, err = queryRequest.EsQueryResult()
    logrus.Info(jsonutils.ToJsonPretty(res), err)
    return res, err

}
func (this *TestCmdRequest) Test008_query() {
    this.QueryRequest.EsTerm("dept_id", 101)
    logrus.Info(this.QueryRequest)
    this.cmdRequest.EsTerm("dept_id", 101)
    this.cmdRequest.CmdType = esconst.ES_CMD_TYPE_UPDATE
    //logrus.Info(jsonutils.ToJsonPretty(this.cmdRequest))
    logrus.Error("cmd=", this.cmdRequest)

}

标签:name,cmdRequest,查询,dept,API,Go,type,id,op
From: https://blog.csdn.net/leijmdas/article/details/139161514

相关文章

  • 探索Go语言的原子操作秘籍:sync/atomic.Value全解析
    引言​在并发编程的世界里,数据的一致性和线程安全是永恒的话题。Go语言以其独特的并发模型——goroutine和channel,简化了并发编程的复杂性。然而,在某些场景下,我们仍然需要一种机制来保证操作的原子性。这就是sync/atomic.Value发挥作用的地方。原子性:并发编程的基石​......
  • OPENAPI3.0介绍
    OpenAPI是一种描述和定义API的规范RESTfulAPI是一种设计API的方法 OPENAPI3.0介绍https://blog.csdn.net/qq_41971087/article/details/126065322https://www.cnblogs.com/yaohl0911/p/14567915.html OpenAPI 中文文档:https://openapi.apifox.cn/ 校验OpenAPI文档......
  • Django验证码配置与使用
    在用户注册、登录页面,为了防止暴力请求,可以加入验证码功能,如果验证码错误,则不需要继续处理,可以减轻一些服务器的压力使用验证码也是一种有效的防止crsf的方法需要安装扩展:pipinstallpillow验证码效果如下图:验证码视图新建viewsUtil.py,定义函数verifycode此段代码用到了PIL......
  • Django模板层之模板语法
    1.变量变量输出语法{{var}}当模版引擎遇到一个变量,将计算这个变量,然后将结果输出变量名必须由字母、数字、下划线(不能以下划线开头)和点组成当模版引擎遇到点("."),会按照下列顺序查询:字典查询,例如:foo["bar"]属性或方法查询,例如:foo.bar数字索引查询,例如:foo[bar]如......
  • Django视图层——2HttpReqeust对象&QueryDict对象
    HttpReqeust对象服务器接收到http协议的请求后,会根据报文创建HttpRequest对象视图函数的第一个参数是HttpRequest对象在django.http模块中定义了HttpRequest对象的API属性下面除非特别说明,属性都是只读的path:一个字符串,表示请求的页面的完整路径,不包含域名method:......
  • SpringMVC+MyBatis 开发社交网站-26_实现图书分页查询
    实现图书分页查询imooc-reader项目:webapp\WEB-INF\ftl\management\book.ftl 图书管理页面<scriptsrc="/resources/layui/layui.all.js"></script><script>   vartable=layui.table;//table数据表格对象   var$=layui.$;//jQuery   varedit......
  • Window GDI+ API有BUG?GetBounds测不准?
    文章目录GraphicsPath的GetBounds测不准?方法一:GetBounds()实战方法二:GetBounds(Matrix)实战GraphicsPath的GetBounds测不准?实战.NET版本的问题?C++也一样,不是.NET的问题怀疑人生MiterLimit惹得祸完美结果结束语最近,在学习系统了解WindowsGDI+绘图,并尝试复现大......
  • Golang初学:项目目录结构,project-layout 项目
    goversiongo1.22.1windows/amd64Windows11+amd64x86_64x86_64GNU/Linux--- 序章golang项目的代码要怎么组织?怎么放比较简洁易读?看下面这个项目就晓得了。 project-layouthttps://github.com/golang-standards/project-layout注,有时访问失败。特写文记录。......
  • 【go】【gin】【validator】
    @目录写在前面validatorinstallFields:Network:Strings:Format:Comparisons:Other:Aliases:validateregularexample参考资料基础/标准库/第三方库golang导航编程规范算法|面试项目写在前面相关博文个人博客首页免责声明:仅供学习交流使用!开源框架可能存在的风险和相关后果将......
  • .net Framework Web Api 实现多国语
    首先,在项目下创建一个Resources文件夹,在Resources文件夹中添加如下资源文件:Message.resx【默认英语】Message.ja.resx 【日语】Message.zh-Hans.resx【简体中文】Message.zh-Hant.resx 【繁体中文】在文件中添加名称和值,例如在简体中文的文件中 在日语文件中 然......