entsearch.go 2.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104
  1. // Package jylabutil search
  2. package jylabutil
  3. import (
  4. "fmt"
  5. "strings"
  6. elastic "app.yhyue.com/moapp/jybase/es"
  7. )
  8. /**即时获取企业名称列表
  9. name 名称
  10. limit 取几条
  11. */
  12. func GetEenNameImmediate(name string, limit int) []map[string]interface{} {
  13. query := `{"query": {
  14. "bool": {
  15. "must_not":[{"term": {"winnersign": "1"}}],
  16. "should": [{
  17. "bool": {"must": [{"multi_match": {"query": "` + name + `", "type": "phrase","fields": ["name"], "analyzer": "my_ngram"}}]}
  18. }],
  19. "minimum_should_match": 1
  20. }
  21. },
  22. "_source": ["name","_id"],
  23. "from": 0,"size": ` + fmt.Sprint(limit) + `
  24. }`
  25. list := *elastic.Get("winner", "winner", query)
  26. return list
  27. }
  28. /*根据企业名称、地区、中标价获取项目列表
  29. entname 企业名称
  30. area 区域多值","号隔开
  31. lower 下限单位万
  32. upper 上限单位万
  33. pagenum 页码
  34. pagesize每页数量
  35. */
  36. func GetProjectByEntName(entname string, area string, lower, upper float64, fields string, pagenum, pagesize int, getCount bool) (int, []map[string]interface{}) {
  37. if pagenum < 1 {
  38. pagenum = 1
  39. }
  40. mastquery := getSearchQuery(entname, area, lower, upper)
  41. var count int
  42. if getCount && pagenum == 1 {
  43. countQuery := `{"query":{"bool":{"must":[` + mastquery + `]}}}`
  44. count = int(elastic.Count("projectset", "projectset", countQuery))
  45. }
  46. order := `CUSTOM_"sort": {
  47. "_script": {
  48. "script": "if(doc['jgtime'].size()>0){return doc['jgtime'].value}else if(doc['zbtime'].size()>0){return doc['zbtime'].value}else if(doc['lasttime'].size()>0){return doc['lasttime'].value}else{return doc['createtime'].value}",
  49. "type": "number",
  50. "order": "desc"
  51. }
  52. }`
  53. list := *elastic.GetByNgram(
  54. "projectset", "projectset",
  55. ``, mastquery,
  56. "",
  57. order, fields, (pagenum-1)*pagesize, pagesize,
  58. )
  59. return count, list
  60. }
  61. func getSearchQuery(entname, area string, lower, upper float64) string {
  62. query := ``
  63. if entname != "" {
  64. query = `{"term":{"s_winner":"` + entname + `"}}`
  65. }
  66. if area != "" {
  67. if len(query) > 0 {
  68. query += ","
  69. }
  70. query += `{"terms":{"area":[`
  71. for k, v := range strings.Split(area, ",") {
  72. if k > 0 {
  73. query += `,`
  74. }
  75. query += `"` + v + `"`
  76. }
  77. query += `]}}`
  78. }
  79. if lower > 0 && upper > 0 {
  80. if len(query) > 0 {
  81. query += ","
  82. }
  83. query += `{"range":{"bidamount":{"gte":` + fmt.Sprint(lower*10000) + `,"lte":` + fmt.Sprint(upper*10000) + `}}}`
  84. } else {
  85. if lower > 0 {
  86. if len(query) > 0 {
  87. query += ","
  88. }
  89. query += `{"range":{"bidamount":{"gte":` + fmt.Sprint(lower*10000) + `}}}`
  90. }
  91. if upper > 0 {
  92. if len(query) > 0 {
  93. query += ","
  94. }
  95. query += `{"range":{"bidamount":{"lte":` + fmt.Sprint(upper*10000) + `}}}`
  96. }
  97. }
  98. return query
  99. }