Ver Fonte

查询图表

xyxie há 3 semanas atrás
pai
commit
9990474717
2 ficheiros alterados com 60 adições e 18 exclusões
  1. 46 18
      services/elastic/elastic.go
  2. 14 0
      utils/common.go

+ 46 - 18
services/elastic/elastic.go

@@ -939,34 +939,61 @@ func SearchChartInfoData(indexName, keywordStr string, showSysId []int, sourceLi
 	})
 
 	//关键字匹配
+	//shouldMap := map[string]interface{}{
+	//	"should": []interface{}{
+	//		map[string]interface{}{
+	//			"match": map[string]interface{}{
+	//				"ChartName": keywordStr,
+	//				//"Frequency.keyword": "月度",
+	//			},
+	//		},
+	//		// 因为关键词被分了,所以需要用下面的语句来让他 整个词 查询,从而加重整词的权重
+	//		map[string]interface{}{
+	//			"match": map[string]interface{}{
+	//				"ChartName": map[string]interface{}{
+	//					"query":    keywordStr,
+	//					"operator": "and",
+	//				},
+	//				//"Frequency.keyword": "月度",
+	//			},
+	//		},
+	//		map[string]interface{}{
+	//			"match": map[string]interface{}{
+	//				"ChartNameEn": keywordStr,
+	//				//"Frequency.keyword": "月度",
+	//			},
+	//		},
+	//		// 因为关键词被分了,所以需要用下面的语句来让他 整个词 查询,从而加重整词的权重
+	//		map[string]interface{}{
+	//			"match": map[string]interface{}{
+	//				"ChartNameEn": map[string]interface{}{
+	//					"query":    keywordStr,
+	//					"operator": "and",
+	//				},
+	//				//"Frequency.keyword": "月度",
+	//			},
+	//		},
+	//	},
+	//}
+
+	// 默认使用中文名字字段去匹配
+	keywordNameKey := `ChartName`
+	// 如果没有中文,则使用英文名称字段去匹配
+	if !utils.ContainsChinese(keywordStr) {
+		keywordNameKey = `ChartNameEn`
+	}
 	shouldMap := map[string]interface{}{
 		"should": []interface{}{
 			map[string]interface{}{
 				"match": map[string]interface{}{
-					"ChartName": keywordStr,
+					keywordNameKey: keywordStr,
 					//"Frequency.keyword": "月度",
 				},
 			},
 			// 因为关键词被分了,所以需要用下面的语句来让他 整个词 查询,从而加重整词的权重
 			map[string]interface{}{
 				"match": map[string]interface{}{
-					"ChartName": map[string]interface{}{
-						"query":    keywordStr,
-						"operator": "and",
-					},
-					//"Frequency.keyword": "月度",
-				},
-			},
-			map[string]interface{}{
-				"match": map[string]interface{}{
-					"ChartNameEn": keywordStr,
-					//"Frequency.keyword": "月度",
-				},
-			},
-			// 因为关键词被分了,所以需要用下面的语句来让他 整个词 查询,从而加重整词的权重
-			map[string]interface{}{
-				"match": map[string]interface{}{
-					"ChartNameEn": map[string]interface{}{
+					keywordNameKey: map[string]interface{}{
 						"query":    keywordStr,
 						"operator": "and",
 					},
@@ -975,6 +1002,7 @@ func SearchChartInfoData(indexName, keywordStr string, showSysId []int, sourceLi
 			},
 		},
 	}
+
 	mustMap = append(mustMap, map[string]interface{}{
 		"bool": shouldMap,
 	})

+ 14 - 0
utils/common.go

@@ -1306,3 +1306,17 @@ func GetDaysBetween2Date(format, date1Str, date2Str string) (int, error) {
 	//计算相差天数
 	return int(date1.Sub(date2).Hours() / 24), nil
 }
+
+func ContainsChinese(str string) bool {
+	//设定一个含有中文的字符串
+	var reg = regexp.MustCompile("^[\u4e00-\u9fa5]$")
+	//接受正则表达式的范围
+	for _, v := range str {
+		//golang中string的底层是byte类型,所以单纯的for输出中文会出现乱码,这里选择for-range来输出
+		if reg.MatchString(string(v)) {
+			//判断是否为中文,如果是返回一个true,不是返回false。这俩面MatchString的参数要求是string
+			return true
+		}
+	}
+	return false
+}