张金坤 před 8 roky
rodič
revize
1c1c3e2e51
1 změnil soubory, kde provedl 41 přidání a 6 odebrání
  1. 41 6
      common/src/qfw/util/elastic/elasticutil.go

+ 41 - 6
common/src/qfw/util/elastic/elasticutil.go

@@ -907,12 +907,13 @@ func Count(index, itype string, query interface{}) int64 {
 //{"multi_match": {"query": "$word","type": "phrase", "fields": [$field],"analyzer": "my_ngram"}}
 //"highlight": {"pre_tags": [""],"post_tags": [""],"fields": {"detail": {"fragment_size": 1,"number_of_fragments": 1},"title": {"fragment_size": 1,"number_of_fragments": 1}}}
 const (
-	FilterQuery  = `{"query": {"filtered": {"filter": {"bool": {"must": [%s]}},%s}}`
-	NgramStr     = `{"query":{"bool":{"must":[%s],"should":[%s],"minimum_should_match" : 1}}}`
-	NgramMust    = `{"bool":{"must":[%s]}}`
-	minq         = `{"multi_match": {"query": "%s","type": "phrase", "fields": [%s],"analyzer": "my_ngram"}}`
-	HL           = `"highlight": {"pre_tags": [""],"post_tags": [""],"fields": {%s}}`
-	highlightStr = `%s: {"fragment_size": %d,"number_of_fragments": 1}`
+	FilterQuery     = `{"query": {"filtered": {"filter": {"bool": {"must": [%s]}},%s}}`
+	FilterQuery_New = `{"query": {"filtered": {"filter": {"bool": {"must": [%s]}}},%s}}`
+	NgramStr        = `{"query":{"bool":{"must":[%s],"should":[%s],"minimum_should_match" : 1}}}`
+	NgramMust       = `{"bool":{"must":[%s]}}`
+	minq            = `{"multi_match": {"query": "%s","type": "phrase", "fields": [%s],"analyzer": "my_ngram"}}`
+	HL              = `"highlight": {"pre_tags": [""],"post_tags": [""],"fields": {%s}}`
+	highlightStr    = `%s: {"fragment_size": %d,"number_of_fragments": 1}`
 )
 
 func GetNgramQuery(query interface{}, mustquery, findfields string) (qstr string) {
@@ -1016,3 +1017,37 @@ func GetByNgramAll(index, itype string, query interface{}, mustquery, findfields
 		return nil
 	}
 }
+
+//增加高亮、过滤查询
+func GetByNgramAll_New(index, itype string, query interface{}, mustquery, findfields, order, fields string, start, limit int, highlight bool, filtermode bool) *[]map[string]interface{} {
+	defer util.Catch()
+	qstr := ""
+	if mustquery != "" && filtermode {
+		qstr = GetNgramQuery(query, "", findfields)
+		qstr = fmt.Sprintf(FilterQuery_New, mustquery, qstr[1:])
+	} else {
+		qstr = GetNgramQuery(query, mustquery, findfields)
+	}
+	if qstr != "" {
+		if highlight {
+			ws := []string{}
+			for _, w := range strings.Split(findfields, ",") {
+				ws = append(ws, fmt.Sprintf(highlightStr, w, 1))
+			}
+			qstr = qstr[:len(qstr)-1] + `,` + fmt.Sprintf(HL, strings.Join(ws, ",")) + `}`
+		}
+		if len(fields) > 0 {
+			qstr = qstr[:len(qstr)-1] + `,"_source":[` + fields + "]}"
+		}
+		if len(order) > 0 {
+			qstr = qstr[:len(qstr)-1] + `,"sort":[` + SR(SR(SR(SR(order, ",", ",", -1), " ", "", -1), ":-1", `:"desc"`, -1), ":1", `:"asc"`, -1) + `]}`
+		}
+		if start > -1 {
+			qstr = qstr[:len(qstr)-1] + `,"from":` + strconv.Itoa(start) + `,"size":` + strconv.Itoa(limit) + "}"
+		}
+		//log.Println("ngram-find", qstr)
+		return Get(index, itype, qstr)
+	} else {
+		return nil
+	}
+}