|
@@ -1003,6 +1003,11 @@ const (
|
|
|
FilterQuery_New = `{"query":{"bool":{"must": [%s%s%s],"should":[]}}}`
|
|
|
MatchQueryString = `{"match": {%s: { "query":"%s", "operator": "and"}}}`
|
|
|
HL_New = `"highlight": {"pre_tags": ["<HL>"],"post_tags": ["<HL>"],"fields": {%s}}`
|
|
|
+
|
|
|
+ ik_highlightStr = `%s: {"fragment_size": %d,"number_of_fragments": 1,"require_field_match": true}`
|
|
|
+ IK_pre_tags = `<font class=\"es-highlight\">`
|
|
|
+ IK_post_tags = `</font>`
|
|
|
+ HL_IK = `"highlight": {"pre_tags": ["` + IK_pre_tags + `"],"post_tags": ["` + IK_post_tags + `"],"fields": {%s}}`
|
|
|
)
|
|
|
|
|
|
//替换了"号
|
|
@@ -1154,13 +1159,15 @@ func GetByNgramAll(index, itype string, query interface{}, mustquery, findfields
|
|
|
if len(fields) > 0 {
|
|
|
qstr = qstr[:len(qstr)-1] + `,"_source":[` + fields + "]}"
|
|
|
}
|
|
|
- if len(order) > 0 {
|
|
|
+ if strings.HasPrefix(order, "CUSTOM_") {
|
|
|
+ qstr = qstr[:len(qstr)-1] + `,` + strings.TrimLeft(order, "CUSTOM_") + `}`
|
|
|
+ } else 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)
|
|
|
+ //log.Println("ngram-find", qstr)
|
|
|
return Get(index, itype, qstr)
|
|
|
} else {
|
|
|
return nil
|
|
@@ -1248,7 +1255,7 @@ func GetResForJY(index, itype string, keys []KeyConfig, allquery, findfields, So
|
|
|
if start > -1 {
|
|
|
qstr = qstr[:len(qstr)-1] + `,"from":` + strconv.Itoa(start) + `,"size":` + strconv.Itoa(limit) + "}"
|
|
|
}
|
|
|
- log.Println("jy-ngram-find", qstr)
|
|
|
+ //log.Println("jy-ngram-find", qstr)
|
|
|
return Get(index, itype, qstr)
|
|
|
} else {
|
|
|
return nil
|
|
@@ -1284,3 +1291,29 @@ func GetAllByNgram(index, itype, qstr, findfields, order, fields string, start,
|
|
|
return nil
|
|
|
}
|
|
|
}
|
|
|
+
|
|
|
+//ik 分词
|
|
|
+func GetAllByIk(index, itype, qstr, findfields, order, fields string, start, limit, count int, highlight bool) *[]map[string]interface{} {
|
|
|
+ if qstr != "" {
|
|
|
+ if highlight {
|
|
|
+ ws := []string{}
|
|
|
+ for _, w := range strings.Split(findfields, ",") {
|
|
|
+ ws = append(ws, fmt.Sprintf(ik_highlightStr, w, count))
|
|
|
+ }
|
|
|
+ qstr = qstr[:len(qstr)-1] + `,` + fmt.Sprintf(HL_IK, 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("GetAllByNgram:", qstr)
|
|
|
+ return Get(index, itype, qstr)
|
|
|
+ } else {
|
|
|
+ return nil
|
|
|
+ }
|
|
|
+}
|