|
@@ -0,0 +1,1287 @@
|
|
|
+package elastic
|
|
|
+
|
|
|
+import (
|
|
|
+ "context"
|
|
|
+ "encoding/json"
|
|
|
+ "errors"
|
|
|
+ "eta/eta_forum_admin/models"
|
|
|
+ "eta/eta_forum_admin/utils"
|
|
|
+ "fmt"
|
|
|
+ "github.com/olivere/elastic/v7"
|
|
|
+ "strconv"
|
|
|
+)
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+func EsCreateIndex(indexName, mappingJson string) (err error) {
|
|
|
+ client := utils.EsClient
|
|
|
+
|
|
|
+
|
|
|
+ exists, err := client.IndexExists(indexName).Do(context.Background())
|
|
|
+ if err != nil {
|
|
|
+ return
|
|
|
+ }
|
|
|
+ if !exists {
|
|
|
+ resp, err := client.CreateIndex(indexName).BodyJson(mappingJson).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 := utils.EsClient
|
|
|
+
|
|
|
+ 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 := utils.EsClient
|
|
|
+ result, err := client.PutMapping().Index(indexName).BodyString(mappingJson).Do(context.Background())
|
|
|
+ fmt.Println(err)
|
|
|
+ fmt.Println(result)
|
|
|
+ return
|
|
|
+}
|
|
|
+
|
|
|
+
|
|
|
+func EsAddOrEditEdbInfoData(indexName, docId string, item *models.EdbInfoList) (err error) {
|
|
|
+ defer func() {
|
|
|
+ if err != nil {
|
|
|
+ fmt.Println("EsAddOrEditData Err:", err.Error())
|
|
|
+ }
|
|
|
+ }()
|
|
|
+ client := utils.EsClient
|
|
|
+
|
|
|
+ resp, err := client.Index().Index(indexName).Id(docId).BodyJson(item).Do(context.Background())
|
|
|
+ if err != nil {
|
|
|
+ fmt.Println("新增失败:", err.Error())
|
|
|
+ return err
|
|
|
+ }
|
|
|
+ fmt.Println(resp)
|
|
|
+ if resp.Status == 0 {
|
|
|
+ fmt.Println("新增成功", resp.Result)
|
|
|
+ err = nil
|
|
|
+ } else {
|
|
|
+ fmt.Println("AddData", resp.Status, resp.Result)
|
|
|
+ }
|
|
|
+ return
|
|
|
+}
|
|
|
+
|
|
|
+
|
|
|
+func SearchEdbInfoData(indexName, keywordStr string, from, size, filterSource, source int, edbInfoType int8, frequency string, noPermissionEdbInfoIdList []int) (total int64, list []*models.EdbInfoList, err error) {
|
|
|
+ list = make([]*models.EdbInfoList, 0)
|
|
|
+ defer func() {
|
|
|
+ if err != nil {
|
|
|
+ fmt.Println("EsAddOrEditData Err:", err.Error())
|
|
|
+ }
|
|
|
+ }()
|
|
|
+
|
|
|
+ highlight := elastic.NewHighlight()
|
|
|
+ highlight = highlight.Fields(elastic.NewHighlighterField("EdbCode"), elastic.NewHighlighterField("EdbName"))
|
|
|
+ highlight = highlight.PreTags("<font color='red'>").PostTags("</font>")
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+ mustMap := make([]interface{}, 0)
|
|
|
+ mustNotMap := make([]interface{}, 0)
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+ switch filterSource {
|
|
|
+ case 2:
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+ mustMap = []interface{}{
|
|
|
+ map[string]interface{}{
|
|
|
+ "term": map[string]interface{}{
|
|
|
+ "Frequency.keyword": "月度",
|
|
|
+
|
|
|
+ },
|
|
|
+ },
|
|
|
+ }
|
|
|
+ case 3:
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+ case 4:
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+ mustMap = []interface{}{
|
|
|
+ map[string]interface{}{
|
|
|
+ "term": map[string]interface{}{
|
|
|
+ "EdbType": 1,
|
|
|
+ },
|
|
|
+ },
|
|
|
+ }
|
|
|
+ case 5:
|
|
|
+ mustMap = []interface{}{
|
|
|
+ map[string]interface{}{
|
|
|
+ "term": map[string]interface{}{
|
|
|
+ "Source": 6,
|
|
|
+ },
|
|
|
+ },
|
|
|
+ }
|
|
|
+ case 6:
|
|
|
+ mustNotMap = []interface{}{
|
|
|
+ map[string]interface{}{
|
|
|
+ "match": map[string]interface{}{
|
|
|
+ "Frequency.keyword": "年度",
|
|
|
+ },
|
|
|
+ },
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+
|
|
|
+ if source > 0 {
|
|
|
+ mustMap = append(mustMap, map[string]interface{}{
|
|
|
+ "term": map[string]interface{}{
|
|
|
+ "Source": source,
|
|
|
+
|
|
|
+ },
|
|
|
+ })
|
|
|
+ }
|
|
|
+
|
|
|
+ if frequency != "" {
|
|
|
+ mustMap = append(mustMap, map[string]interface{}{
|
|
|
+ "term": map[string]interface{}{
|
|
|
+ "Frequency.keyword": frequency,
|
|
|
+
|
|
|
+ },
|
|
|
+ })
|
|
|
+ }
|
|
|
+
|
|
|
+
|
|
|
+ if len(noPermissionEdbInfoIdList) > 0 {
|
|
|
+ mustNotMap = append(mustNotMap, map[string]interface{}{
|
|
|
+ "terms": map[string]interface{}{
|
|
|
+ "EdbInfoId": noPermissionEdbInfoIdList,
|
|
|
+
|
|
|
+ },
|
|
|
+ })
|
|
|
+ }
|
|
|
+
|
|
|
+
|
|
|
+ if edbInfoType >= 0 {
|
|
|
+ mustMap = append(mustMap, map[string]interface{}{
|
|
|
+ "term": map[string]interface{}{
|
|
|
+ "EdbInfoType": edbInfoType,
|
|
|
+ },
|
|
|
+ })
|
|
|
+ }
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+ shouldMap := map[string]interface{}{
|
|
|
+ "should": []interface{}{
|
|
|
+ map[string]interface{}{
|
|
|
+ "match": map[string]interface{}{
|
|
|
+ "EdbCode": keywordStr,
|
|
|
+
|
|
|
+ },
|
|
|
+ },
|
|
|
+ map[string]interface{}{
|
|
|
+ "match": map[string]interface{}{
|
|
|
+ "EdbName": keywordStr,
|
|
|
+
|
|
|
+ },
|
|
|
+ },
|
|
|
+ map[string]interface{}{
|
|
|
+ "match": map[string]interface{}{
|
|
|
+ "EdbNameEn": keywordStr,
|
|
|
+
|
|
|
+ },
|
|
|
+ },
|
|
|
+ },
|
|
|
+ }
|
|
|
+ mustMap = append(mustMap, map[string]interface{}{
|
|
|
+ "bool": shouldMap,
|
|
|
+ })
|
|
|
+
|
|
|
+ return searchEdbInfoData(indexName, mustMap, mustNotMap, shouldMap, from, size)
|
|
|
+}
|
|
|
+
|
|
|
+func SearchEdbInfoDataBak(indexName, keywordStr string, from, size, filterSource, source int, frequency string) (total int64, list []*models.EdbInfoList, err error) {
|
|
|
+ list = make([]*models.EdbInfoList, 0)
|
|
|
+ defer func() {
|
|
|
+ if err != nil {
|
|
|
+ fmt.Println("EsAddOrEditData Err:", err.Error())
|
|
|
+ }
|
|
|
+ }()
|
|
|
+ client := utils.EsClient
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+ highlight := elastic.NewHighlight()
|
|
|
+ highlight = highlight.Fields(elastic.NewHighlighterField("EdbCode"), elastic.NewHighlighterField("EdbName"))
|
|
|
+ highlight = highlight.PreTags("<font color='red'>").PostTags("</font>")
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+ mustMap := make([]interface{}, 0)
|
|
|
+ mustNotMap := make([]interface{}, 0)
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+ switch filterSource {
|
|
|
+ case 2:
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+ mustMap = []interface{}{
|
|
|
+ map[string]interface{}{
|
|
|
+ "term": map[string]interface{}{
|
|
|
+ "Frequency.keyword": "月度",
|
|
|
+
|
|
|
+ },
|
|
|
+ },
|
|
|
+ }
|
|
|
+ case 3:
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+ case 4:
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+ mustMap = []interface{}{
|
|
|
+ map[string]interface{}{
|
|
|
+ "term": map[string]interface{}{
|
|
|
+ "EdbType": 1,
|
|
|
+ },
|
|
|
+ },
|
|
|
+ }
|
|
|
+ case 5:
|
|
|
+ mustMap = []interface{}{
|
|
|
+ map[string]interface{}{
|
|
|
+ "term": map[string]interface{}{
|
|
|
+ "Source": 6,
|
|
|
+ },
|
|
|
+ },
|
|
|
+ }
|
|
|
+ case 6:
|
|
|
+ mustNotMap = []interface{}{
|
|
|
+ map[string]interface{}{
|
|
|
+ "match": map[string]interface{}{
|
|
|
+ "Frequency.keyword": "年度",
|
|
|
+ },
|
|
|
+ },
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+
|
|
|
+ if source > 0 {
|
|
|
+ mustMap = append(mustMap, map[string]interface{}{
|
|
|
+ "term": map[string]interface{}{
|
|
|
+ "Source": source,
|
|
|
+
|
|
|
+ },
|
|
|
+ })
|
|
|
+ }
|
|
|
+
|
|
|
+ if frequency != "" {
|
|
|
+ mustMap = append(mustMap, map[string]interface{}{
|
|
|
+ "term": map[string]interface{}{
|
|
|
+ "Frequency.keyword": frequency,
|
|
|
+
|
|
|
+ },
|
|
|
+ })
|
|
|
+ }
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+ shouldMap := map[string]interface{}{
|
|
|
+ "should": []interface{}{
|
|
|
+ map[string]interface{}{
|
|
|
+ "match": map[string]interface{}{
|
|
|
+ "EdbCode": keywordStr,
|
|
|
+
|
|
|
+ },
|
|
|
+ },
|
|
|
+ map[string]interface{}{
|
|
|
+ "match": map[string]interface{}{
|
|
|
+ "EdbName": keywordStr,
|
|
|
+
|
|
|
+ },
|
|
|
+ },
|
|
|
+
|
|
|
+
|
|
|
+ map[string]interface{}{
|
|
|
+ "match": map[string]interface{}{
|
|
|
+ "EdbCode": map[string]interface{}{
|
|
|
+ "query": keywordStr,
|
|
|
+ "operator": "and",
|
|
|
+ },
|
|
|
+
|
|
|
+ },
|
|
|
+ },
|
|
|
+
|
|
|
+
|
|
|
+ map[string]interface{}{
|
|
|
+ "match": map[string]interface{}{
|
|
|
+ "EdbName": map[string]interface{}{
|
|
|
+ "query": keywordStr,
|
|
|
+ "operator": "and",
|
|
|
+ },
|
|
|
+
|
|
|
+ },
|
|
|
+ },
|
|
|
+ },
|
|
|
+ }
|
|
|
+ mustMap = append(mustMap, map[string]interface{}{
|
|
|
+ "bool": shouldMap,
|
|
|
+ })
|
|
|
+
|
|
|
+ queryMap := map[string]interface{}{
|
|
|
+ "query": map[string]interface{}{
|
|
|
+ "bool": map[string]interface{}{
|
|
|
+ "must": mustMap,
|
|
|
+ "must_not": mustNotMap,
|
|
|
+
|
|
|
+ },
|
|
|
+ },
|
|
|
+ }
|
|
|
+
|
|
|
+
|
|
|
+ requestTotalHits := client.Count(indexName).BodyJson(queryMap)
|
|
|
+ total, err = requestTotalHits.Do(context.Background())
|
|
|
+ if err != nil {
|
|
|
+ return
|
|
|
+ }
|
|
|
+
|
|
|
+ queryMap["from"] = from
|
|
|
+ queryMap["size"] = size
|
|
|
+ jsonBytes, _ := json.Marshal(queryMap)
|
|
|
+ fmt.Println(string(jsonBytes))
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+ request := client.Search(indexName).Highlight(highlight).Source(queryMap)
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+ searchMap := make(map[string]string)
|
|
|
+
|
|
|
+ searchResp, err := request.Do(context.Background())
|
|
|
+ if err != nil {
|
|
|
+ return
|
|
|
+ }
|
|
|
+ fmt.Println(searchResp)
|
|
|
+ fmt.Println(searchResp.Status)
|
|
|
+ if searchResp.Status != 0 {
|
|
|
+ return
|
|
|
+ }
|
|
|
+ if searchResp.Hits != nil {
|
|
|
+ for _, v := range searchResp.Hits.Hits {
|
|
|
+ if _, ok := searchMap[v.Id]; !ok {
|
|
|
+ itemJson, tmpErr := v.Source.MarshalJSON()
|
|
|
+ if tmpErr != nil {
|
|
|
+ err = tmpErr
|
|
|
+ fmt.Println("movieJson err:", err)
|
|
|
+ return
|
|
|
+ }
|
|
|
+ edbInfoItem := new(models.EdbInfoList)
|
|
|
+ tmpErr = json.Unmarshal(itemJson, &edbInfoItem)
|
|
|
+ if tmpErr != nil {
|
|
|
+ fmt.Println("json.Unmarshal movieJson err:", tmpErr)
|
|
|
+ err = tmpErr
|
|
|
+ return
|
|
|
+ }
|
|
|
+ if len(v.Highlight["EdbCode"]) > 0 {
|
|
|
+ edbInfoItem.EdbCode = v.Highlight["EdbCode"][0]
|
|
|
+ }
|
|
|
+ if len(v.Highlight["EdbName"]) > 0 {
|
|
|
+ edbInfoItem.EdbCode = v.Highlight["EdbName"][0]
|
|
|
+ }
|
|
|
+ list = append(list, edbInfoItem)
|
|
|
+ searchMap[v.Id] = v.Id
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+ return
|
|
|
+}
|
|
|
+
|
|
|
+
|
|
|
+func SearchAddPredictEdbInfoData(indexName, keywordStr string, noPermissionEdbInfoIdList []int, from, size int) (total int64, list []*models.EdbInfoList, err error) {
|
|
|
+ list = make([]*models.EdbInfoList, 0)
|
|
|
+ defer func() {
|
|
|
+ if err != nil {
|
|
|
+ fmt.Println("EsAddOrEditData Err:", err.Error())
|
|
|
+ }
|
|
|
+ }()
|
|
|
+
|
|
|
+ highlight := elastic.NewHighlight()
|
|
|
+ highlight = highlight.Fields(elastic.NewHighlighterField("EdbCode"), elastic.NewHighlighterField("EdbName"))
|
|
|
+ highlight = highlight.PreTags("<font color='red'>").PostTags("</font>")
|
|
|
+
|
|
|
+ mustMap := make([]interface{}, 0)
|
|
|
+ mustNotMap := make([]interface{}, 0)
|
|
|
+
|
|
|
+ mustNotMap = []interface{}{
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+ }
|
|
|
+
|
|
|
+
|
|
|
+ mustMap = append(mustMap, map[string]interface{}{
|
|
|
+ "term": map[string]interface{}{
|
|
|
+ "EdbInfoType": 0,
|
|
|
+ },
|
|
|
+ })
|
|
|
+ mustMap = append(mustMap, map[string]interface{}{
|
|
|
+ "terms": map[string]interface{}{
|
|
|
+ "Frequency.keyword": []string{"日度", "周度", "月度"},
|
|
|
+ },
|
|
|
+ })
|
|
|
+
|
|
|
+
|
|
|
+ shouldMap := map[string]interface{}{
|
|
|
+ "should": []interface{}{
|
|
|
+ map[string]interface{}{
|
|
|
+ "match": map[string]interface{}{
|
|
|
+ "EdbCode": keywordStr,
|
|
|
+
|
|
|
+ },
|
|
|
+ },
|
|
|
+ map[string]interface{}{
|
|
|
+ "match": map[string]interface{}{
|
|
|
+ "EdbName": keywordStr,
|
|
|
+
|
|
|
+ },
|
|
|
+ },
|
|
|
+ },
|
|
|
+ }
|
|
|
+
|
|
|
+
|
|
|
+ if len(noPermissionEdbInfoIdList) > 0 {
|
|
|
+ mustNotMap = append(mustNotMap, map[string]interface{}{
|
|
|
+ "terms": map[string]interface{}{
|
|
|
+ "EdbInfoId": noPermissionEdbInfoIdList,
|
|
|
+
|
|
|
+ },
|
|
|
+ })
|
|
|
+ }
|
|
|
+ return searchEdbInfoData(indexName, mustMap, mustNotMap, shouldMap, from, size)
|
|
|
+}
|
|
|
+
|
|
|
+
|
|
|
+func searchEdbInfoData(indexName string, mustMap, mustNotMap []interface{}, shouldMap map[string]interface{}, from, size int) (total int64, list []*models.EdbInfoList, err error) {
|
|
|
+ list = make([]*models.EdbInfoList, 0)
|
|
|
+ defer func() {
|
|
|
+ if err != nil {
|
|
|
+ fmt.Println("EsAddOrEditData Err:", err.Error())
|
|
|
+ }
|
|
|
+ }()
|
|
|
+ client := utils.EsClient
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+ highlight := elastic.NewHighlight()
|
|
|
+ highlight = highlight.Fields(elastic.NewHighlighterField("EdbCode"), elastic.NewHighlighterField("EdbName"))
|
|
|
+ highlight = highlight.PreTags("<font color='red'>").PostTags("</font>")
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+ mustMap = append(mustMap, map[string]interface{}{
|
|
|
+ "bool": shouldMap,
|
|
|
+ })
|
|
|
+
|
|
|
+ queryMap := map[string]interface{}{
|
|
|
+ "query": map[string]interface{}{
|
|
|
+ "bool": map[string]interface{}{
|
|
|
+ "must": mustMap,
|
|
|
+ "must_not": mustNotMap,
|
|
|
+
|
|
|
+ },
|
|
|
+ },
|
|
|
+ }
|
|
|
+
|
|
|
+
|
|
|
+ requestTotalHits := client.Count(indexName).BodyJson(queryMap)
|
|
|
+ total, err = requestTotalHits.Do(context.Background())
|
|
|
+ if err != nil {
|
|
|
+ return
|
|
|
+ }
|
|
|
+
|
|
|
+ queryMap["from"] = from
|
|
|
+ queryMap["size"] = size
|
|
|
+ jsonBytes, _ := json.Marshal(queryMap)
|
|
|
+ fmt.Println(string(jsonBytes))
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+ request := client.Search(indexName).Highlight(highlight).Source(queryMap)
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+ searchMap := make(map[string]string)
|
|
|
+
|
|
|
+ searchResp, err := request.Do(context.Background())
|
|
|
+ if err != nil {
|
|
|
+ return
|
|
|
+ }
|
|
|
+ fmt.Println(searchResp)
|
|
|
+ fmt.Println(searchResp.Status)
|
|
|
+ if searchResp.Status != 0 {
|
|
|
+ return
|
|
|
+ }
|
|
|
+
|
|
|
+ if searchResp.Hits != nil {
|
|
|
+ for _, v := range searchResp.Hits.Hits {
|
|
|
+ if _, ok := searchMap[v.Id]; !ok {
|
|
|
+ itemJson, tmpErr := v.Source.MarshalJSON()
|
|
|
+ if tmpErr != nil {
|
|
|
+ err = tmpErr
|
|
|
+ fmt.Println("movieJson err:", err)
|
|
|
+ return
|
|
|
+ }
|
|
|
+ edbInfoItem := new(models.EdbInfoList)
|
|
|
+ tmpErr = json.Unmarshal(itemJson, &edbInfoItem)
|
|
|
+ if tmpErr != nil {
|
|
|
+ fmt.Println("json.Unmarshal movieJson err:", tmpErr)
|
|
|
+ err = tmpErr
|
|
|
+ return
|
|
|
+ }
|
|
|
+ if len(v.Highlight["EdbCode"]) > 0 {
|
|
|
+ edbInfoItem.EdbCode = v.Highlight["EdbCode"][0]
|
|
|
+ }
|
|
|
+ if len(v.Highlight["EdbName"]) > 0 {
|
|
|
+ edbInfoItem.EdbCode = v.Highlight["EdbName"][0]
|
|
|
+ }
|
|
|
+ list = append(list, edbInfoItem)
|
|
|
+ searchMap[v.Id] = v.Id
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ return
|
|
|
+}
|
|
|
+
|
|
|
+
|
|
|
+func EsDeleteEdbInfoData(indexName, docId string) (err error) {
|
|
|
+ defer func() {
|
|
|
+ if err != nil {
|
|
|
+ fmt.Println("EsDeleteEdbInfoData Err:", err.Error())
|
|
|
+ }
|
|
|
+ }()
|
|
|
+ client := utils.EsClient
|
|
|
+
|
|
|
+ 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
|
|
|
+}
|
|
|
+
|
|
|
+
|
|
|
+type AnalyzeResp struct {
|
|
|
+ Tokens []struct {
|
|
|
+ EndOffset int64 `json:"end_offset"`
|
|
|
+ Position int64 `json:"position"`
|
|
|
+ StartOffset int64 `json:"start_offset"`
|
|
|
+ Token string `json:"token"`
|
|
|
+ Type string `json:"type"`
|
|
|
+ } `json:"tokens"`
|
|
|
+}
|
|
|
+
|
|
|
+
|
|
|
+func Analyze(content string) (contentList []string, err error) {
|
|
|
+ defer func() {
|
|
|
+ if err != nil {
|
|
|
+ fmt.Println("Analyze Err:", err.Error())
|
|
|
+ }
|
|
|
+ }()
|
|
|
+ client := utils.EsClient
|
|
|
+
|
|
|
+ queryMap := map[string]string{
|
|
|
+ "text": content,
|
|
|
+ "analyzer": "ik_max_word",
|
|
|
+ }
|
|
|
+ res, err := client.PerformRequest(
|
|
|
+ context.Background(),
|
|
|
+ elastic.PerformRequestOptions{
|
|
|
+ Method: "GET",
|
|
|
+ Path: "/_analyze",
|
|
|
+ Body: queryMap,
|
|
|
+ Stream: false,
|
|
|
+ },
|
|
|
+ )
|
|
|
+ if res.StatusCode == 200 {
|
|
|
+ var analyzeResp AnalyzeResp
|
|
|
+ tmpErr := json.Unmarshal(res.Body, &analyzeResp)
|
|
|
+ if tmpErr != nil {
|
|
|
+ err = errors.New("返回数据转结构体失败:" + tmpErr.Error())
|
|
|
+ return
|
|
|
+ }
|
|
|
+ for _, v := range analyzeResp.Tokens {
|
|
|
+ contentList = append(contentList, v.Token)
|
|
|
+ }
|
|
|
+ } else {
|
|
|
+ err = errors.New("分词失败,返回code异常:" + strconv.Itoa(res.StatusCode))
|
|
|
+ }
|
|
|
+ return
|
|
|
+}
|
|
|
+
|
|
|
+
|
|
|
+func EsAddOrEditChartInfoData(indexName, docId string, item *models.ChartInfo) (err error) {
|
|
|
+ defer func() {
|
|
|
+ if err != nil {
|
|
|
+ fmt.Println("EsAddOrEditData Err:", err.Error())
|
|
|
+ }
|
|
|
+ }()
|
|
|
+ client := utils.EsClient
|
|
|
+
|
|
|
+ resp, err := client.Index().Index(indexName).Id(docId).BodyJson(item).Do(context.Background())
|
|
|
+ if err != nil {
|
|
|
+ fmt.Println("新增失败:", err.Error())
|
|
|
+ return err
|
|
|
+ }
|
|
|
+ fmt.Println(resp)
|
|
|
+ if resp.Status == 0 {
|
|
|
+ fmt.Println("新增成功", resp.Result)
|
|
|
+ err = nil
|
|
|
+ } else {
|
|
|
+ fmt.Println("AddData", resp.Status, resp.Result)
|
|
|
+ }
|
|
|
+ return
|
|
|
+}
|
|
|
+
|
|
|
+
|
|
|
+func EsDeleteDataV2(indexName, docId string) (err error) {
|
|
|
+ defer func() {
|
|
|
+ if err != nil {
|
|
|
+ fmt.Println("EsDeleteEdbInfoData Err:", err.Error())
|
|
|
+ }
|
|
|
+ }()
|
|
|
+ client := utils.EsClient
|
|
|
+
|
|
|
+ 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 SearchChartInfoData(indexName, keywordStr string, showSysId int, sourceList []int, noPermissionChartIdList []int, from, size int) (list []*models.ChartInfo, total int64, err error) {
|
|
|
+ list = make([]*models.ChartInfo, 0)
|
|
|
+ defer func() {
|
|
|
+ if err != nil {
|
|
|
+ fmt.Println("EsAddOrEditData Err:", err.Error())
|
|
|
+ }
|
|
|
+ }()
|
|
|
+ client := utils.EsClient
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+ highlight := elastic.NewHighlight()
|
|
|
+ highlight = highlight.Fields(elastic.NewHighlighterField("ChartName"))
|
|
|
+ highlight = highlight.PreTags("<font color='red'>").PostTags("</font>")
|
|
|
+
|
|
|
+ mustMap := make([]interface{}, 0)
|
|
|
+ mustNotMap := make([]interface{}, 0)
|
|
|
+
|
|
|
+
|
|
|
+ if showSysId > 0 {
|
|
|
+ mustMap = append(mustMap, map[string]interface{}{
|
|
|
+ "term": map[string]interface{}{
|
|
|
+ "SysUserId": showSysId,
|
|
|
+
|
|
|
+ },
|
|
|
+ })
|
|
|
+ }
|
|
|
+ mustMap = append(mustMap, map[string]interface{}{
|
|
|
+ "terms": map[string]interface{}{
|
|
|
+ "Source": sourceList,
|
|
|
+ },
|
|
|
+ })
|
|
|
+
|
|
|
+
|
|
|
+ shouldMap := map[string]interface{}{
|
|
|
+ "should": []interface{}{
|
|
|
+ map[string]interface{}{
|
|
|
+ "match": map[string]interface{}{
|
|
|
+ "ChartName": keywordStr,
|
|
|
+
|
|
|
+ },
|
|
|
+ },
|
|
|
+
|
|
|
+ map[string]interface{}{
|
|
|
+ "match": map[string]interface{}{
|
|
|
+ "ChartName": map[string]interface{}{
|
|
|
+ "query": keywordStr,
|
|
|
+ "operator": "and",
|
|
|
+ },
|
|
|
+
|
|
|
+ },
|
|
|
+ },
|
|
|
+ map[string]interface{}{
|
|
|
+ "match": map[string]interface{}{
|
|
|
+ "ChartNameEn": keywordStr,
|
|
|
+
|
|
|
+ },
|
|
|
+ },
|
|
|
+
|
|
|
+ map[string]interface{}{
|
|
|
+ "match": map[string]interface{}{
|
|
|
+ "ChartNameEn": map[string]interface{}{
|
|
|
+ "query": keywordStr,
|
|
|
+ "operator": "and",
|
|
|
+ },
|
|
|
+
|
|
|
+ },
|
|
|
+ },
|
|
|
+ },
|
|
|
+ }
|
|
|
+ mustMap = append(mustMap, map[string]interface{}{
|
|
|
+ "bool": shouldMap,
|
|
|
+ })
|
|
|
+
|
|
|
+
|
|
|
+ if len(noPermissionChartIdList) > 0 {
|
|
|
+ mustNotMap = append(mustNotMap, map[string]interface{}{
|
|
|
+ "terms": map[string]interface{}{
|
|
|
+ "ChartInfoId": noPermissionChartIdList,
|
|
|
+
|
|
|
+ },
|
|
|
+ })
|
|
|
+ }
|
|
|
+
|
|
|
+ queryMap := map[string]interface{}{
|
|
|
+ "query": map[string]interface{}{
|
|
|
+ "bool": map[string]interface{}{
|
|
|
+ "must": mustMap,
|
|
|
+ "must_not": mustNotMap,
|
|
|
+
|
|
|
+ },
|
|
|
+ },
|
|
|
+ }
|
|
|
+
|
|
|
+
|
|
|
+ requestTotalHits := client.Count(indexName).BodyJson(queryMap)
|
|
|
+ total, err = requestTotalHits.Do(context.Background())
|
|
|
+ if err != nil {
|
|
|
+ return
|
|
|
+ }
|
|
|
+
|
|
|
+
|
|
|
+ queryMap["from"] = from
|
|
|
+ queryMap["size"] = size
|
|
|
+ jsonBytes, _ := json.Marshal(queryMap)
|
|
|
+ fmt.Println(string(jsonBytes))
|
|
|
+
|
|
|
+ request := client.Search(indexName).Highlight(highlight).Source(queryMap)
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+ searchMap := make(map[string]string)
|
|
|
+
|
|
|
+ searchResp, err := request.Do(context.Background())
|
|
|
+ if err != nil {
|
|
|
+ return
|
|
|
+ }
|
|
|
+ fmt.Println(searchResp)
|
|
|
+ fmt.Println(searchResp.Status)
|
|
|
+ if searchResp.Status != 0 {
|
|
|
+ return
|
|
|
+ }
|
|
|
+
|
|
|
+ if searchResp.Hits != nil {
|
|
|
+ for _, v := range searchResp.Hits.Hits {
|
|
|
+ if _, ok := searchMap[v.Id]; !ok {
|
|
|
+ itemJson, tmpErr := v.Source.MarshalJSON()
|
|
|
+ if tmpErr != nil {
|
|
|
+ err = tmpErr
|
|
|
+ fmt.Println("movieJson err:", err)
|
|
|
+ return
|
|
|
+ }
|
|
|
+ chartInfoItem := new(models.ChartInfo)
|
|
|
+ tmpErr = json.Unmarshal(itemJson, &chartInfoItem)
|
|
|
+ if err != nil {
|
|
|
+ fmt.Println("json.Unmarshal chartInfoJson err:", err)
|
|
|
+ err = tmpErr
|
|
|
+ return
|
|
|
+ }
|
|
|
+ if len(v.Highlight["ChartName"]) > 0 {
|
|
|
+ chartInfoItem.ChartName = v.Highlight["ChartName"][0]
|
|
|
+ }
|
|
|
+ list = append(list, chartInfoItem)
|
|
|
+ searchMap[v.Id] = v.Id
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+ return
|
|
|
+}
|
|
|
+
|
|
|
+
|
|
|
+func EsAddOrEditDataInterface(indexName, docId string, item interface{}) (err error) {
|
|
|
+ defer func() {
|
|
|
+ if err != nil {
|
|
|
+ fmt.Println("EsAddOrEditData Err:", err.Error())
|
|
|
+ }
|
|
|
+ }()
|
|
|
+ client := utils.EsClient
|
|
|
+
|
|
|
+ resp, err := client.Index().Index(indexName).Id(docId).BodyJson(item).Do(context.Background())
|
|
|
+ if err != nil {
|
|
|
+ fmt.Println("新增失败:", err.Error())
|
|
|
+ return err
|
|
|
+ }
|
|
|
+ fmt.Println(resp)
|
|
|
+ if resp.Status == 0 {
|
|
|
+ fmt.Println("新增成功", resp.Result)
|
|
|
+ err = nil
|
|
|
+ } else {
|
|
|
+ fmt.Println("AddData", resp.Status, resp.Result)
|
|
|
+ }
|
|
|
+ return
|
|
|
+}
|
|
|
+
|
|
|
+
|
|
|
+func SearchEdbInfoDataByAdminId(indexName, keywordStr string, from, size, filterSource, source int, edbInfoType uint8, frequency string, adminId int) (total int64, list []*models.EdbInfoList, err error) {
|
|
|
+ list = make([]*models.EdbInfoList, 0)
|
|
|
+ defer func() {
|
|
|
+ if err != nil {
|
|
|
+ fmt.Println("EsAddOrEditData Err:", err.Error())
|
|
|
+ }
|
|
|
+ }()
|
|
|
+
|
|
|
+ highlight := elastic.NewHighlight()
|
|
|
+ highlight = highlight.Fields(elastic.NewHighlighterField("EdbCode"), elastic.NewHighlighterField("EdbName"))
|
|
|
+ highlight = highlight.PreTags("<font color='red'>").PostTags("</font>")
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+ mustMap := make([]interface{}, 0)
|
|
|
+ mustNotMap := make([]interface{}, 0)
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+ switch filterSource {
|
|
|
+ case 2:
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+ mustMap = []interface{}{
|
|
|
+ map[string]interface{}{
|
|
|
+ "term": map[string]interface{}{
|
|
|
+ "Frequency.keyword": "月度",
|
|
|
+
|
|
|
+ },
|
|
|
+ },
|
|
|
+ }
|
|
|
+ case 3:
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+ case 4:
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+ mustMap = []interface{}{
|
|
|
+ map[string]interface{}{
|
|
|
+ "term": map[string]interface{}{
|
|
|
+ "EdbType": 1,
|
|
|
+ },
|
|
|
+ },
|
|
|
+ }
|
|
|
+ case 5:
|
|
|
+ mustMap = []interface{}{
|
|
|
+ map[string]interface{}{
|
|
|
+ "term": map[string]interface{}{
|
|
|
+ "Source": 6,
|
|
|
+ },
|
|
|
+ },
|
|
|
+ }
|
|
|
+ case 6:
|
|
|
+ mustNotMap = []interface{}{
|
|
|
+ map[string]interface{}{
|
|
|
+ "match": map[string]interface{}{
|
|
|
+ "Frequency.keyword": "年度",
|
|
|
+ },
|
|
|
+ },
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+
|
|
|
+ if source > 0 {
|
|
|
+ mustMap = append(mustMap, map[string]interface{}{
|
|
|
+ "term": map[string]interface{}{
|
|
|
+ "Source": source,
|
|
|
+
|
|
|
+ },
|
|
|
+ })
|
|
|
+ }
|
|
|
+
|
|
|
+ if frequency != "" {
|
|
|
+ mustMap = append(mustMap, map[string]interface{}{
|
|
|
+ "term": map[string]interface{}{
|
|
|
+ "Frequency.keyword": frequency,
|
|
|
+
|
|
|
+ },
|
|
|
+ })
|
|
|
+ }
|
|
|
+
|
|
|
+
|
|
|
+ mustMap = append(mustMap, map[string]interface{}{
|
|
|
+ "term": map[string]interface{}{
|
|
|
+ "EdbInfoType": edbInfoType,
|
|
|
+ },
|
|
|
+ })
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+ shouldMap := map[string]interface{}{
|
|
|
+ "should": []interface{}{
|
|
|
+ map[string]interface{}{
|
|
|
+ "match": map[string]interface{}{
|
|
|
+ "EdbCode": keywordStr,
|
|
|
+
|
|
|
+ },
|
|
|
+ },
|
|
|
+ map[string]interface{}{
|
|
|
+ "match": map[string]interface{}{
|
|
|
+ "EdbName": keywordStr,
|
|
|
+
|
|
|
+ },
|
|
|
+ },
|
|
|
+ },
|
|
|
+ }
|
|
|
+ mustMap = append(mustMap, map[string]interface{}{
|
|
|
+ "bool": shouldMap,
|
|
|
+ })
|
|
|
+
|
|
|
+
|
|
|
+ if adminId > 0 {
|
|
|
+ mustMap = append(mustMap, map[string]interface{}{
|
|
|
+ "term": map[string]interface{}{
|
|
|
+ "SysUserId": adminId,
|
|
|
+ },
|
|
|
+ })
|
|
|
+ }
|
|
|
+
|
|
|
+ return searchEdbInfoData(indexName, mustMap, mustNotMap, shouldMap, from, size)
|
|
|
+}
|