검색어 (키워드 필드 현재 uid
)와 범위 제한 (현재 긴 시간 동안 unixtime)으로 사용자 그룹을 쿼리하는 문장이있는 경우 문장을 Kibana에서 실행할 수 있습니다. curl하지만 json 후에 golang 클라이언트 (https://github.com/olivere/elastic)를 사용하여 쿼리를 수행 할 때. Unmarshal(), 문장이 변조되었습니다. 범위 요청이 취소되었습니다. 이유가 무엇입니까? 내 문장이 아들의 규칙에 어긋나는거야?go json.Unmarshal 일부 구문이 사라졌습니다.
package main
import (
"encoding/json"
"fmt"
)
var hot_cache map[string]byte
var followers []string
var prefix = "{\"constant_score\" : {\"filter\" : {\"bool\" : {\"filter\" : {\"range\" : {\"unixtime\" : {\"gte\" : %d, \"lte\" : %d}}}, \"filter\" : {\"terms\" : {\"uid\" : ["
var suffix = "]}}}}}}"
func main() {
tmp := prefix
tmp += "\""
tmp += "123"
tmp += "\""
tmp += suffix
qstr := fmt.Sprintf(tmp, 1, 2)
fmt.Println("raw: ", qstr)
var f interface{}
err := json.Unmarshal([]byte(qstr), &f)
if err != nil {
panic(err)
}
fmt.Println("json: ", f)
}
출력 :
raw: {"constant_score" : {"filter" : {"bool" : {"filter" : {"range" : {"unixtimestamp" : {"gte" : 1, "lte" : 2}}}, "filter" : {"terms" : {"uid" : ["123"]}}}}}}
JSON : 맵 [constant_score : 맵 [필터 : 맵 [BOOL : 맵 [필터 : 맵 [조건 : 맵 [UID : [123] ]]]]]
어떤 이유인지 알고 계십니까?
원시 json이 손상되었습니다. "bool"개체에 "필터"라는 이름의 두 필드가 포함되어 있습니다. 그냥 예쁜 qstr을 인쇄하면 볼 수 있습니다. Protip : 그것이 작동하지 않으면 당신은 입력을 엉망으로 만들었습니다. – Volker
두 개의 필터 필드가있는 객체가 있기 때문에 – mkopriva
고마워요.하지만이 문장은 키나바에서 실행할 수 있습니다. 또는 탄성 서버로 컬 할 수 있습니다. – user8095277