From 741138b3ea7cd74a536a8b334ebc7d76d496cffb Mon Sep 17 00:00:00 2001 From: henry Date: Thu, 23 Dec 2021 10:33:31 +0800 Subject: [PATCH] =?UTF-8?q?feat=EF=BC=9A=E4=BC=98=E5=8C=96=E4=BF=A1?= =?UTF-8?q?=E6=81=AF?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/api/website/api/es.go | 10 ++-- app/api/website/controller/manage/search.go | 2 +- app/service/es.go | 32 ++----------- serve/es/es_test.go | 40 ++++++++++++++-- serve/es/serve.go | 53 +++++++++++++++++---- 5 files changed, 92 insertions(+), 45 deletions(-) diff --git a/app/api/website/api/es.go b/app/api/website/api/es.go index dda1c9e..35f8515 100644 --- a/app/api/website/api/es.go +++ b/app/api/website/api/es.go @@ -10,9 +10,10 @@ type ES struct{} func (*ES) Create(c *gin.Context) { form := &struct { - ID uint64 `json:"id" form:"id"` - Title string `json:"title" form:"title"` - Keyword string `json:"keyword" form:"keyword"` + ID uint64 `json:"id" form:"id"` + Title string `json:"title" form:"title"` + Keyword string `json:"keyword" form:"keyword"` + Research string `json:"research" form:"research"` }{} if err := api.Bind(form)(c); err != nil { api.APIFailure(err.(error))(c) @@ -22,6 +23,7 @@ func (*ES) Create(c *gin.Context) { service.WithManageID(form.ID), service.WithManageTitle(form.Title), service.WithManageKeyword(form.Keyword), + service.WithManageResearch(form.Research), ) api.APIResponse(manage.Create())(c) } @@ -35,6 +37,6 @@ func (*ES) Search(c *gin.Context) { return } manage := service.NewManage() - data, err := manage.Search(form.Params) + data, err := manage.Search(1, 10, form.Params) api.APIResponse(err, data)(c) } diff --git a/app/api/website/controller/manage/search.go b/app/api/website/controller/manage/search.go index 90fc02a..789483d 100644 --- a/app/api/website/controller/manage/search.go +++ b/app/api/website/controller/manage/search.go @@ -93,7 +93,7 @@ func (c *Search) Launch(identity int, params string) (interface{}, error) { _params := map[string]interface{}{ "title": params, "keyword": params, "research": params, } - data, err := manage.Search(_params) + data, err := manage.Search(1, 1, _params) if err != nil { return nil, err diff --git a/app/service/es.go b/app/service/es.go index d6885ba..31f6481 100644 --- a/app/service/es.go +++ b/app/service/es.go @@ -2,10 +2,7 @@ package service import ( "SciencesServer/serve/es" - "context" "encoding/json" - "fmt" - "github.com/olivere/elastic/v7" ) type Manage struct { @@ -24,34 +21,11 @@ func (c *Manage) Index() string { func (this *Manage) Create() error { _bytes, _ := json.Marshal(this) - _, err := es.GetInstance().Index().Index(this.Index()).BodyJson(string(_bytes)).Do(context.Background()) - return err + return es.Create(this.Index(), _bytes) } -func (this *Manage) Search(condition map[string]interface{}) (interface{}, error) { - search := elastic.NewSearchSource() - - for k, v := range condition { - search.Query(elastic.NewMatchQuery(k, fmt.Sprintf("%v", v))) - } - service := es.GetInstance().Search().Index(this.Index()).SearchSource(search) - - result, err := service.Do(context.Background()) - - if err != nil { - return nil, err - } - out := make([]*Manage, 0) - - for _, hit := range result.Hits.Hits { - data := new(Manage) - - if err = json.Unmarshal(hit.Source, data); err != nil { - return nil, err - } - out = append(out, data) - } - return out, nil +func (this *Manage) Search(page, pageSize int, condition map[string]interface{}) (interface{}, error) { + return es.Search(this, this.Index(), condition, page, pageSize) } func WithManageID(id uint64) ManageOption { diff --git a/serve/es/es_test.go b/serve/es/es_test.go index 32fe6f0..e765c85 100644 --- a/serve/es/es_test.go +++ b/serve/es/es_test.go @@ -5,6 +5,7 @@ import ( "encoding/json" "fmt" "github.com/olivere/elastic/v7" + "reflect" "strings" "testing" ) @@ -91,12 +92,45 @@ func TestNewInstance1(t *testing.T) { //t.Log(resp) } +type Manage struct { + ID uint64 `json:"id"` +} + func TestNewInstance2(t *testing.T) { - NewInstance( - WithEsAddress([]string{"http://192.168.0.188:9200"}), - ).Init().Local() + //NewInstance( + // WithEsAddress([]string{"http://192.168.0.188:9200"}), + //).Init().Local() //client.Search(func(request *esapi.SearchRequest) { // //}) + + function := func(src interface{}) { + obj := reflect.ValueOf(src).Interface() + t.Log(obj) + + var a interface{} = &Manage{ID: 123123} + + out := make([]interface{}, 0) + + out = append(out, a) + + } + + manage := new(Manage) + + function(manage) + + var a interface{} = &Manage{ID: 123123} + + out := make([]interface{}, 0) + + out = append(out, a) + + t.Log(reflect.TypeOf(manage)) + + for _, v := range out { + t.Log(v.(*Manage)) + } + t.Log(a) } diff --git a/serve/es/serve.go b/serve/es/serve.go index 98ef7a7..dbbd61e 100644 --- a/serve/es/serve.go +++ b/serve/es/serve.go @@ -1,13 +1,50 @@ package es -func Create() error { - //_, err := client.Index(). - // Index("students"). - // BodyJson(string(dataJSON)). - // Do(context.Background()) - return nil +import ( + "context" + "encoding/json" + "github.com/olivere/elastic/v7" + "reflect" +) + +// Create 创建操作 +func Create(index string, body []byte) error { + _, err := client.Index(). + Index(index). + BodyJson(string(body)). + Do(context.Background()) + return err } -func Search() { - //resp, err := client.Search() +// Search 搜索操作 +func Search(src interface{}, index string, params map[string]interface{}, page, pageSize int) ([]interface{}, error) { + query := elastic.NewBoolQuery() + + for k, v := range params { + query.Should(elastic.NewMatchQuery(k, v)) + } + service := client.Search().Index(index).Pretty(true).Query(query) + + if page > 0 && pageSize > 0 { + // 游标分页 + service.From((page - 1) * pageSize) + service.Size(pageSize) + } + result, err := service.Do(context.Background()) + + if err != nil { + return nil, err + } + out := make([]interface{}, 0) + + for _, hit := range result.Hits.Hits { + data := new(interface{}) + reflect.DeepEqual(data, src) + + if err = json.Unmarshal(hit.Source, data); err != nil { + return nil, err + } + out = append(out, data) + } + return out, err }