elastic.go 44 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495969798991001011021031041051061071081091101111121131141151161171181191201211221231241251261271281291301311321331341351361371381391401411421431441451461471481491501511521531541551561571581591601611621631641651661671681691701711721731741751761771781791801811821831841851861871881891901911921931941951961971981992002012022032042052062072082092102112122132142152162172182192202212222232242252262272282292302312322332342352362372382392402412422432442452462472482492502512522532542552562572582592602612622632642652662672682692702712722732742752762772782792802812822832842852862872882892902912922932942952962972982993003013023033043053063073083093103113123133143153163173183193203213223233243253263273283293303313323333343353363373383393403413423433443453463473483493503513523533543553563573583593603613623633643653663673683693703713723733743753763773783793803813823833843853863873883893903913923933943953963973983994004014024034044054064074084094104114124134144154164174184194204214224234244254264274284294304314324334344354364374384394404414424434444454464474484494504514524534544554564574584594604614624634644654664674684694704714724734744754764774784794804814824834844854864874884894904914924934944954964974984995005015025035045055065075085095105115125135145155165175185195205215225235245255265275285295305315325335345355365375385395405415425435445455465475485495505515525535545555565575585595605615625635645655665675685695705715725735745755765775785795805815825835845855865875885895905915925935945955965975985996006016026036046056066076086096106116126136146156166176186196206216226236246256266276286296306316326336346356366376386396406416426436446456466476486496506516526536546556566576586596606616626636646656666676686696706716726736746756766776786796806816826836846856866876886896906916926936946956966976986997007017027037047057067077087097107117127137147157167177187197207217227237247257267277287297307317327337347357367377387397407417427437447457467477487497507517527537547557567577587597607617627637647657667677687697707717727737747757767777787797807817827837847857867877887897907917927937947957967977987998008018028038048058068078088098108118128138148158168178188198208218228238248258268278288298308318328338348358368378388398408418428438448458468478488498508518528538548558568578588598608618628638648658668678688698708718728738748758768778788798808818828838848858868878888898908918928938948958968978988999009019029039049059069079089099109119129139149159169179189199209219229239249259269279289299309319329339349359369379389399409419429439449459469479489499509519529539549559569579589599609619629639649659669679689699709719729739749759769779789799809819829839849859869879889899909919929939949959969979989991000100110021003100410051006100710081009101010111012101310141015101610171018101910201021102210231024102510261027102810291030103110321033103410351036103710381039104010411042104310441045104610471048104910501051105210531054105510561057105810591060106110621063106410651066106710681069107010711072107310741075107610771078107910801081108210831084108510861087108810891090109110921093109410951096109710981099110011011102110311041105110611071108110911101111111211131114111511161117111811191120112111221123112411251126112711281129113011311132113311341135113611371138113911401141114211431144114511461147114811491150115111521153115411551156115711581159116011611162116311641165116611671168116911701171117211731174117511761177117811791180118111821183118411851186118711881189119011911192119311941195119611971198119912001201120212031204120512061207120812091210121112121213121412151216121712181219122012211222122312241225122612271228122912301231123212331234123512361237123812391240124112421243124412451246124712481249125012511252125312541255125612571258125912601261126212631264126512661267126812691270127112721273127412751276127712781279128012811282128312841285128612871288128912901291129212931294129512961297129812991300130113021303130413051306130713081309131013111312131313141315131613171318131913201321132213231324132513261327132813291330133113321333133413351336133713381339134013411342134313441345134613471348134913501351135213531354135513561357135813591360136113621363136413651366136713681369137013711372137313741375137613771378137913801381138213831384138513861387138813891390139113921393139413951396139713981399140014011402140314041405140614071408140914101411141214131414141514161417141814191420142114221423142414251426142714281429143014311432143314341435143614371438143914401441144214431444144514461447144814491450145114521453145414551456145714581459146014611462146314641465146614671468146914701471147214731474147514761477147814791480148114821483148414851486148714881489149014911492149314941495149614971498149915001501150215031504150515061507150815091510151115121513151415151516151715181519152015211522152315241525152615271528152915301531153215331534153515361537153815391540154115421543154415451546154715481549155015511552155315541555155615571558155915601561156215631564156515661567156815691570157115721573157415751576157715781579158015811582158315841585158615871588158915901591159215931594159515961597159815991600160116021603160416051606160716081609161016111612161316141615161616171618161916201621162216231624162516261627162816291630163116321633163416351636163716381639164016411642164316441645164616471648164916501651165216531654165516561657165816591660166116621663166416651666166716681669167016711672167316741675167616771678167916801681168216831684
  1. package elastic
  2. import (
  3. "context"
  4. "encoding/json"
  5. "errors"
  6. "fmt"
  7. "github.com/olivere/elastic/v7"
  8. "eta/eta_mobile/models/data_manage"
  9. "eta/eta_mobile/utils"
  10. "strconv"
  11. )
  12. // indexName:索引名称
  13. // mappingJson:表结构
  14. func EsCreateIndex(indexName, mappingJson string) (err error) {
  15. client := utils.EsClient
  16. //定义表结构
  17. exists, err := client.IndexExists(indexName).Do(context.Background()) //<5>
  18. if err != nil {
  19. return
  20. }
  21. if !exists {
  22. resp, err := client.CreateIndex(indexName).BodyJson(mappingJson).Do(context.Background())
  23. //BodyJson(bodyJson).Do(context.Background())
  24. if err != nil {
  25. fmt.Println("CreateIndex Err:" + err.Error())
  26. return err
  27. }
  28. fmt.Println(resp.Index, resp.ShardsAcknowledged, resp.Acknowledged)
  29. } else {
  30. fmt.Println(indexName + " 已存在")
  31. }
  32. return
  33. }
  34. // 新增和修改数据
  35. //func EsAddOrEditData(item *cygx.CygxArticle) (err error) {
  36. // defer func() {
  37. // if err != nil {
  38. // fmt.Println("EsAddOrEditData Err:", err.Error())
  39. // }
  40. // }()
  41. // indexName := utils.IndexName
  42. // content := html.UnescapeString(item.Body)
  43. // doc, errDoc := goquery.NewDocumentFromReader(strings.NewReader(content))
  44. // if errDoc != nil {
  45. // return
  46. // }
  47. // doc.Find("a").Each(func(i int, a *goquery.Selection) {
  48. // a.Remove()
  49. // })
  50. // bodyText := doc.Text()
  51. // client, err := NewClient()
  52. // if err != nil {
  53. // fmt.Println(err, "err1")
  54. // return
  55. // }
  56. // docId := strconv.Itoa(item.ArticleId)
  57. // searchById, err := client.Get().Index(indexName).Id(docId).Do(context.Background())
  58. // if err != nil && !strings.Contains(err.Error(), "404") {
  59. // fmt.Println("Get Err" + err.Error())
  60. // return
  61. // }
  62. // if err != nil && strings.Contains(err.Error(), "404") {
  63. // err = nil
  64. // }
  65. // if searchById != nil && searchById.Found {
  66. // resp, err := client.Update().Index(indexName).Id(docId).Doc(map[string]interface{}{
  67. // "BodyText": bodyText,
  68. // "Title": item.Title,
  69. // "PublishDate": item.PublishDate.Format(utils.FormatDateTime),
  70. // "CategoryId": item.CategoryId,
  71. // "ExpertBackground": item.ExpertBackground,
  72. // }).Do(context.Background())
  73. // if err != nil {
  74. // fmt.Println(err, "err")
  75. // return err
  76. // }
  77. // if resp.Status == 0 {
  78. // fmt.Println("修改成功")
  79. // } else {
  80. // fmt.Println("EditData", resp.Status, resp.Result)
  81. // }
  82. // } else {
  83. // itemEs := new(cygx.ElasticTestArticleDetail)
  84. // itemEs.ArticleId = item.ArticleId
  85. // itemEs.Title = item.Title
  86. // itemEs.PublishDate = item.PublishDate.Format(utils.FormatDateTime)
  87. // itemEs.BodyText = bodyText
  88. // itemEs.CategoryId = strconv.Itoa(item.CategoryId)
  89. // itemEs.ExpertBackground = item.ExpertBackground
  90. // resp, err := client.Index().Index(indexName).Id(docId).BodyJson(itemEs).Do(context.Background())
  91. // if err != nil {
  92. // fmt.Println("新增失败:", err.Error())
  93. // return err
  94. // }
  95. // if resp.Status == 0 && resp.Result == "created" {
  96. // fmt.Println("新增成功")
  97. // err = nil
  98. // } else {
  99. // fmt.Println("AddData", resp.Status, resp.Result)
  100. // }
  101. // }
  102. // return
  103. //}
  104. // 删除数据
  105. func EsDeleteData(indexName, docId string) (err error) {
  106. client := utils.EsClient
  107. resp, err := client.Delete().Index(indexName).Id(docId).Do(context.Background())
  108. fmt.Println(resp)
  109. if err != nil {
  110. return
  111. }
  112. if resp.Status == 0 {
  113. fmt.Println("删除成功")
  114. } else {
  115. fmt.Println("AddData", resp.Status, resp.Result)
  116. }
  117. return
  118. }
  119. func MappingModify(indexName, mappingJson string) {
  120. client := utils.EsClient
  121. result, err := client.PutMapping().Index(indexName).BodyString(mappingJson).Do(context.Background())
  122. fmt.Println(err)
  123. fmt.Println(result)
  124. return
  125. }
  126. // EsAddOrEditEdbInfoData 新增/修改es中的指标数据
  127. func EsAddOrEditEdbInfoData(indexName, docId string, item *data_manage.EdbInfoList) (err error) {
  128. defer func() {
  129. if err != nil {
  130. fmt.Println("EsAddOrEditData Err:", err.Error())
  131. }
  132. }()
  133. client := utils.EsClient
  134. resp, err := client.Index().Index(indexName).Id(docId).BodyJson(item).Do(context.Background())
  135. if err != nil {
  136. fmt.Println("新增失败:", err.Error())
  137. return err
  138. }
  139. fmt.Println(resp)
  140. if resp.Status == 0 {
  141. fmt.Println("新增成功", resp.Result)
  142. err = nil
  143. } else {
  144. fmt.Println("AddData", resp.Status, resp.Result)
  145. }
  146. return
  147. }
  148. // SearchEdbInfoData 查询es中的指标数据
  149. func SearchEdbInfoData(indexName, keywordStr string, from, size, filterSource, source int, edbInfoType uint8, frequency string, noPermissionEdbInfoIdList []int) (total int64, list []*data_manage.EdbInfoList, err error) {
  150. list = make([]*data_manage.EdbInfoList, 0)
  151. defer func() {
  152. if err != nil {
  153. fmt.Println("EsAddOrEditData Err:", err.Error())
  154. }
  155. }()
  156. highlight := elastic.NewHighlight()
  157. highlight = highlight.Fields(elastic.NewHighlighterField("EdbCode"), elastic.NewHighlighterField("EdbName"))
  158. highlight = highlight.PreTags("<font color='red'>").PostTags("</font>")
  159. //var source map[string]interface{}
  160. //source := map[string]interface{}{
  161. // "query": map[string]interface{}{
  162. // "match_all": map[string]interface{}{},
  163. // },
  164. //}
  165. mustMap := make([]interface{}, 0)
  166. mustNotMap := make([]interface{}, 0)
  167. //source := map[string]interface{}{
  168. // "query": map[string]interface{}{
  169. // "bool": map[string]interface{}{
  170. // "must": map[string]interface{}{
  171. // "query_string": map[string]interface{}{
  172. // "query": keywordStr,
  173. // "fields": []string{"EdbCode", "EdbName"},
  174. // },
  175. // },
  176. // },
  177. // },
  178. //}
  179. switch filterSource {
  180. case 2:
  181. //source = map[string]interface{}{
  182. // "query": map[string]interface{}{
  183. // "bool": map[string]interface{}{
  184. // "must": map[string]interface{}{
  185. // "query_string": map[string]interface{}{
  186. // "query": keywordStr,
  187. // },
  188. // },
  189. // "filter": []interface{}{
  190. // map[string]interface{}{
  191. // "term": map[string]interface{}{
  192. // "Frequency.keyword": "月度",
  193. // },
  194. // }},
  195. // },
  196. // },
  197. //}
  198. mustMap = []interface{}{
  199. map[string]interface{}{
  200. "term": map[string]interface{}{
  201. "Frequency.keyword": "月度",
  202. //"Frequency.keyword": "月度",
  203. },
  204. },
  205. }
  206. case 3:
  207. //source = map[string]interface{}{
  208. // "query": map[string]interface{}{
  209. // "bool": map[string]interface{}{
  210. // "must": map[string]interface{}{
  211. // "query_string": map[string]interface{}{
  212. // "query": keywordStr,
  213. // },
  214. // },
  215. // "must_not": []interface{}{
  216. // map[string]interface{}{
  217. // "match": map[string]interface{}{
  218. // "Frequency.keyword": "日度",
  219. // },
  220. // }},
  221. // },
  222. // },
  223. //}
  224. ////注释掉,所有频度都可以变频 2022-08-31 14:31:28
  225. //mustNotMap = []interface{}{
  226. // map[string]interface{}{
  227. // "match": map[string]interface{}{
  228. // "Frequency.keyword": "日度",
  229. // //"Frequency.keyword": "月度",
  230. // },
  231. // },
  232. //}
  233. case 4:
  234. //source = map[string]interface{}{
  235. // "query": map[string]interface{}{
  236. // "bool": map[string]interface{}{
  237. // "must": map[string]interface{}{
  238. // "query_string": map[string]interface{}{
  239. // "query": keywordStr,
  240. // },
  241. // },
  242. // "filter": []interface{}{
  243. // map[string]interface{}{
  244. // "term": map[string]interface{}{
  245. // "EdbType": 1,
  246. // },
  247. // }},
  248. // },
  249. // },
  250. //}
  251. mustMap = []interface{}{
  252. map[string]interface{}{
  253. "term": map[string]interface{}{
  254. "EdbType": 1,
  255. },
  256. },
  257. }
  258. case 5:
  259. mustMap = []interface{}{
  260. map[string]interface{}{
  261. "term": map[string]interface{}{
  262. "Source": 6,
  263. },
  264. },
  265. }
  266. }
  267. //指标来源
  268. if source > 0 {
  269. mustMap = append(mustMap, map[string]interface{}{
  270. "term": map[string]interface{}{
  271. "Source": source,
  272. //"Frequency.keyword": "月度",
  273. },
  274. })
  275. }
  276. if frequency != "" {
  277. mustMap = append(mustMap, map[string]interface{}{
  278. "term": map[string]interface{}{
  279. "Frequency.keyword": frequency,
  280. //"Frequency.keyword": "月度",
  281. },
  282. })
  283. }
  284. // noPermissionEdbInfoIdList 无权限指标id
  285. if len(noPermissionEdbInfoIdList) > 0 {
  286. mustNotMap = append(mustNotMap, map[string]interface{}{
  287. "terms": map[string]interface{}{
  288. "EdbInfoId": noPermissionEdbInfoIdList,
  289. //"Frequency.keyword": "月度",
  290. },
  291. })
  292. }
  293. // 指标类型:普通指标、预算指标
  294. mustMap = append(mustMap, map[string]interface{}{
  295. "term": map[string]interface{}{
  296. "EdbInfoType": edbInfoType,
  297. },
  298. })
  299. //普通指标
  300. //mustMap = append(mustMap, map[string]interface{}{
  301. // "term": map[string]interface{}{
  302. // "EdbInfoType": 0,
  303. // //"Frequency.keyword": "月度",
  304. // },
  305. //})
  306. //关键字匹配
  307. shouldMap := map[string]interface{}{
  308. "should": []interface{}{
  309. map[string]interface{}{
  310. "match": map[string]interface{}{
  311. "EdbCode": keywordStr,
  312. //"Frequency.keyword": "月度",
  313. },
  314. },
  315. map[string]interface{}{
  316. "match": map[string]interface{}{
  317. "EdbName": keywordStr,
  318. //"Frequency.keyword": "月度",
  319. },
  320. },
  321. map[string]interface{}{
  322. "match": map[string]interface{}{
  323. "EdbNameEn": keywordStr,
  324. //"Frequency.keyword": "月度",
  325. },
  326. },
  327. },
  328. }
  329. mustMap = append(mustMap, map[string]interface{}{
  330. "bool": shouldMap,
  331. })
  332. return searchEdbInfoData(indexName, mustMap, mustNotMap, shouldMap, from, size)
  333. }
  334. func SearchEdbInfoDataBak(indexName, keywordStr string, from, size, filterSource, source int, frequency string) (total int64, list []*data_manage.EdbInfoList, err error) {
  335. list = make([]*data_manage.EdbInfoList, 0)
  336. defer func() {
  337. if err != nil {
  338. fmt.Println("EsAddOrEditData Err:", err.Error())
  339. }
  340. }()
  341. client := utils.EsClient
  342. //queryString := elastic.NewQueryStringQuery(keywordStr)
  343. //boolQueryJson, err := json.Marshal(queryString)
  344. //if err != nil {
  345. // fmt.Println("boolQueryJson err:", err)
  346. //} else {
  347. // fmt.Println("boolQueryJson ", string(boolQueryJson))
  348. //}
  349. highlight := elastic.NewHighlight()
  350. highlight = highlight.Fields(elastic.NewHighlighterField("EdbCode"), elastic.NewHighlighterField("EdbName"))
  351. highlight = highlight.PreTags("<font color='red'>").PostTags("</font>")
  352. //query := elastic.RawStringQuery(`{"match_all":{}}`)
  353. //var source map[string]interface{}
  354. //source := map[string]interface{}{
  355. // "query": map[string]interface{}{
  356. // "match_all": map[string]interface{}{},
  357. // },
  358. //}
  359. mustMap := make([]interface{}, 0)
  360. mustNotMap := make([]interface{}, 0)
  361. //source := map[string]interface{}{
  362. // "query": map[string]interface{}{
  363. // "bool": map[string]interface{}{
  364. // "must": map[string]interface{}{
  365. // "query_string": map[string]interface{}{
  366. // "query": keywordStr,
  367. // "fields": []string{"EdbCode", "EdbName"},
  368. // },
  369. // },
  370. // },
  371. // },
  372. //}
  373. switch filterSource {
  374. case 2:
  375. //source = map[string]interface{}{
  376. // "query": map[string]interface{}{
  377. // "bool": map[string]interface{}{
  378. // "must": map[string]interface{}{
  379. // "query_string": map[string]interface{}{
  380. // "query": keywordStr,
  381. // },
  382. // },
  383. // "filter": []interface{}{
  384. // map[string]interface{}{
  385. // "term": map[string]interface{}{
  386. // "Frequency.keyword": "月度",
  387. // },
  388. // }},
  389. // },
  390. // },
  391. //}
  392. mustMap = []interface{}{
  393. map[string]interface{}{
  394. "term": map[string]interface{}{
  395. "Frequency.keyword": "月度",
  396. //"Frequency.keyword": "月度",
  397. },
  398. },
  399. }
  400. case 3:
  401. //source = map[string]interface{}{
  402. // "query": map[string]interface{}{
  403. // "bool": map[string]interface{}{
  404. // "must": map[string]interface{}{
  405. // "query_string": map[string]interface{}{
  406. // "query": keywordStr,
  407. // },
  408. // },
  409. // "must_not": []interface{}{
  410. // map[string]interface{}{
  411. // "match": map[string]interface{}{
  412. // "Frequency.keyword": "日度",
  413. // },
  414. // }},
  415. // },
  416. // },
  417. //}
  418. ////注释掉,所有频度都可以变频 2022-08-31 14:31:28
  419. //mustNotMap = []interface{}{
  420. // map[string]interface{}{
  421. // "match": map[string]interface{}{
  422. // "Frequency.keyword": "日度",
  423. // //"Frequency.keyword": "月度",
  424. // },
  425. // },
  426. //}
  427. case 4:
  428. //source = map[string]interface{}{
  429. // "query": map[string]interface{}{
  430. // "bool": map[string]interface{}{
  431. // "must": map[string]interface{}{
  432. // "query_string": map[string]interface{}{
  433. // "query": keywordStr,
  434. // },
  435. // },
  436. // "filter": []interface{}{
  437. // map[string]interface{}{
  438. // "term": map[string]interface{}{
  439. // "EdbType": 1,
  440. // },
  441. // }},
  442. // },
  443. // },
  444. //}
  445. mustMap = []interface{}{
  446. map[string]interface{}{
  447. "term": map[string]interface{}{
  448. "EdbType": 1,
  449. },
  450. },
  451. }
  452. case 5:
  453. mustMap = []interface{}{
  454. map[string]interface{}{
  455. "term": map[string]interface{}{
  456. "Source": 6,
  457. },
  458. },
  459. }
  460. }
  461. //指标来源
  462. if source > 0 {
  463. mustMap = append(mustMap, map[string]interface{}{
  464. "term": map[string]interface{}{
  465. "Source": source,
  466. //"Frequency.keyword": "月度",
  467. },
  468. })
  469. }
  470. if frequency != "" {
  471. mustMap = append(mustMap, map[string]interface{}{
  472. "term": map[string]interface{}{
  473. "Frequency.keyword": frequency,
  474. //"Frequency.keyword": "月度",
  475. },
  476. })
  477. }
  478. //普通指标
  479. //mustMap = append(mustMap, map[string]interface{}{
  480. // "term": map[string]interface{}{
  481. // "EdbInfoType": 0,
  482. // //"Frequency.keyword": "月度",
  483. // },
  484. //})
  485. //关键字匹配
  486. shouldMap := map[string]interface{}{
  487. "should": []interface{}{
  488. map[string]interface{}{
  489. "match": map[string]interface{}{
  490. "EdbCode": keywordStr,
  491. //"Frequency.keyword": "月度",
  492. },
  493. },
  494. map[string]interface{}{
  495. "match": map[string]interface{}{
  496. "EdbName": keywordStr,
  497. //"Frequency.keyword": "月度",
  498. },
  499. },
  500. // 因为关键词被分了,所以需要用下面的语句来让他 整个词 查询,从而加重整词的权重
  501. map[string]interface{}{
  502. "match": map[string]interface{}{
  503. "EdbCode": map[string]interface{}{
  504. "query": keywordStr,
  505. "operator": "and",
  506. },
  507. //"Frequency.keyword": "月度",
  508. },
  509. },
  510. // 因为关键词被分了,所以需要用下面的语句来让他 整个词 查询,从而加重整词的权重
  511. map[string]interface{}{
  512. "match": map[string]interface{}{
  513. "EdbName": map[string]interface{}{
  514. "query": keywordStr,
  515. "operator": "and",
  516. },
  517. //"Frequency.keyword": "月度",
  518. },
  519. },
  520. },
  521. }
  522. mustMap = append(mustMap, map[string]interface{}{
  523. "bool": shouldMap,
  524. })
  525. queryMap := map[string]interface{}{
  526. "query": map[string]interface{}{
  527. "bool": map[string]interface{}{
  528. "must": mustMap,
  529. "must_not": mustNotMap,
  530. //"should": shouldMap,
  531. },
  532. },
  533. }
  534. //根据条件数量统计
  535. requestTotalHits := client.Count(indexName).BodyJson(queryMap)
  536. total, err = requestTotalHits.Do(context.Background())
  537. if err != nil {
  538. return
  539. }
  540. queryMap["from"] = from
  541. queryMap["size"] = size
  542. jsonBytes, _ := json.Marshal(queryMap)
  543. fmt.Println(string(jsonBytes))
  544. //queryStr := fmt.Sprintf(`{"query":{"bool":{"must":{"query_string":{"query":"%s","fields":["EdbCode","EdbName"]}}}}}`, keywordStr)
  545. //switch filterSource {
  546. //case 2:
  547. // queryStr = fmt.Sprintf(`{"query":{"bool":{"must":{"query_string":{"query":"%s","fields":["EdbCode","EdbName"]}},"filter":{"term":{"Frequency.keyword":"%s"}}}}}`, keywordStr, "月度")
  548. //case 3:
  549. // queryStr = fmt.Sprintf(`{"query":{"bool":{"must":{"query_string":{"query":"%s","fields":["EdbCode","EdbName"]}},"must_not":[{"match":{"Frequency.keyword":"%s"}}]}}}`, keywordStr, "日度")
  550. //case 4:
  551. // queryStr = fmt.Sprintf(`{"query":{"bool":{"must":{"query_string":{"query":"%s","fields":["EdbCode","EdbName"]}},"must_not":[{"match":{"EdbType":1}}]}}}`, keywordStr)
  552. //}
  553. //queryString := elastic.RawStringQuery(queryStr)
  554. //fmt.Println("queryString:", queryString)
  555. //queryString := elastic.NewMatchQuery("EdbCode", keywordStr)
  556. //request := client.Search(indexName).Highlight(highlight).From(from).Size(size).Query(queryString)
  557. request := client.Search(indexName).Highlight(highlight).Source(queryMap) // sets the JSON request
  558. //requestJson, err := json.Marshal(request)
  559. //if err != nil {
  560. // fmt.Println("requestJson err:", err)
  561. //}
  562. //fmt.Println("requestJson ", string(requestJson))
  563. searchMap := make(map[string]string)
  564. searchResp, err := request.Do(context.Background())
  565. if err != nil {
  566. return
  567. }
  568. fmt.Println(searchResp)
  569. fmt.Println(searchResp.Status)
  570. if searchResp.Status != 0 {
  571. return
  572. }
  573. if searchResp.Hits != nil {
  574. for _, v := range searchResp.Hits.Hits {
  575. if _, ok := searchMap[v.Id]; !ok {
  576. itemJson, tmpErr := v.Source.MarshalJSON()
  577. if tmpErr != nil {
  578. err = tmpErr
  579. fmt.Println("movieJson err:", err)
  580. return
  581. }
  582. edbInfoItem := new(data_manage.EdbInfoList)
  583. tmpErr = json.Unmarshal(itemJson, &edbInfoItem)
  584. if err != nil {
  585. fmt.Println("json.Unmarshal movieJson err:", err)
  586. err = tmpErr
  587. return
  588. }
  589. if len(v.Highlight["EdbCode"]) > 0 {
  590. edbInfoItem.EdbCode = v.Highlight["EdbCode"][0]
  591. }
  592. if len(v.Highlight["EdbName"]) > 0 {
  593. edbInfoItem.EdbCode = v.Highlight["EdbName"][0]
  594. }
  595. list = append(list, edbInfoItem)
  596. searchMap[v.Id] = v.Id
  597. }
  598. }
  599. }
  600. //for _, v := range result {
  601. // fmt.Println(v)
  602. //}
  603. return
  604. }
  605. // SearchAddPredictEdbInfoData 查询允许添加预测指标的数据
  606. func SearchAddPredictEdbInfoData(indexName, keywordStr string, noPermissionEdbInfoIdList []int, from, size int) (total int64, list []*data_manage.EdbInfoList, err error) {
  607. list = make([]*data_manage.EdbInfoList, 0)
  608. defer func() {
  609. if err != nil {
  610. fmt.Println("EsAddOrEditData Err:", err.Error())
  611. }
  612. }()
  613. highlight := elastic.NewHighlight()
  614. highlight = highlight.Fields(elastic.NewHighlighterField("EdbCode"), elastic.NewHighlighterField("EdbName"))
  615. highlight = highlight.PreTags("<font color='red'>").PostTags("</font>")
  616. mustMap := make([]interface{}, 0)
  617. mustNotMap := make([]interface{}, 0)
  618. mustNotMap = []interface{}{
  619. //map[string]interface{}{
  620. // "terms": map[string]interface{}{
  621. // "Frequency.keyword": []string{"日度", "周度", "月度"},
  622. // },
  623. // //"match": map[string]interface{}{
  624. // // "Frequency": []string{"日度", "周度", "月度"},
  625. // // //"Frequency.keyword": []string{"日度", "周度", "月度"},
  626. // //},
  627. //},
  628. }
  629. // 指标类型:普通指标、预算指标
  630. mustMap = append(mustMap, map[string]interface{}{
  631. "term": map[string]interface{}{
  632. "EdbInfoType": 0,
  633. },
  634. })
  635. mustMap = append(mustMap, map[string]interface{}{
  636. "terms": map[string]interface{}{
  637. "Frequency.keyword": []string{"日度", "周度", "月度"},
  638. },
  639. })
  640. //关键字匹配
  641. shouldMap := map[string]interface{}{
  642. "should": []interface{}{
  643. map[string]interface{}{
  644. "match": map[string]interface{}{
  645. "EdbCode": keywordStr,
  646. //"Frequency.keyword": "月度",
  647. },
  648. },
  649. map[string]interface{}{
  650. "match": map[string]interface{}{
  651. "EdbName": keywordStr,
  652. //"Frequency.keyword": "月度",
  653. },
  654. },
  655. },
  656. }
  657. // noPermissionEdbInfoIdList 无权限指标id
  658. if len(noPermissionEdbInfoIdList) > 0 {
  659. mustNotMap = append(mustNotMap, map[string]interface{}{
  660. "terms": map[string]interface{}{
  661. "EdbInfoId": noPermissionEdbInfoIdList,
  662. //"Frequency.keyword": "月度",
  663. },
  664. })
  665. }
  666. return searchEdbInfoData(indexName, mustMap, mustNotMap, shouldMap, from, size)
  667. }
  668. // searchEdbInfoData 查询es中的指标数据
  669. func searchEdbInfoData(indexName string, mustMap, mustNotMap []interface{}, shouldMap map[string]interface{}, from, size int) (total int64, list []*data_manage.EdbInfoList, err error) {
  670. list = make([]*data_manage.EdbInfoList, 0)
  671. defer func() {
  672. if err != nil {
  673. fmt.Println("EsAddOrEditData Err:", err.Error())
  674. }
  675. }()
  676. client := utils.EsClient
  677. //queryString := elastic.NewQueryStringQuery(keywordStr)
  678. //boolQueryJson, err := json.Marshal(queryString)
  679. //if err != nil {
  680. // fmt.Println("boolQueryJson err:", err)
  681. //} else {
  682. // fmt.Println("boolQueryJson ", string(boolQueryJson))
  683. //}
  684. highlight := elastic.NewHighlight()
  685. highlight = highlight.Fields(elastic.NewHighlighterField("EdbCode"), elastic.NewHighlighterField("EdbName"))
  686. highlight = highlight.PreTags("<font color='red'>").PostTags("</font>")
  687. //query := elastic.RawStringQuery(`{"match_all":{}}`)
  688. //关键字匹配
  689. mustMap = append(mustMap, map[string]interface{}{
  690. "bool": shouldMap,
  691. })
  692. queryMap := map[string]interface{}{
  693. "query": map[string]interface{}{
  694. "bool": map[string]interface{}{
  695. "must": mustMap,
  696. "must_not": mustNotMap,
  697. //"should": shouldMap,
  698. },
  699. },
  700. }
  701. //根据条件数量统计
  702. requestTotalHits := client.Count(indexName).BodyJson(queryMap)
  703. total, err = requestTotalHits.Do(context.Background())
  704. if err != nil {
  705. return
  706. }
  707. queryMap["from"] = from
  708. queryMap["size"] = size
  709. jsonBytes, _ := json.Marshal(queryMap)
  710. fmt.Println(string(jsonBytes))
  711. //queryStr := fmt.Sprintf(`{"query":{"bool":{"must":{"query_string":{"query":"%s","fields":["EdbCode","EdbName"]}}}}}`, keywordStr)
  712. //switch filterSource {
  713. //case 2:
  714. // queryStr = fmt.Sprintf(`{"query":{"bool":{"must":{"query_string":{"query":"%s","fields":["EdbCode","EdbName"]}},"filter":{"term":{"Frequency.keyword":"%s"}}}}}`, keywordStr, "月度")
  715. //case 3:
  716. // queryStr = fmt.Sprintf(`{"query":{"bool":{"must":{"query_string":{"query":"%s","fields":["EdbCode","EdbName"]}},"must_not":[{"match":{"Frequency.keyword":"%s"}}]}}}`, keywordStr, "日度")
  717. //case 4:
  718. // queryStr = fmt.Sprintf(`{"query":{"bool":{"must":{"query_string":{"query":"%s","fields":["EdbCode","EdbName"]}},"must_not":[{"match":{"EdbType":1}}]}}}`, keywordStr)
  719. //}
  720. //queryString := elastic.RawStringQuery(queryStr)
  721. //fmt.Println("queryString:", queryString)
  722. //queryString := elastic.NewMatchQuery("EdbCode", keywordStr)
  723. //request := client.Search(indexName).Highlight(highlight).From(from).Size(size).Query(queryString)
  724. request := client.Search(indexName).Highlight(highlight).Source(queryMap) // sets the JSON request
  725. //requestJson, err := json.Marshal(request)
  726. //if err != nil {
  727. // fmt.Println("requestJson err:", err)
  728. //}
  729. //fmt.Println("requestJson ", string(requestJson))
  730. searchMap := make(map[string]string)
  731. searchResp, err := request.Do(context.Background())
  732. if err != nil {
  733. return
  734. }
  735. fmt.Println(searchResp)
  736. fmt.Println(searchResp.Status)
  737. if searchResp.Status != 0 {
  738. return
  739. }
  740. //total = searchResp.TotalHits()
  741. if searchResp.Hits != nil {
  742. for _, v := range searchResp.Hits.Hits {
  743. if _, ok := searchMap[v.Id]; !ok {
  744. itemJson, tmpErr := v.Source.MarshalJSON()
  745. if tmpErr != nil {
  746. err = tmpErr
  747. fmt.Println("movieJson err:", err)
  748. return
  749. }
  750. edbInfoItem := new(data_manage.EdbInfoList)
  751. tmpErr = json.Unmarshal(itemJson, &edbInfoItem)
  752. if err != nil {
  753. fmt.Println("json.Unmarshal movieJson err:", err)
  754. err = tmpErr
  755. return
  756. }
  757. if len(v.Highlight["EdbCode"]) > 0 {
  758. edbInfoItem.EdbCode = v.Highlight["EdbCode"][0]
  759. }
  760. if len(v.Highlight["EdbName"]) > 0 {
  761. edbInfoItem.EdbCode = v.Highlight["EdbName"][0]
  762. }
  763. list = append(list, edbInfoItem)
  764. searchMap[v.Id] = v.Id
  765. }
  766. }
  767. }
  768. return
  769. }
  770. // EsDeleteEdbInfoData 删除es中的指标数据
  771. func EsDeleteEdbInfoData(indexName, docId string) (err error) {
  772. defer func() {
  773. if err != nil {
  774. fmt.Println("EsDeleteEdbInfoData Err:", err.Error())
  775. }
  776. }()
  777. client := utils.EsClient
  778. resp, err := client.Delete().Index(indexName).Id(docId).Do(context.Background())
  779. fmt.Println(resp)
  780. if err != nil {
  781. return
  782. }
  783. if resp.Status == 0 {
  784. fmt.Println("删除成功")
  785. } else {
  786. fmt.Println("AddData", resp.Status, resp.Result)
  787. }
  788. return
  789. }
  790. // EsAddOrEditReport 新增编辑es报告
  791. //func EsAddOrEditReport(indexName, docId string, item *models.ElasticReportDetail) (err error) {
  792. // defer func() {
  793. // if err != nil {
  794. // fmt.Println("EsAddOrEditReport Err:", err.Error())
  795. // }
  796. // }()
  797. // client, err := NewClient()
  798. // if err != nil {
  799. // return
  800. // }
  801. // // docId为报告ID+章节ID
  802. // searchById, err := client.Get().Index(indexName).Id(docId).Do(context.Background())
  803. // if err != nil && !strings.Contains(err.Error(), "404") {
  804. // fmt.Println("Get Err" + err.Error())
  805. // return
  806. // }
  807. // if searchById != nil && searchById.Found {
  808. // resp, err := client.Update().Index(indexName).Id(docId).Doc(map[string]interface{}{
  809. // "ReportId": item.ReportId,
  810. // "ReportChapterId": item.ReportChapterId,
  811. // "Title": item.Title,
  812. // "Abstract": item.Abstract,
  813. // "BodyContent": item.BodyContent,
  814. // "PublishTime": item.PublishTime,
  815. // "PublishState": item.PublishState,
  816. // "Author": item.Author,
  817. // "ClassifyIdFirst": item.ClassifyIdFirst,
  818. // "ClassifyNameFirst": item.ClassifyNameFirst,
  819. // "ClassifyIdSecond": item.ClassifyIdSecond,
  820. // "ClassifyNameSecond": item.ClassifyNameSecond,
  821. // "Categories": item.Categories,
  822. // "StageStr": item.StageStr,
  823. // }).Do(context.Background())
  824. // if err != nil {
  825. // return err
  826. // }
  827. // //fmt.Println(resp.Status, resp.Result)
  828. // if resp.Status == 0 {
  829. // fmt.Println("修改成功" + docId)
  830. // err = nil
  831. // } else {
  832. // fmt.Println("EditData", resp.Status, resp.Result)
  833. // }
  834. // } else {
  835. // resp, err := client.Index().Index(indexName).Id(docId).BodyJson(item).Do(context.Background())
  836. // if err != nil {
  837. // fmt.Println("新增失败:", err.Error())
  838. // return err
  839. // }
  840. // if resp.Status == 0 && resp.Result == "created" {
  841. // fmt.Println("新增成功" + docId)
  842. // return nil
  843. // } else {
  844. // fmt.Println("AddData", resp.Status, resp.Result)
  845. // }
  846. // }
  847. // return
  848. //}
  849. // AnalyzeResp 分词接口返回结构体
  850. type AnalyzeResp struct {
  851. Tokens []struct {
  852. EndOffset int64 `json:"end_offset"`
  853. Position int64 `json:"position"`
  854. StartOffset int64 `json:"start_offset"`
  855. Token string `json:"token"`
  856. Type string `json:"type"`
  857. } `json:"tokens"`
  858. }
  859. // Analyze 根据输入的文字获取分词后的文字
  860. func Analyze(content string) (contentList []string, err error) {
  861. defer func() {
  862. if err != nil {
  863. fmt.Println("Analyze Err:", err.Error())
  864. }
  865. }()
  866. client := utils.EsClient
  867. queryMap := map[string]string{
  868. "text": content,
  869. "analyzer": "ik_max_word",
  870. }
  871. res, err := client.PerformRequest(
  872. context.Background(),
  873. elastic.PerformRequestOptions{
  874. Method: "GET",
  875. Path: "/_analyze",
  876. Body: queryMap,
  877. Stream: false,
  878. },
  879. )
  880. if res.StatusCode == 200 {
  881. var analyzeResp AnalyzeResp
  882. tmpErr := json.Unmarshal(res.Body, &analyzeResp)
  883. if tmpErr != nil {
  884. err = errors.New("返回数据转结构体失败:" + tmpErr.Error())
  885. return
  886. }
  887. for _, v := range analyzeResp.Tokens {
  888. contentList = append(contentList, v.Token)
  889. }
  890. } else {
  891. err = errors.New("分词失败,返回code异常:" + strconv.Itoa(res.StatusCode))
  892. }
  893. return
  894. }
  895. // SearcCygxArticleHistoryData 查询查研观向的文章阅读记录
  896. //func SearcCygxArticleHistoryData(indexName, keyword, startDate, endDate, companyIds string, from, size int) (total int64, list []*cygx.EsUserInteraction, err error) {
  897. // list = make([]*cygx.EsUserInteraction, 0)
  898. // defer func() {
  899. // if err != nil {
  900. // fmt.Println("EsUserInteraction Err:", err.Error())
  901. // }
  902. // }()
  903. // client, err := NewClient()
  904. // if err != nil {
  905. // return
  906. // }
  907. //
  908. // mustMap := make([]interface{}, 0)
  909. // seliceid := []int{}
  910. // //管理员权限||对应销售
  911. // if companyIds != "" {
  912. // silceCompanyId := strings.Split(companyIds, ",")
  913. // for _, v := range silceCompanyId {
  914. // companyId, _ := strconv.Atoi(v)
  915. // seliceid = append(seliceid, companyId)
  916. // }
  917. // mustMap = append(mustMap, map[string]interface{}{
  918. // "terms": map[string]interface{}{
  919. // "CompanyId": seliceid,
  920. // },
  921. // })
  922. // }
  923. //
  924. // //时间
  925. // if startDate != "" && endDate != "" {
  926. // mustMap = append(mustMap, map[string]interface{}{
  927. // "range": map[string]interface{}{
  928. // "CreateTime": map[string]interface{}{
  929. // "gte": startDate,
  930. // "lte": endDate,
  931. // },
  932. // },
  933. // })
  934. // }
  935. // shouldMap := make(map[string]interface{}, 0)
  936. // //关键字匹配
  937. // if keyword != "" {
  938. // shouldMap = map[string]interface{}{
  939. // "should": []interface{}{
  940. // map[string]interface{}{
  941. // "wildcard": map[string]interface{}{
  942. // "RealName": "*" + keyword + "*",
  943. // },
  944. // },
  945. // map[string]interface{}{
  946. // "wildcard": map[string]interface{}{
  947. // "Email": "*" + keyword + "*",
  948. // },
  949. // },
  950. // map[string]interface{}{
  951. // "wildcard": map[string]interface{}{
  952. // "Mobile": "*" + keyword + "*",
  953. // },
  954. // },
  955. // map[string]interface{}{
  956. // "wildcard": map[string]interface{}{
  957. // "CompanyName": "*" + keyword + "*",
  958. // },
  959. // },
  960. // },
  961. // }
  962. // }
  963. // mustMap = append(mustMap, map[string]interface{}{
  964. // "bool": shouldMap,
  965. // })
  966. //
  967. // queryMap := map[string]interface{}{
  968. // "query": map[string]interface{}{
  969. // "bool": map[string]interface{}{
  970. // "must": mustMap,
  971. // },
  972. // },
  973. // }
  974. // //排序
  975. // //机构阅读数量
  976. // sortMap := make([]interface{}, 0)
  977. // //如果是一家公司就不按照这个字段排序
  978. // if len(seliceid) > 1 {
  979. // sortMap = append(sortMap, map[string]interface{}{
  980. // "CompanyArticleHistoryNum": map[string]interface{}{
  981. // "order": "desc",
  982. // },
  983. // })
  984. // }
  985. //
  986. // //用户阅读数量
  987. // sortMap = append(sortMap, map[string]interface{}{
  988. // "UserArticleHistoryNum": map[string]interface{}{
  989. // "order": "desc",
  990. // },
  991. // })
  992. // //时间
  993. // sortMap = append(sortMap, map[string]interface{}{
  994. // "CreateTime": map[string]interface{}{
  995. // "order": "desc",
  996. // },
  997. // })
  998. // //根据条件数量统计
  999. // requestTotalHits := client.Count(indexName).BodyJson(queryMap)
  1000. // total, err = requestTotalHits.Do(context.Background())
  1001. // if err != nil {
  1002. // return
  1003. // }
  1004. //
  1005. // queryMap["sort"] = sortMap
  1006. // queryMap["from"] = from
  1007. // queryMap["size"] = size
  1008. // jsonBytes, _ := json.Marshal(queryMap)
  1009. // fmt.Println(string(jsonBytes))
  1010. //
  1011. // request := client.Search(indexName).Source(queryMap) // sets the JSON request
  1012. // searchMap := make(map[string]string)
  1013. //
  1014. // searchResp, err := request.Do(context.Background())
  1015. // if err != nil {
  1016. // return
  1017. // }
  1018. // //fmt.Println(searchResp)
  1019. // //fmt.Println(searchResp.Status)
  1020. // if searchResp.Status != 0 {
  1021. // return
  1022. // }
  1023. // if searchResp.Hits != nil {
  1024. // for _, v := range searchResp.Hits.Hits {
  1025. // if _, ok := searchMap[v.Id]; !ok {
  1026. // itemJson, tmpErr := v.Source.MarshalJSON()
  1027. // if tmpErr != nil {
  1028. // err = tmpErr
  1029. // fmt.Println("movieJson err:", err)
  1030. // return
  1031. // }
  1032. // edbInfoItem := new(cygx.EsUserInteraction)
  1033. // tmpErr = json.Unmarshal(itemJson, &edbInfoItem)
  1034. // if tmpErr != nil {
  1035. // fmt.Println("json.Unmarshal movieJson err:", err)
  1036. // err = tmpErr
  1037. // return
  1038. // }
  1039. // list = append(list, edbInfoItem)
  1040. // searchMap[v.Id] = v.Id
  1041. // }
  1042. // }
  1043. // }
  1044. // return
  1045. //}
  1046. // EsAddOrEditChartInfoData 新增/修改es中的图表数据
  1047. func EsAddOrEditChartInfoData(indexName, docId string, item *data_manage.ChartInfo) (err error) {
  1048. defer func() {
  1049. if err != nil {
  1050. fmt.Println("EsAddOrEditData Err:", err.Error())
  1051. }
  1052. }()
  1053. client := utils.EsClient
  1054. resp, err := client.Index().Index(indexName).Id(docId).BodyJson(item).Do(context.Background())
  1055. if err != nil {
  1056. fmt.Println("新增失败:", err.Error())
  1057. return err
  1058. }
  1059. fmt.Println(resp)
  1060. if resp.Status == 0 {
  1061. fmt.Println("新增成功", resp.Result)
  1062. err = nil
  1063. } else {
  1064. fmt.Println("AddData", resp.Status, resp.Result)
  1065. }
  1066. return
  1067. }
  1068. // EsDeleteDataV2 删除es中的数据
  1069. func EsDeleteDataV2(indexName, docId string) (err error) {
  1070. defer func() {
  1071. if err != nil {
  1072. fmt.Println("EsDeleteEdbInfoData Err:", err.Error())
  1073. }
  1074. }()
  1075. client := utils.EsClient
  1076. resp, err := client.Delete().Index(indexName).Id(docId).Do(context.Background())
  1077. fmt.Println(resp)
  1078. if err != nil {
  1079. return
  1080. }
  1081. if resp.Status == 0 {
  1082. fmt.Println("删除成功")
  1083. } else {
  1084. fmt.Println("AddData", resp.Status, resp.Result)
  1085. }
  1086. return
  1087. }
  1088. // SearchChartInfoData 查询es中的图表数据
  1089. func SearchChartInfoData(indexName, keywordStr string, showSysId int, sourceList []int, noPermissionChartIdList []int, from, size int) (list []*data_manage.ChartInfo, total int64, err error) {
  1090. list = make([]*data_manage.ChartInfo, 0)
  1091. defer func() {
  1092. if err != nil {
  1093. fmt.Println("EsAddOrEditData Err:", err.Error())
  1094. }
  1095. }()
  1096. client := utils.EsClient
  1097. //queryString := elastic.NewQueryStringQuery(keywordStr)
  1098. //boolQueryJson, err := json.Marshal(queryString)
  1099. //if err != nil {
  1100. // fmt.Println("boolQueryJson err:", err)
  1101. //} else {
  1102. // fmt.Println("boolQueryJson ", string(boolQueryJson))
  1103. //}
  1104. highlight := elastic.NewHighlight()
  1105. highlight = highlight.Fields(elastic.NewHighlighterField("ChartName"))
  1106. highlight = highlight.PreTags("<font color='red'>").PostTags("</font>")
  1107. mustMap := make([]interface{}, 0)
  1108. mustNotMap := make([]interface{}, 0)
  1109. //指标来源
  1110. if showSysId > 0 {
  1111. mustMap = append(mustMap, map[string]interface{}{
  1112. "term": map[string]interface{}{
  1113. "SysUserId": showSysId,
  1114. //"Frequency.keyword": "月度",
  1115. },
  1116. })
  1117. }
  1118. mustMap = append(mustMap, map[string]interface{}{
  1119. "terms": map[string]interface{}{
  1120. "Source": sourceList,
  1121. },
  1122. })
  1123. //关键字匹配
  1124. shouldMap := map[string]interface{}{
  1125. "should": []interface{}{
  1126. map[string]interface{}{
  1127. "match": map[string]interface{}{
  1128. "ChartName": keywordStr,
  1129. //"Frequency.keyword": "月度",
  1130. },
  1131. },
  1132. // 因为关键词被分了,所以需要用下面的语句来让他 整个词 查询,从而加重整词的权重
  1133. map[string]interface{}{
  1134. "match": map[string]interface{}{
  1135. "ChartName": map[string]interface{}{
  1136. "query": keywordStr,
  1137. "operator": "and",
  1138. },
  1139. //"Frequency.keyword": "月度",
  1140. },
  1141. },
  1142. map[string]interface{}{
  1143. "match": map[string]interface{}{
  1144. "ChartNameEn": keywordStr,
  1145. //"Frequency.keyword": "月度",
  1146. },
  1147. },
  1148. // 因为关键词被分了,所以需要用下面的语句来让他 整个词 查询,从而加重整词的权重
  1149. map[string]interface{}{
  1150. "match": map[string]interface{}{
  1151. "ChartNameEn": map[string]interface{}{
  1152. "query": keywordStr,
  1153. "operator": "and",
  1154. },
  1155. //"Frequency.keyword": "月度",
  1156. },
  1157. },
  1158. },
  1159. }
  1160. mustMap = append(mustMap, map[string]interface{}{
  1161. "bool": shouldMap,
  1162. })
  1163. // noPermissionEdbInfoIdList 无权限指标id
  1164. if len(noPermissionChartIdList) > 0 {
  1165. mustNotMap = append(mustNotMap, map[string]interface{}{
  1166. "terms": map[string]interface{}{
  1167. "ChartInfoId": noPermissionChartIdList,
  1168. //"Frequency.keyword": "月度",
  1169. },
  1170. })
  1171. }
  1172. queryMap := map[string]interface{}{
  1173. "query": map[string]interface{}{
  1174. "bool": map[string]interface{}{
  1175. "must": mustMap,
  1176. "must_not": mustNotMap,
  1177. //"should": shouldMap,
  1178. },
  1179. },
  1180. }
  1181. //根据条件数量统计
  1182. requestTotalHits := client.Count(indexName).BodyJson(queryMap)
  1183. total, err = requestTotalHits.Do(context.Background())
  1184. if err != nil {
  1185. return
  1186. }
  1187. // 分页查询
  1188. queryMap["from"] = from
  1189. queryMap["size"] = size
  1190. jsonBytes, _ := json.Marshal(queryMap)
  1191. fmt.Println(string(jsonBytes))
  1192. request := client.Search(indexName).Highlight(highlight).Source(queryMap) // sets the JSON request
  1193. //requestJson, err := json.Marshal(request)
  1194. //if err != nil {
  1195. // fmt.Println("requestJson err:", err)
  1196. //}
  1197. //fmt.Println("requestJson ", string(requestJson))
  1198. searchMap := make(map[string]string)
  1199. searchResp, err := request.Do(context.Background())
  1200. if err != nil {
  1201. return
  1202. }
  1203. fmt.Println(searchResp)
  1204. fmt.Println(searchResp.Status)
  1205. if searchResp.Status != 0 {
  1206. return
  1207. }
  1208. if searchResp.Hits != nil {
  1209. for _, v := range searchResp.Hits.Hits {
  1210. if _, ok := searchMap[v.Id]; !ok {
  1211. itemJson, tmpErr := v.Source.MarshalJSON()
  1212. if tmpErr != nil {
  1213. err = tmpErr
  1214. fmt.Println("movieJson err:", err)
  1215. return
  1216. }
  1217. chartInfoItem := new(data_manage.ChartInfo)
  1218. tmpErr = json.Unmarshal(itemJson, &chartInfoItem)
  1219. if err != nil {
  1220. fmt.Println("json.Unmarshal chartInfoJson err:", err)
  1221. err = tmpErr
  1222. return
  1223. }
  1224. if len(v.Highlight["ChartName"]) > 0 {
  1225. chartInfoItem.ChartName = v.Highlight["ChartName"][0]
  1226. }
  1227. list = append(list, chartInfoItem)
  1228. searchMap[v.Id] = v.Id
  1229. }
  1230. }
  1231. }
  1232. //for _, v := range result {
  1233. // fmt.Println(v)
  1234. //}
  1235. return
  1236. }
  1237. // EsAddOrEditDataInterface 新增/修改es中的数据
  1238. func EsAddOrEditDataInterface(indexName, docId string, item interface{}) (err error) {
  1239. defer func() {
  1240. if err != nil {
  1241. fmt.Println("EsAddOrEditData Err:", err.Error())
  1242. }
  1243. }()
  1244. client := utils.EsClient
  1245. resp, err := client.Index().Index(indexName).Id(docId).BodyJson(item).Do(context.Background())
  1246. if err != nil {
  1247. fmt.Println("新增失败:", err.Error())
  1248. return err
  1249. }
  1250. fmt.Println(resp)
  1251. if resp.Status == 0 {
  1252. fmt.Println("新增成功", resp.Result)
  1253. err = nil
  1254. } else {
  1255. fmt.Println("AddData", resp.Status, resp.Result)
  1256. }
  1257. return
  1258. }
  1259. // SearchMyChartInfoData 查询es中的我的图表数据
  1260. func SearchMyChartInfoData(indexName, keywordStr string, adminId int, noPermissionChartIdList []int, from, size int) (list []*data_manage.MyChartList, total int64, err error) {
  1261. list = make([]*data_manage.MyChartList, 0)
  1262. defer func() {
  1263. if err != nil {
  1264. fmt.Println("EsAddOrEditData Err:", err.Error())
  1265. }
  1266. }()
  1267. client := utils.EsClient
  1268. //queryString := elastic.NewQueryStringQuery(keywordStr)
  1269. //boolQueryJson, err := json.Marshal(queryString)
  1270. //if err != nil {
  1271. // fmt.Println("boolQueryJson err:", err)
  1272. //} else {
  1273. // fmt.Println("boolQueryJson ", string(boolQueryJson))
  1274. //}
  1275. highlight := elastic.NewHighlight()
  1276. highlight = highlight.Fields(elastic.NewHighlighterField("ChartName"))
  1277. highlight = highlight.PreTags("<font color='red'>").PostTags("</font>")
  1278. mustMap := make([]interface{}, 0)
  1279. mustNotMap := make([]interface{}, 0)
  1280. //指标来源
  1281. if adminId > 0 {
  1282. mustMap = append(mustMap, map[string]interface{}{
  1283. "term": map[string]interface{}{
  1284. "AdminId": adminId,
  1285. //"Frequency.keyword": "月度",
  1286. },
  1287. })
  1288. }
  1289. //关键字匹配
  1290. shouldMap := map[string]interface{}{
  1291. "should": []interface{}{
  1292. map[string]interface{}{
  1293. "match": map[string]interface{}{
  1294. "ChartName": keywordStr,
  1295. //"Frequency.keyword": "月度",
  1296. },
  1297. },
  1298. // 因为关键词被分了,所以需要用下面的语句来让他 整个词 查询,从而加重整词的权重
  1299. map[string]interface{}{
  1300. "match": map[string]interface{}{
  1301. "ChartName": map[string]interface{}{
  1302. "query": keywordStr,
  1303. "operator": "and",
  1304. },
  1305. //"Frequency.keyword": "月度",
  1306. },
  1307. },
  1308. },
  1309. }
  1310. mustMap = append(mustMap, map[string]interface{}{
  1311. "bool": shouldMap,
  1312. })
  1313. // noPermissionEdbInfoIdList 无权限指标id
  1314. if len(noPermissionChartIdList) > 0 {
  1315. mustNotMap = append(mustNotMap, map[string]interface{}{
  1316. "terms": map[string]interface{}{
  1317. "ChartInfoId": noPermissionChartIdList,
  1318. //"Frequency.keyword": "月度",
  1319. },
  1320. })
  1321. }
  1322. queryMap := map[string]interface{}{
  1323. "query": map[string]interface{}{
  1324. "bool": map[string]interface{}{
  1325. "must": mustMap,
  1326. "must_not": mustNotMap,
  1327. //"should": shouldMap,
  1328. },
  1329. },
  1330. }
  1331. //根据条件数量统计
  1332. requestTotalHits := client.Count(indexName).BodyJson(queryMap)
  1333. total, err = requestTotalHits.Do(context.Background())
  1334. if err != nil {
  1335. return
  1336. }
  1337. // 分页查询
  1338. queryMap["from"] = from
  1339. queryMap["size"] = size
  1340. jsonBytes, _ := json.Marshal(queryMap)
  1341. fmt.Println(string(jsonBytes))
  1342. request := client.Search(indexName).Highlight(highlight).Source(queryMap) // sets the JSON request
  1343. //requestJson, err := json.Marshal(request)
  1344. //if err != nil {
  1345. // fmt.Println("requestJson err:", err)
  1346. //}
  1347. //fmt.Println("requestJson ", string(requestJson))
  1348. searchMap := make(map[string]string)
  1349. searchResp, err := request.Do(context.Background())
  1350. if err != nil {
  1351. return
  1352. }
  1353. fmt.Println(searchResp)
  1354. fmt.Println(searchResp.Status)
  1355. if searchResp.Status != 0 {
  1356. return
  1357. }
  1358. if searchResp.Hits != nil {
  1359. for _, v := range searchResp.Hits.Hits {
  1360. if _, ok := searchMap[v.Id]; !ok {
  1361. itemJson, tmpErr := v.Source.MarshalJSON()
  1362. if tmpErr != nil {
  1363. err = tmpErr
  1364. fmt.Println("movieJson err:", err)
  1365. return
  1366. }
  1367. chartInfoItem := new(data_manage.MyChartList)
  1368. tmpErr = json.Unmarshal(itemJson, &chartInfoItem)
  1369. if err != nil {
  1370. fmt.Println("json.Unmarshal chartInfoJson err:", err)
  1371. err = tmpErr
  1372. return
  1373. }
  1374. if len(v.Highlight["ChartName"]) > 0 {
  1375. chartInfoItem.ChartName = v.Highlight["ChartName"][0]
  1376. }
  1377. list = append(list, chartInfoItem)
  1378. searchMap[v.Id] = v.Id
  1379. }
  1380. }
  1381. }
  1382. //for _, v := range result {
  1383. // fmt.Println(v)
  1384. //}
  1385. return
  1386. }
  1387. // SearchEdbInfoDataByAdminId 查询es中的指标数据
  1388. func SearchEdbInfoDataByAdminId(indexName, keywordStr string, from, size, filterSource, source int, edbInfoType uint8, frequency string, adminId int) (total int64, list []*data_manage.EdbInfoList, err error) {
  1389. list = make([]*data_manage.EdbInfoList, 0)
  1390. defer func() {
  1391. if err != nil {
  1392. fmt.Println("EsAddOrEditData Err:", err.Error())
  1393. }
  1394. }()
  1395. highlight := elastic.NewHighlight()
  1396. highlight = highlight.Fields(elastic.NewHighlighterField("EdbCode"), elastic.NewHighlighterField("EdbName"))
  1397. highlight = highlight.PreTags("<font color='red'>").PostTags("</font>")
  1398. //var source map[string]interface{}
  1399. //source := map[string]interface{}{
  1400. // "query": map[string]interface{}{
  1401. // "match_all": map[string]interface{}{},
  1402. // },
  1403. //}
  1404. mustMap := make([]interface{}, 0)
  1405. mustNotMap := make([]interface{}, 0)
  1406. //source := map[string]interface{}{
  1407. // "query": map[string]interface{}{
  1408. // "bool": map[string]interface{}{
  1409. // "must": map[string]interface{}{
  1410. // "query_string": map[string]interface{}{
  1411. // "query": keywordStr,
  1412. // "fields": []string{"EdbCode", "EdbName"},
  1413. // },
  1414. // },
  1415. // },
  1416. // },
  1417. //}
  1418. switch filterSource {
  1419. case 2:
  1420. //source = map[string]interface{}{
  1421. // "query": map[string]interface{}{
  1422. // "bool": map[string]interface{}{
  1423. // "must": map[string]interface{}{
  1424. // "query_string": map[string]interface{}{
  1425. // "query": keywordStr,
  1426. // },
  1427. // },
  1428. // "filter": []interface{}{
  1429. // map[string]interface{}{
  1430. // "term": map[string]interface{}{
  1431. // "Frequency.keyword": "月度",
  1432. // },
  1433. // }},
  1434. // },
  1435. // },
  1436. //}
  1437. mustMap = []interface{}{
  1438. map[string]interface{}{
  1439. "term": map[string]interface{}{
  1440. "Frequency.keyword": "月度",
  1441. //"Frequency.keyword": "月度",
  1442. },
  1443. },
  1444. }
  1445. case 3:
  1446. //source = map[string]interface{}{
  1447. // "query": map[string]interface{}{
  1448. // "bool": map[string]interface{}{
  1449. // "must": map[string]interface{}{
  1450. // "query_string": map[string]interface{}{
  1451. // "query": keywordStr,
  1452. // },
  1453. // },
  1454. // "must_not": []interface{}{
  1455. // map[string]interface{}{
  1456. // "match": map[string]interface{}{
  1457. // "Frequency.keyword": "日度",
  1458. // },
  1459. // }},
  1460. // },
  1461. // },
  1462. //}
  1463. ////注释掉,所有频度都可以变频 2022-08-31 14:31:28
  1464. //mustNotMap = []interface{}{
  1465. // map[string]interface{}{
  1466. // "match": map[string]interface{}{
  1467. // "Frequency.keyword": "日度",
  1468. // //"Frequency.keyword": "月度",
  1469. // },
  1470. // },
  1471. //}
  1472. case 4:
  1473. //source = map[string]interface{}{
  1474. // "query": map[string]interface{}{
  1475. // "bool": map[string]interface{}{
  1476. // "must": map[string]interface{}{
  1477. // "query_string": map[string]interface{}{
  1478. // "query": keywordStr,
  1479. // },
  1480. // },
  1481. // "filter": []interface{}{
  1482. // map[string]interface{}{
  1483. // "term": map[string]interface{}{
  1484. // "EdbType": 1,
  1485. // },
  1486. // }},
  1487. // },
  1488. // },
  1489. //}
  1490. mustMap = []interface{}{
  1491. map[string]interface{}{
  1492. "term": map[string]interface{}{
  1493. "EdbType": 1,
  1494. },
  1495. },
  1496. }
  1497. case 5:
  1498. mustMap = []interface{}{
  1499. map[string]interface{}{
  1500. "term": map[string]interface{}{
  1501. "Source": 6,
  1502. },
  1503. },
  1504. }
  1505. }
  1506. //指标来源
  1507. if source > 0 {
  1508. mustMap = append(mustMap, map[string]interface{}{
  1509. "term": map[string]interface{}{
  1510. "Source": source,
  1511. //"Frequency.keyword": "月度",
  1512. },
  1513. })
  1514. }
  1515. if frequency != "" {
  1516. mustMap = append(mustMap, map[string]interface{}{
  1517. "term": map[string]interface{}{
  1518. "Frequency.keyword": frequency,
  1519. //"Frequency.keyword": "月度",
  1520. },
  1521. })
  1522. }
  1523. // 指标类型:普通指标、预算指标
  1524. mustMap = append(mustMap, map[string]interface{}{
  1525. "term": map[string]interface{}{
  1526. "EdbInfoType": edbInfoType,
  1527. },
  1528. })
  1529. //普通指标
  1530. //mustMap = append(mustMap, map[string]interface{}{
  1531. // "term": map[string]interface{}{
  1532. // "EdbInfoType": 0,
  1533. // //"Frequency.keyword": "月度",
  1534. // },
  1535. //})
  1536. //关键字匹配
  1537. shouldMap := map[string]interface{}{
  1538. "should": []interface{}{
  1539. map[string]interface{}{
  1540. "match": map[string]interface{}{
  1541. "EdbCode": keywordStr,
  1542. //"Frequency.keyword": "月度",
  1543. },
  1544. },
  1545. map[string]interface{}{
  1546. "match": map[string]interface{}{
  1547. "EdbName": keywordStr,
  1548. //"Frequency.keyword": "月度",
  1549. },
  1550. },
  1551. },
  1552. }
  1553. mustMap = append(mustMap, map[string]interface{}{
  1554. "bool": shouldMap,
  1555. })
  1556. //创建人
  1557. if adminId > 0 {
  1558. mustMap = append(mustMap, map[string]interface{}{
  1559. "term": map[string]interface{}{
  1560. "SysUserId": adminId,
  1561. },
  1562. })
  1563. }
  1564. return searchEdbInfoData(indexName, mustMap, mustNotMap, shouldMap, from, size)
  1565. }