Go实战全家桶之63:goweb通用es查询cache--源于实践项目
·
goweb: https://gitee.com/leijmdas/goweb/settings#index
type IwebFacade[T baseindex.IndexMapping] interface {
SaveIndex(indexTable baseindex.IndexIface) *basedto.IchubResult
UpdateStru(ids any, doc any) *basedto.IchubResult
Update(ids any, doc map[string]any) *basedto.IchubResult
DeleteByQuery() *basedto.IchubResult
Delete(id any) *basedto.IchubResult
BulkDelete(ids ...any) *basedto.IchubResult
BulkIndex(docs ...[]*cmddto.BulkDoc) *basedto.IchubResult
BulkCreate(docs ...[]*cmddto.BulkDoc) *basedto.IchubResult
BulkUpdate(docs ...[]*cmddto.BulkDoc) *basedto.IchubResult
LogQueryMaster(q *elastic.BoolQuery, msg string)
LogInfoQuery(q *elastic.BoolQuery, prompt ...string)
CacheFindId(id any) *pagemodel.IchubResult[T]
CacheFindKey(key string, id any) *pagemodel.IchubResult[T]
CacheListAll() *pagemodel.PageResult[T]
CacheListAllOf(fieldName string, value any) *pagemodel.IchubResult[T]
CheckRecord(keyAny any, exps string) *basedto.IchubResult
}
func (self *TestDbSuite) Test301_CacheListAllOf() {
var qq = esentity.NewWebFacadeWebsiteUtmsEsOf(elastic.NewBoolQuery())
qq.SetPageSize(3)
var ret = qq.CacheListAllOf("id", 1064580119482499075)
golog.Info(ret)
self.Equal(200, ret.Code)
self.Equal(true, ret.ExistRecord())
}
func (self *TestDbSuite) Test302_CacheFindId() {
var qq = esentity.NewWebFacadeWebsiteUtmsEsOf(elastic.NewBoolQuery())
qq.SetPageSize(3)
var ret = qq.CacheFindId(1)
golog.Info(ret)
self.Equal(200, ret.Code)
self.Equal(true, ret.ExistRecord())
}
est001_CacheListAll1(t *testing.T) {
var ret = apicache.FindBeanQueryDeptCache().CacheFindId(1)
golog.Info(ret)
}
package apicache
import (
"gitee.com/leijmdas/gobase/goconfig/common/base/basedto"
"gitee.com/leijmdas/goweb/common/webclient/eswebclient/webfacade"
"gitee.com/leijmdas/goweb/domain/es/esentity"
"gitee.com/leijmdas/goweb/gopage/pagemodel"
"github.com/olivere/elastic/v7"
)
type QueryDeptCache struct {
basedto.BaseEntitySingle
qq *webfacade.WebFacade[*esentity.IchubSysDeptEs]
}
func NewQueryDeptCache() *QueryDeptCache {
var qdc = &QueryDeptCache{}
qdc.Init()
return qdc
}
func (self *QueryDeptCache) Init() {
self.qq = self.webFacade()
}
func (self *QueryDeptCache) QueryOf(DeptName string) *pagemodel.IchubResult[*esentity.IchubSysDeptEs] {
return self.qq.CacheListAllOf("DeptName", DeptName)
}
func (self *QueryDeptCache) CacheListAll() *pagemodel.PageResult[*esentity.IchubSysDeptEs] {
return self.qq.CacheListAll()
}
func (self *QueryDeptCache) webFacade() *webfacade.WebFacade[*esentity.IchubSysDeptEs] {
var q = elastic.NewBoolQuery()
//q.Filter(elastic.NewTermQuery("active", true))
q.Filter(elastic.NewRangeQuery("dept_id").Gt(0))
var qq = esentity.NewWebFacadeIchubSysDeptEsOf(q)
qq.SetSource("dept_id,dept_name")
qq.SortOne("dept_id", true)
qq.LogInfoQuery(q)
return qq
}
func (self *QueryDeptCache) CacheFindId(id any) *pagemodel.IchubResult[*esentity.IchubSysDeptEs] {
return self.qq.CacheFindId(id)
}
1 标准化:容器时区,ES、DB时间字段;地点、地区 2. 多语言组件:单独的代码, 访问模式: 代码统一处理,不分散 3. DAO组件:增删改查聚合一个接口,一个是DB、一个是ES 4. 首页UI通用查询组件:查询请求和返回,封装为一个接口 5. 测试组件:一个自动化的接口检查,便于单元测试;一个rest接口的单元测试框架二次封装 6. 跨领域接口组件:聚合根的服务,没时间,关键是通用域 7. golog日志组件 8. godi依赖注入组件 9. 通用缓存ES查询应用组件: webfacade CacheListAll/CacheListOne 10. goframe开源组件:gconv类型转换 好处:降低代码复杂度, 提升开发效率,减少重复代码重复测试,提高开发质量。

更多推荐

所有评论(0)