瀏覽代碼

feat:更新

wangshan 3 年之前
父節點
當前提交
d5a89f9205

+ 30 - 8
src/jfw/modules/common/src/qfw/util/bidsearch/search.go

@@ -237,6 +237,15 @@ func GetBidSearchQuery(area, city, publishtime, subtype, winner, buyerclass stri
 	return query
 }
 
+//包含正文或 附件 不包含标题
+func DetailFileORTitle(findfields string) bool {
+	return (strings.Contains(findfields, `"detail"`) || strings.Contains(findfields, `"filetext"`)) && !strings.Contains(findfields, `"title"`)
+}
+
+//包含标题和正文
+func DetailTitle(findfields string) bool {
+	return strings.Contains(findfields, `"detail"`) && strings.Contains(findfields, `"title"`)
+}
 func GetSearchQuery(keyword, industry, minprice, maxprice, hasBuyerTel, hasWinnerTel, fileExists, findfields, mustquery, notkey string, searchTypeSwitch bool) (qstr string) {
 	multi_match := `{"multi_match": {"query": "%s","type": "phrase", "fields": [%s]}}`
 	query := `{"query":{"bool":{"must":[%s],"must_not":[%s]}}}`
@@ -258,16 +267,23 @@ func GetSearchQuery(keyword, industry, minprice, maxprice, hasBuyerTel, hasWinne
 		keyword_multi_match := fmt.Sprintf(multi_match, "%s", findfields)
 		shoulds := []string{}
 		for _, v := range strings.Split(keyword, "+") {
-			//多个关键词  单个字 搜索范围只有全文 例如:学 虚拟机
-			if len(strings.Split(keyword, "+")) > 1 && len([]rune(elastic.ReplaceYH(v))) == 1 && findfields == `"detail"` {
+			if elastic.ReplaceYH(v) == "" {
 				continue
 			}
-			//标题 全文搜索 搜索类型开关打开 默认搜索全文;(全文包含标题)(单字排除)
-			if searchTypeSwitch && len([]rune(elastic.ReplaceYH(v))) > 1 {
-				if strings.Contains(findfields, `"title",`) {
-					findfields = strings.Replace(findfields, `"title",`, ``, -1)
-				} else if strings.Contains(findfields, `,"title"`) {
-					findfields = strings.Replace(findfields, `,"title"`, ``, -1)
+			if len([]rune(elastic.ReplaceYH(v))) == 1 {
+				//单个字 搜索范围 有全文或者附件 无标题 例如:学 虚拟机 detail  搜索的时候加上标题
+				if DetailFileORTitle(findfields) {
+					keyword_multi_match = fmt.Sprintf(multi_match, "%s", findfields+`"title"`)
+				}
+			} else {
+				//标题+全文搜索 搜索类型开关打开 默认搜索全文;(全文包含标题)(单字排除)
+				if searchTypeSwitch && DetailTitle(findfields) {
+					if strings.Contains(findfields, `"title",`) {
+						findfields = strings.Replace(findfields, `"title",`, ``, -1)
+					} else if strings.Contains(findfields, `,"title"`) {
+						findfields = strings.Replace(findfields, `,"title"`, ``, -1)
+					}
+					keyword_multi_match = fmt.Sprintf(multi_match, "%s", findfields)
 				}
 			}
 			shoulds = append(shoulds, fmt.Sprintf(keyword_multi_match, elastic.ReplaceYH(v)))
@@ -330,6 +346,12 @@ func GetSearchQuery(keyword, industry, minprice, maxprice, hasBuyerTel, hasWinne
 			if v == "" {
 				continue
 			}
+			if len([]rune(elastic.ReplaceYH(v))) == 1 {
+				//单个字 搜索范围 有全文或者附件 无标题 例如:学 虚拟机 detail  搜索的时候加上标题
+				if DetailFileORTitle(findfields) {
+					notkey_multi_match = fmt.Sprintf(multi_match, "%s", findfields+`"title"`)
+				}
+			}
 			notkey_must_not = append(notkey_must_not, fmt.Sprintf(notkey_multi_match, elastic.ReplaceYH(v)))
 		}
 		must_not = append(must_not, fmt.Sprintf(query_bool_should, strings.Join(notkey_must_not, ",")))

+ 37 - 12
src/jfw/modules/common/src/qfw/util/dataexport/dataexport.go

@@ -72,6 +72,11 @@ var topType = map[string]string{
 	"采购意向":   "采购意向",
 }
 
+//包含正文或 附件 不包含标题
+func DetailFileORTitle(findfields string) bool {
+	return (strings.Contains(findfields, "detail") || strings.Contains(findfields, "filetext")) && !strings.Contains(findfields, "title")
+}
+
 //获取数据导出查询语句
 func getDataExportSql(scd *SieveCondition) string {
 	if len(scd.SelectIds) > 0 {
@@ -237,7 +242,7 @@ func getDataExportSql(scd *SieveCondition) string {
 		} else {
 			queryItem = strings.ReplaceAll(scd.SelectType, ",", "\",\"")
 		}
-		multi_match = fmt.Sprintf(multi_match, "%s", "\""+queryItem+"\"")
+		multi_match_new := fmt.Sprintf(multi_match, "%s", "\""+queryItem+"\"")
 
 		if scd.Comeinfrom == "supersearchPage" {
 			var keywordArr []string
@@ -261,33 +266,53 @@ func getDataExportSql(scd *SieveCondition) string {
 			if v.Keyword != "" {
 				if strings.Contains(v.Keyword, "+") {
 					for _, vk := range strings.Split(v.Keyword, "+") {
-						//多个关键词 单个字 正文搜索 排除
-						if scd.SelectType == "detail" && len(strings.Split(v.Keyword, "+")) > 1 && len([]rune(elastic.ReplaceYH(vk))) == 1 {
-							continue
+						//单个字 搜索范围 有全文或者附件 无标题 例如:学 虚拟机 detail  搜索的时候加上标题
+						if scd.Comeinfrom == "supersearchPage" && DetailFileORTitle(scd.SelectType) && len([]rune(elastic.ReplaceYH(vk))) == 1 {
+							queryItem = strings.ReplaceAll(scd.SelectType+"title", ",", "\",\"")
+							shouldsKey := fmt.Sprintf(multi_match, "\""+vk+"\"", "\""+queryItem+"\"")
+							shoulds = append(shoulds, shouldsKey)
+						} else {
+							shoulds = append(shoulds, fmt.Sprintf(multi_match_new, "\""+vk+"\""))
 						}
-						shoulds = append(shoulds, fmt.Sprintf(multi_match, "\""+vk+"\""))
 					}
 				} else if strings.Contains(v.Keyword, " ") {
 					for _, vk := range strings.Split(v.Keyword, " ") {
-						//多个关键词 单个字 正文搜索 排除
-						if scd.SelectType == "detail" && len(strings.Split(v.Keyword, " ")) > 1 && len([]rune(elastic.ReplaceYH(vk))) == 1 {
-							continue
+						//单个字 搜索范围 有全文或者附件 无标题 例如:学 虚拟机 detail  搜索的时候加上标题
+						if scd.Comeinfrom == "supersearchPage" && DetailFileORTitle(scd.SelectType) && len([]rune(elastic.ReplaceYH(vk))) == 1 {
+							queryItem = strings.ReplaceAll(scd.SelectType+"title", ",", "\",\"")
+							shouldsKey := fmt.Sprintf(multi_match, "\""+vk+"\"", "\""+queryItem+"\"")
+							shoulds = append(shoulds, shouldsKey)
+						} else {
+							shoulds = append(shoulds, fmt.Sprintf(multi_match_new, "\""+vk+"\""))
 						}
-						shoulds = append(shoulds, fmt.Sprintf(multi_match, "\""+vk+"\""))
 					}
 				} else {
-					shoulds = append(shoulds, fmt.Sprintf(multi_match, "\""+v.Keyword+"\""))
+					//单个字 搜索范围 有全文或者附件 无标题 例如:学 虚拟机 detail  搜索的时候加上标题
+					if scd.Comeinfrom == "supersearchPage" && DetailFileORTitle(scd.SelectType) && len([]rune(elastic.ReplaceYH(v.Keyword))) == 1 {
+						queryItem = strings.ReplaceAll(scd.SelectType+"title", ",", "\",\"")
+						shouldsKey := fmt.Sprintf(multi_match, "\""+v.Keyword+"\"", "\""+queryItem+"\"")
+						shoulds = append(shoulds, shouldsKey)
+					} else {
+						shoulds = append(shoulds, fmt.Sprintf(multi_match_new, "\""+v.Keyword+"\""))
+					}
 				}
 			}
 
 			//附加词
 			for _, vv := range v.Appended {
-				shoulds = append(shoulds, fmt.Sprintf(multi_match, "\""+vv+"\""))
+				shoulds = append(shoulds, fmt.Sprintf(multi_match_new, "\""+vv+"\""))
 			}
 
 			//排除词
 			for _, vv := range v.Exclude {
-				must_not = append(must_not, fmt.Sprintf(multi_match, "\""+vv+"\""))
+				//单个字 搜索范围 有全文或者附件 无标题 例如:学 虚拟机 detail  搜索的时候加上标题
+				if scd.Comeinfrom == "supersearchPage" && DetailFileORTitle(scd.SelectType) && len([]rune(elastic.ReplaceYH(vv))) == 1 {
+					queryItem = strings.ReplaceAll(scd.SelectType+"title", ",", "\",\"")
+					shouldsKey := fmt.Sprintf(multi_match, "\""+vv+"\"", "\""+queryItem+"\"")
+					shoulds = append(shoulds, shouldsKey)
+				} else {
+					must_not = append(must_not, fmt.Sprintf(multi_match_new, "\""+vv+"\""))
+				}
 			}
 
 			//添加