|
@@ -0,0 +1,105 @@
|
|
|
|
+// Package jylabutil search
|
|
|
|
+package jylabutil
|
|
|
|
+
|
|
|
|
+import (
|
|
|
|
+ "fmt"
|
|
|
|
+ "strings"
|
|
|
|
+
|
|
|
|
+ elastic "app.yhyue.com/moapp/jybase/esv1"
|
|
|
|
+)
|
|
|
|
+
|
|
|
|
+/**即时获取企业名称列表
|
|
|
|
+name 名称
|
|
|
|
+limit 取几条
|
|
|
|
+*/
|
|
|
|
+func GetEenNameImmediate(name string, limit int) []map[string]interface{} {
|
|
|
|
+ query := `{"query": {
|
|
|
|
+ "bool": {
|
|
|
|
+ "must_not":[{"term": {"winnersign": "1"}}],
|
|
|
|
+ "should": [{
|
|
|
|
+ "bool": {"must": [{"multi_match": {"query": "` + name + `", "type": "phrase","fields": ["name"], "analyzer": "my_ngram"}}]}
|
|
|
|
+ }],
|
|
|
|
+ "minimum_should_match": 1
|
|
|
|
+ }
|
|
|
|
+ },
|
|
|
|
+ "_source": ["name","_id"],
|
|
|
|
+ "from": 0,"size": ` + fmt.Sprint(limit) + `
|
|
|
|
+ }`
|
|
|
|
+ list := *elastic.Get("winner", "winner", query)
|
|
|
|
+ return list
|
|
|
|
+}
|
|
|
|
+
|
|
|
|
+/*根据企业名称、地区、中标价获取项目列表
|
|
|
|
+entname 企业名称
|
|
|
|
+area 区域多值","号隔开
|
|
|
|
+lower 下限单位万
|
|
|
|
+upper 上限单位万
|
|
|
|
+pagenum 页码
|
|
|
|
+pagesize每页数量
|
|
|
|
+*/
|
|
|
|
+func GetProjectByEntName(entname string, area string, lower, upper float64, fields string, pagenum, pagesize int, getCount bool) (int, []map[string]interface{}) {
|
|
|
|
+ if pagenum < 1 {
|
|
|
|
+ pagenum = 1
|
|
|
|
+ }
|
|
|
|
+ mastquery := getSearchQuery(entname, area, lower, upper)
|
|
|
|
+ var count int
|
|
|
|
+ if getCount && pagenum == 1 {
|
|
|
|
+ countQuery := `{"query":{"bool":{"must":[` + mastquery + `]}}}`
|
|
|
|
+ count = int(elastic.Count("projectset", "projectset", countQuery))
|
|
|
|
+ }
|
|
|
|
+ order := `CUSTOM_"sort": {
|
|
|
|
+ "_script": {
|
|
|
|
+ "script": "doc['jgtime']?doc['jgtime'].value:doc['zbtime'].value",
|
|
|
|
+ "lang": "groovy",
|
|
|
|
+ "type": "number",
|
|
|
|
+ "order": "desc"
|
|
|
|
+ }
|
|
|
|
+ }`
|
|
|
|
+ list := *elastic.GetByNgram(
|
|
|
|
+ "projectset", "projectset",
|
|
|
|
+ ``, mastquery,
|
|
|
|
+ "",
|
|
|
|
+ order, fields, (pagenum-1)*pagesize, pagesize,
|
|
|
|
+ )
|
|
|
|
+ return count, list
|
|
|
|
+}
|
|
|
|
+
|
|
|
|
+func getSearchQuery(entname, area string, lower, upper float64) string {
|
|
|
|
+ query := ``
|
|
|
|
+ if entname != "" {
|
|
|
|
+ query = `{"term":{"s_winner":"` + entname + `"}}`
|
|
|
|
+ }
|
|
|
|
+ if area != "" {
|
|
|
|
+ if len(query) > 0 {
|
|
|
|
+ query += ","
|
|
|
|
+ }
|
|
|
|
+ query += `{"terms":{"area":[`
|
|
|
|
+ for k, v := range strings.Split(area, ",") {
|
|
|
|
+ if k > 0 {
|
|
|
|
+ query += `,`
|
|
|
|
+ }
|
|
|
|
+ query += `"` + v + `"`
|
|
|
|
+ }
|
|
|
|
+ query += `]}}`
|
|
|
|
+ }
|
|
|
|
+ if lower > 0 && upper > 0 {
|
|
|
|
+ if len(query) > 0 {
|
|
|
|
+ query += ","
|
|
|
|
+ }
|
|
|
|
+ query += `{"range":{"bidamount":{"gte":` + fmt.Sprint(lower*10000) + `,"lte":` + fmt.Sprint(upper*10000) + `}}}`
|
|
|
|
+ } else {
|
|
|
|
+ if lower > 0 {
|
|
|
|
+ if len(query) > 0 {
|
|
|
|
+ query += ","
|
|
|
|
+ }
|
|
|
|
+ query += `{"range":{"bidamount":{"gte":` + fmt.Sprint(lower*10000) + `}}}`
|
|
|
|
+ }
|
|
|
|
+ if upper > 0 {
|
|
|
|
+ if len(query) > 0 {
|
|
|
|
+ query += ","
|
|
|
|
+ }
|
|
|
|
+ query += `{"range":{"bidamount":{"lte":` + fmt.Sprint(upper*10000) + `}}}`
|
|
|
|
+ }
|
|
|
|
+ }
|
|
|
|
+ return query
|
|
|
|
+}
|