A golang Elasticsearch Querystring parser
import ( querystring "github.com/bytedance/go-querystring-parser" )
Then use:
query := "message: test\\ value AND datetime: [\"2020年01月01日T00:00:00\" TO \"2020年12月31日T00:00:00\"]" ast, err := querystring.Parse(query) if err != nil { // error handling } // do something with ast
The AST parsed from above querystring:
// print via github.com/davecgh/go-spew.Dump
(*querystring.AndCondition)(0xc00000c200)({
Left: (*querystring.MatchCondition)(0xc00000c1e0)({
Field: (string) (len=7) "message",
Value: (string) (len=10) "test value"
}),
Right: (*querystring.TimeRangeCondition)(0xc000076750)({
Field: (string) (len=8) "datetime",
Start: (*string)(0xc0000545b0)((len=19) "2020-01-01T00:00:00"),
End: (*string)(0xc0000545c0)((len=19) "2020-12-31T00:00:00"),
IncludeStart: (bool) true,
IncludeEnd: (bool) true
})
})
After edit querystring.y, gen code via run:
go generate