package services import ( "context" "eta/eta_mobile/models" saModel "eta/eta_mobile/models/semantic_analysis" "eta/eta_mobile/models/smart_report" "eta/eta_mobile/services/alarm_msg" "eta/eta_mobile/utils" "fmt" "github.com/olivere/elastic/v7" "strings" ) func NewClient() (client *elastic.Client, err error) { client, err = elastic.NewClient( elastic.SetURL(utils.ES_URL), elastic.SetBasicAuth(utils.ES_USERNAME, utils.ES_PASSWORD), elastic.SetSniff(false)) return } // indexName:索引名称 // mappingJson:表结构 func EsCreateIndex(indexName, mappingJson string) (err error) { client, err := NewClient() if err != nil { return } //定义表结构 exists, err := client.IndexExists(indexName).Do(context.Background()) //<5> if err != nil { return } if !exists { resp, err := client.CreateIndex(indexName).BodyJson(mappingJson).Do(context.Background()) //BodyJson(bodyJson).Do(context.Background()) if err != nil { fmt.Println("CreateIndex Err:" + err.Error()) return err } fmt.Println(resp.Index, resp.ShardsAcknowledged, resp.Acknowledged) } else { fmt.Println(indexName + " 已存在") } return } // 删除数据 func EsDeleteData(indexName, docId string) (err error) { client, err := NewClient() if err != nil { return } resp, err := client.Delete().Index(indexName).Id(docId).Do(context.Background()) fmt.Println(resp) if err != nil { return } if resp.Status == 0 { fmt.Println("删除成功") } else { fmt.Println("AddData", resp.Status, resp.Result) } return } func MappingModify(indexName, mappingJson string) { client, err := NewClient() if err != nil { return } result, err := client.PutMapping().Index(indexName).BodyString(mappingJson).Do(context.Background()) fmt.Println(err) fmt.Println(result) return } // EsAddOrEditReport 新增编辑es报告 func EsAddOrEditReport(indexName, docId string, item *models.ElasticReportDetail) (err error) { defer func() { if err != nil { fmt.Println("EsAddOrEditReport Err:", err.Error()) } }() client, err := NewClient() if err != nil { return } // docId为报告ID+章节ID searchById, err := client.Get().Index(indexName).Id(docId).Do(context.Background()) if err != nil && !strings.Contains(err.Error(), "404") { fmt.Println("Get Err" + err.Error()) return } if searchById != nil && searchById.Found { resp, err := client.Update().Index(indexName).Id(docId).Doc(map[string]interface{}{ "ReportId": item.ReportId, "ReportChapterId": item.ReportChapterId, "Title": item.Title, "Abstract": item.Abstract, "BodyContent": item.BodyContent, "PublishTime": item.PublishTime, "PublishState": item.PublishState, "IsPublicPublish": item.IsPublicPublish, "Author": item.Author, "ClassifyIdFirst": item.ClassifyIdFirst, "ClassifyNameFirst": item.ClassifyNameFirst, "ClassifyIdSecond": item.ClassifyIdSecond, "ClassifyNameSecond": item.ClassifyNameSecond, "Categories": item.Categories, "StageStr": item.StageStr, }).Do(context.Background()) if err != nil { return err } //fmt.Println(resp.Status, resp.Result) if resp.Status == 0 { fmt.Println("修改成功" + docId) err = nil } else { fmt.Println("EditData", resp.Status, resp.Result) } } else { resp, err := client.Index().Index(indexName).Id(docId).BodyJson(item).Do(context.Background()) if err != nil { fmt.Println("新增失败:", err.Error()) return err } if resp.Status == 0 && resp.Result == "created" { fmt.Println("新增成功" + docId) return nil } else { fmt.Println("AddData", resp.Status, resp.Result) } } return } // EsAddOrEditEnglishReport 新增编辑es英文报告 func EsAddOrEditEnglishReport(indexName, docId string, item *models.ElasticEnglishReportDetail) (err error) { defer func() { if err != nil { fmt.Println("EsAddOrEditEnglishReport Err:", err.Error()) go alarm_msg.SendAlarmMsg("新增编辑es英文报告 EsAddOrEditEnglishReport,Err:"+err.Error(), 3) } }() client, err := NewClient() if err != nil { return } // docId为报告ID searchById, err := client.Get().Index(indexName).Id(docId).Do(context.Background()) if err != nil { if strings.Contains(err.Error(), "404") { err = nil } else { fmt.Println("Get Err" + err.Error()) return } } if searchById != nil && searchById.Found { resp, e := client.Update().Index(indexName).Id(docId).Doc(map[string]interface{}{ "Id": item.Id, "ReportId": item.ReportId, "VideoId": item.VideoId, "Title": item.Title, "Abstract": item.Abstract, "BodyContent": item.BodyContent, "PublishTime": item.PublishTime, "PublishState": item.PublishState, "Author": item.Author, "ClassifyIdFirst": item.ClassifyIdFirst, "ClassifyNameFirst": item.ClassifyNameFirst, "ClassifyIdSecond": item.ClassifyIdSecond, "ClassifyNameSecond": item.ClassifyNameSecond, "CreateTime": item.CreateTime, "Overview": item.Overview, "ReportCode": item.ReportCode, "Frequency": item.Frequency, "StageStr": item.StageStr, "ContentSub": item.ContentSub, }).Do(context.Background()) if e != nil { err = e return } //fmt.Println(resp.Status, resp.Result) if resp.Status == 0 { fmt.Println("修改成功" + docId) err = nil } else { fmt.Println("EditData", resp.Status, resp.Result) } } else { resp, e := client.Index().Index(indexName).Id(docId).BodyJson(item).Do(context.Background()) if e != nil { err = e fmt.Println("新增失败:", err.Error()) return } if resp.Status == 0 && resp.Result == "created" { fmt.Println("新增成功" + docId) return } else { fmt.Println("AddData", resp.Status, resp.Result) } } return } // EsAddOrEditSaDoc 新增编辑语义分析文档 func EsAddOrEditSaDoc(indexName, docId string, item *saModel.ElasticSaDoc) (err error) { defer func() { if err != nil { fmt.Println("EsAddOrEditSaDoc Err:", err.Error()) } }() client, e := NewClient() if e != nil { err = e return } // docId为语义分析文档ID+段落ID searchById, e := client.Get().Index(indexName).Id(docId).Do(context.Background()) if e != nil && !strings.Contains(e.Error(), "404") { err = fmt.Errorf("query sa doc err: %s", e.Error()) return } // 更新 if searchById != nil && searchById.Found { docMap := map[string]interface{}{ "SaDocId": item.SaDocId, "SaDocSectionId": item.SaDocSectionId, "ClassifyId": item.ClassifyId, "ClassifyName": item.ClassifyName, "Title": item.Title, "Theme": item.Theme, "BodyContent": item.BodyContent, "Author": item.Author, "CoverImg": item.CoverImg, "CreateTime": item.CreateTime, } resp, e := client.Update().Index(indexName).Id(docId).Doc(docMap).Do(context.Background()) if e != nil { err = fmt.Errorf("update sa doc err: %s", e.Error()) return } if resp.Status == 0 { return } fmt.Println("EditData", resp.Status, resp.Result) return } // 新增 resp, e := client.Index().Index(indexName).Id(docId).BodyJson(item).Do(context.Background()) if e != nil { err = fmt.Errorf("insert sa doc err: %s", e.Error()) return } if resp.Status == 0 && resp.Result == "created" { return } fmt.Println("AddData", resp.Status, resp.Result) return } // EsAddOrEditSmartReport 新增编辑es智能研报 func EsAddOrEditSmartReport(indexName, docId string, item *smart_report.ElasticSmartReport) (err error) { defer func() { if err != nil { fmt.Println("EsAddOrEditSmartReport Err:", err.Error()) } }() client, err := NewClient() if err != nil { return } // docId为报告ID searchById, err := client.Get().Index(indexName).Id(docId).Do(context.Background()) if err != nil && !strings.Contains(err.Error(), "404") { fmt.Println("Get Err" + err.Error()) return } if searchById != nil && searchById.Found { resp, err := client.Update().Index(indexName).Id(docId).Doc(map[string]interface{}{ "SmartReportId": item.SmartReportId, "Title": item.Title, "Abstract": item.Abstract, "BodyContent": item.BodyContent, "PublishTime": item.PublishTime, "PublishState": item.PublishState, "Author": item.Author, "ClassifyIdFirst": item.ClassifyIdFirst, "ClassifyNameFirst": item.ClassifyNameFirst, "ClassifyIdSecond": item.ClassifyIdSecond, "ClassifyNameSecond": item.ClassifyNameSecond, "StageStr": item.StageStr, "Frequency": item.Frequency, }).Do(context.Background()) if err != nil { return err } //fmt.Println(resp.Status, resp.Result) if resp.Status == 0 { fmt.Println("修改成功" + docId) err = nil } else { fmt.Println("EditData", resp.Status, resp.Result) } } else { resp, err := client.Index().Index(indexName).Id(docId).BodyJson(item).Do(context.Background()) if err != nil { fmt.Println("新增失败:", err.Error()) return err } if resp.Status == 0 && resp.Result == "created" { fmt.Println("新增成功" + docId) return nil } else { fmt.Println("AddData", resp.Status, resp.Result) } } return }