|
@@ -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
|
|
|
+ }
|
|
|
+}
|