Browse Source

es 正式环境查询

master
dark 1 year ago
parent
commit
302a3408e2
  1. 16
      demo.api
  2. 28
      internal/handler/esprosearchdistricthandler.go
  3. 4
      internal/handler/routes.go
  4. 2
      internal/logic/espressuretestlogic.go
  5. 72
      internal/logic/esprosearchdistrictlogic.go
  6. 9
      internal/types/types.go
  7. 0
      model/es_dev/esmodel.go
  8. 144
      model/es_pro/thoroughly_district_prod_91_model.go

16
demo.api

@ -11,6 +11,15 @@ type EsQueryName {
Size int32 `json:"size"` Size int32 `json:"size"`
} }
type EsProQueryName {
Name string `json:"name"`
Code string `json:"code"`
LotType string `json:"lotType"`
Year string `json:"year"`
Page int32 `json:"page"`
Size int32 `json:"size"`
}
// 通用api返回参数 // 通用api返回参数
type Response { type Response {
Success bool `json:"success,default=true"` // 是否成功 Success bool `json:"success,default=true"` // 是否成功
@ -31,12 +40,13 @@ service demo-api {
) )
@handler EsPressureTestHandler @handler EsPressureTestHandler
post /es/pressureTest(EsQueryName) returns (Response) post /es/pressureTest(EsQueryName) returns (Response)
@doc( @doc(
summary: "es 业务压测 demo", summary: "es pro 正式环境",
) )
@handler EsBusinessPressureTestHandler @handler EsProSearchDistrictHandler
post /es/businessPressureTest returns (Response) post /es/pro/searchDistrict(EsProQueryName) returns (Response)
@doc( @doc(
summary: "测试返回503", summary: "测试返回503",

28
internal/handler/esprosearchdistricthandler.go

@ -0,0 +1,28 @@
package handler
import (
"net/http"
"demo/internal/logic"
"demo/internal/svc"
"demo/internal/types"
"github.com/zeromicro/go-zero/rest/httpx"
)
func EsProSearchDistrictHandler(svcCtx *svc.ServiceContext) http.HandlerFunc {
return func(w http.ResponseWriter, r *http.Request) {
var req types.EsProQueryName
if err := httpx.Parse(r, &req); err != nil {
httpx.ErrorCtx(r.Context(), w, err)
return
}
l := logic.NewEsProSearchDistrictLogic(r.Context(), svcCtx)
resp, err := l.EsProSearchDistrict(&req)
if err != nil {
httpx.ErrorCtx(r.Context(), w, err)
} else {
httpx.OkJsonCtx(r.Context(), w, resp)
}
}
}

4
internal/handler/routes.go

@ -24,8 +24,8 @@ func RegisterHandlers(server *rest.Server, serverCtx *svc.ServiceContext) {
}, },
{ {
Method: http.MethodPost, Method: http.MethodPost,
Path: "/es/businessPressureTest", Path: "/es/pro/searchDistrict",
Handler: EsBusinessPressureTestHandler(serverCtx), Handler: EsProSearchDistrictHandler(serverCtx),
}, },
{ {
Method: http.MethodGet, Method: http.MethodGet,

2
internal/logic/espressuretestlogic.go

@ -6,7 +6,7 @@ import (
"demo/internal/svc" "demo/internal/svc"
"demo/internal/types" "demo/internal/types"
"demo/model/es" es "demo/model/es_dev"
"github.com/zeromicro/go-zero/core/logx" "github.com/zeromicro/go-zero/core/logx"
) )

72
internal/logic/esprosearchdistrictlogic.go

@ -0,0 +1,72 @@
package logic
import (
"context"
"fmt"
"demo/internal/svc"
"demo/internal/types"
es "demo/model/es_pro"
"github.com/zeromicro/go-zero/core/logx"
)
type EsProSearchDistrictLogic struct {
logx.Logger
ctx context.Context
svcCtx *svc.ServiceContext
}
func NewEsProSearchDistrictLogic(ctx context.Context, svcCtx *svc.ServiceContext) *EsProSearchDistrictLogic {
return &EsProSearchDistrictLogic{
Logger: logx.WithContext(ctx),
ctx: ctx,
svcCtx: svcCtx,
}
}
func (l *EsProSearchDistrictLogic) EsProSearchDistrict(req *types.EsProQueryName) (resp *types.Response, err error) {
esQuery := `
{
"query": {
"bool": {
"must": [
{
"match_phrase": {
"districtName": "%s"
}
},
{
"match_phrase": {
"year": "%s"
}
},
{
"match_phrase": {
"lotType": "%s"
}
},
{
"match_phrase": {
"districtCode": "%s"
}
}
]
}
}
}
`
esQueryStr := fmt.Sprintf(esQuery, req.Name, req.Year, req.LotType, req.Code)
doc, err := es.EsServiceApp.EsSearchDocWithStr(l.ctx, esQueryStr, int(req.Page), int(req.Size))
if err != nil {
return nil, err
}
return &types.Response{
Success: true,
Message: "success",
Result: doc,
}, nil
}

9
internal/types/types.go

@ -11,6 +11,15 @@ type EsQueryName struct {
Size int32 `json:"size"` Size int32 `json:"size"`
} }
type EsProQueryName struct {
Name string `json:"name"`
Code string `json:"code"`
LotType string `json:"lotType"`
Year string `json:"year"`
Page int32 `json:"page"`
Size int32 `json:"size"`
}
type Response struct { type Response struct {
Success bool `json:"success,default=true"` // 是否成功 Success bool `json:"success,default=true"` // 是否成功
Message string `json:"message,optional"` // 消息 Message string `json:"message,optional"` // 消息

0
model/es/esmodel.go → model/es_dev/esmodel.go

144
model/es_pro/thoroughly_district_prod_91_model.go

@ -0,0 +1,144 @@
package es
import (
"bytes"
"context"
"encoding/json"
esclient "github.com/elastic/go-elasticsearch/v7"
jsoniter "github.com/json-iterator/go"
)
type (
defaultEsService interface {
EsConnect() *esclient.Client
EsCreateIndex()
EsDeleteIndex()
EsAddDoc()
EsDeleteDoc()
EsUpdateDoc()
EsSearchDoc(index string, query map[string]interface{}, from int, size int) interface{}
}
EsService struct {
}
)
var (
EsServiceApp = new(EsService)
logIndex = "thoroughly_district_prod_91"
)
func (e *EsService) EsConnect() *esclient.Client {
cfg := esclient.Config{
Addresses: []string{
"http://172.16.102.18:9200",
"http://172.16.102.59:9200",
"http://172.16.102.60:9200",
// "http://xxx.xxx.xxx.xxx:9200",
},
Username: "elastic",
Password: "QWEasd#2022#zsbm",
}
es, err := esclient.NewClient(cfg)
if err != nil {
panic(err)
}
return es
}
// 创建索引
func (e *EsService) EsCreateIndex() {
}
// 删除索引
func (e *EsService) EsDeleteIndex() {
}
// 添加文档
func (e *EsService) EsAddDoc() {
}
// 删除文档
func (e *EsService) EsDeleteDoc() {
}
// 更新文档
func (e *EsService) EsUpdateDoc() {
}
// 查询文档- map[string]interface{}
func (e *EsService) EsSearchDoc(ctx context.Context, query map[string]interface{}, from int, size int) (doc interface{}, err error) {
es := e.EsConnect()
// Build the request body.
var buf bytes.Buffer
if err := json.NewEncoder(&buf).Encode(query); err != nil {
// httpresult.ErrorResult("参数解析错误", err)
return nil, err
}
// Perform the search request.
res, err := es.Search(
es.Search.WithContext(context.Background()),
es.Search.WithIndex(logIndex),
es.Search.WithBody(&buf),
es.Search.WithTrackTotalHits(true),
es.Search.WithPretty(),
es.Search.WithFrom(from),
es.Search.WithSize(size),
// es.Search.WithSort("@timestamp:desc"),
)
if err != nil {
// httpresult.ErrorResult("查询失败", err)
return nil, err
}
defer res.Body.Close()
result := map[string]interface{}{}
jserr := jsoniter.NewDecoder(res.Body).Decode(&result)
if jserr != nil {
return nil, jserr
}
return result, nil
}
// 查询文档- muti string
func (e *EsService) EsSearchDocWithStr(ctx context.Context, query string, from int, size int) (doc interface{}, err error) {
es := e.EsConnect()
// Build the request body.
// var buf bytes.Buffer
// if err := json.NewEncoder(&buf).Encode(query); err != nil {
// httpresult.ErrorResult("参数解析错误", err)
// }
// Perform the search request.
// string query to io.Reader
// query = `{"query":{"match_all":{}}}`
var buf = bytes.NewBufferString(query)
res, err := es.Search(
es.Search.WithContext(context.Background()),
es.Search.WithIndex(logIndex),
es.Search.WithBody(buf),
es.Search.WithTrackTotalHits(true),
es.Search.WithPretty(),
es.Search.WithFrom(from),
es.Search.WithSize(size),
// es.Search.WithSort("@timestamp:desc"),
)
if err != nil {
// httpresult.ErrorResult("查询失败", err)
return nil, err
}
defer res.Body.Close()
result := map[string]interface{}{}
jserr := jsoniter.NewDecoder(res.Body).Decode(&result)
if jserr != nil {
return nil, jserr
}
return result, nil
}
Loading…
Cancel
Save