elastic.go 43 KB

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