support range queries in syntax query
using syntax like: +abv:>50 or +abv<=7 closes #52
This commit is contained in:
parent
08633379ae
commit
6086f191f6
@ -9,6 +9,9 @@
|
||||
/^/ { logDebugTokens("BOOST"); return BOOST }
|
||||
/\(/ { logDebugTokens("LPAREN"); return LPAREN }
|
||||
/\)/ { logDebugTokens("RPAREN"); return RPAREN }
|
||||
/>/ { logDebugTokens("GREATER"); return GREATER }
|
||||
/</ { logDebugTokens("LESS"); return LESS }
|
||||
/=/ { logDebugTokens("EQUAL"); return EQUAL }
|
||||
/-?([0-9]|[1-9][0-9]*)(\.[0-9][0-9]*)?/
|
||||
{
|
||||
lval.f,_ = strconv.ParseFloat(yylex.Text(), 64);
|
||||
@ -16,7 +19,7 @@
|
||||
return NUMBER
|
||||
}
|
||||
/[ \t\n]+/ { logDebugTokens("WHITESPACE (count=%d)", len(yylex.Text())) /* eat up whitespace */ }
|
||||
/[^\t\n\f\r :^\+\-]+/ {
|
||||
/[^\t\n\f\r :^\+\-><=]+/ {
|
||||
lval.s = yylex.Text()
|
||||
logDebugTokens("STRING - %s", lval.s);
|
||||
return STRING
|
||||
|
File diff suppressed because it is too large
Load Diff
@ -14,7 +14,7 @@ s string
|
||||
n int
|
||||
f float64}
|
||||
|
||||
%token STRING PHRASE PLUS MINUS COLON BOOST LPAREN RPAREN NUMBER STRING
|
||||
%token STRING PHRASE PLUS MINUS COLON BOOST LPAREN RPAREN NUMBER STRING GREATER LESS EQUAL
|
||||
|
||||
%%
|
||||
|
||||
@ -123,6 +123,78 @@ STRING COLON PHRASE {
|
||||
parsingShouldList.AddQuery(q)
|
||||
}
|
||||
parsingLastQuery = q
|
||||
}
|
||||
|
|
||||
STRING COLON GREATER NUMBER {
|
||||
field := $1.s
|
||||
min := $4.f
|
||||
minInclusive := false
|
||||
logDebugGrammar("FIELD - GREATER THAN %f", min)
|
||||
q := NewNumericRangeInclusiveQuery(&min, nil, &minInclusive, nil).SetField(field)
|
||||
if parsingMust {
|
||||
parsingMustList.AddQuery(q)
|
||||
parsingMust = false
|
||||
} else if parsingMustNot {
|
||||
parsingMustNotList.AddQuery(q)
|
||||
parsingMustNot = false
|
||||
} else {
|
||||
parsingShouldList.AddQuery(q)
|
||||
}
|
||||
parsingLastQuery = q
|
||||
}
|
||||
|
|
||||
STRING COLON GREATER EQUAL NUMBER {
|
||||
field := $1.s
|
||||
min := $5.f
|
||||
minInclusive := true
|
||||
logDebugGrammar("FIELD - GREATER THAN OR EQUAL %f", min)
|
||||
q := NewNumericRangeInclusiveQuery(&min, nil, &minInclusive, nil).SetField(field)
|
||||
if parsingMust {
|
||||
parsingMustList.AddQuery(q)
|
||||
parsingMust = false
|
||||
} else if parsingMustNot {
|
||||
parsingMustNotList.AddQuery(q)
|
||||
parsingMustNot = false
|
||||
} else {
|
||||
parsingShouldList.AddQuery(q)
|
||||
}
|
||||
parsingLastQuery = q
|
||||
}
|
||||
|
|
||||
STRING COLON LESS NUMBER {
|
||||
field := $1.s
|
||||
max := $4.f
|
||||
maxInclusive := false
|
||||
logDebugGrammar("FIELD - LESS THAN %f", max)
|
||||
q := NewNumericRangeInclusiveQuery(nil, &max, nil, &maxInclusive).SetField(field)
|
||||
if parsingMust {
|
||||
parsingMustList.AddQuery(q)
|
||||
parsingMust = false
|
||||
} else if parsingMustNot {
|
||||
parsingMustNotList.AddQuery(q)
|
||||
parsingMustNot = false
|
||||
} else {
|
||||
parsingShouldList.AddQuery(q)
|
||||
}
|
||||
parsingLastQuery = q
|
||||
}
|
||||
|
|
||||
STRING COLON LESS EQUAL NUMBER {
|
||||
field := $1.s
|
||||
max := $5.f
|
||||
maxInclusive := true
|
||||
logDebugGrammar("FIELD - LESS THAN OR EQUAL %f", max)
|
||||
q := NewNumericRangeInclusiveQuery(nil, &max, nil, &maxInclusive).SetField(field)
|
||||
if parsingMust {
|
||||
parsingMustList.AddQuery(q)
|
||||
parsingMust = false
|
||||
} else if parsingMustNot {
|
||||
parsingMustNotList.AddQuery(q)
|
||||
parsingMustNot = false
|
||||
} else {
|
||||
parsingShouldList.AddQuery(q)
|
||||
}
|
||||
parsingLastQuery = q
|
||||
};
|
||||
|
||||
|
||||
|
122
y.go
122
y.go
@ -29,6 +29,9 @@ const BOOST = 57351
|
||||
const LPAREN = 57352
|
||||
const RPAREN = 57353
|
||||
const NUMBER = 57354
|
||||
const GREATER = 57355
|
||||
const LESS = 57356
|
||||
const EQUAL = 57357
|
||||
|
||||
var yyToknames = []string{
|
||||
"STRING",
|
||||
@ -40,6 +43,9 @@ var yyToknames = []string{
|
||||
"LPAREN",
|
||||
"RPAREN",
|
||||
"NUMBER",
|
||||
"GREATER",
|
||||
"LESS",
|
||||
"EQUAL",
|
||||
}
|
||||
var yyStatenames = []string{}
|
||||
|
||||
@ -57,47 +63,51 @@ var yyExca = []int{
|
||||
-2, 5,
|
||||
}
|
||||
|
||||
const yyNprod = 16
|
||||
const yyNprod = 20
|
||||
const yyPrivate = 57344
|
||||
|
||||
var yyTokenNames []string
|
||||
var yyStates []string
|
||||
|
||||
const yyLast = 18
|
||||
const yyLast = 26
|
||||
|
||||
var yyAct = []int{
|
||||
|
||||
16, 14, 15, 6, 7, 17, 18, 10, 11, 2,
|
||||
13, 5, 12, 8, 9, 4, 3, 1,
|
||||
17, 18, 23, 21, 26, 24, 22, 25, 15, 19,
|
||||
20, 16, 14, 6, 7, 10, 11, 2, 13, 5,
|
||||
12, 8, 9, 4, 3, 1,
|
||||
}
|
||||
var yyPact = []int{
|
||||
|
||||
-3, -1000, -1000, -3, 3, -1000, -1000, -1000, -1000, -8,
|
||||
-6, -1000, -1000, -1000, -12, 1, -1000, -1000, -1000,
|
||||
7, -1000, -1000, 7, 11, -1000, -1000, -1000, -1000, 3,
|
||||
0, -1000, -1000, -1000, -1, -4, -1000, -1000, -1000, -9,
|
||||
-10, -1000, -5, -1000, -8, -1000, -1000,
|
||||
}
|
||||
var yyPgo = []int{
|
||||
|
||||
0, 17, 9, 16, 15, 14, 12, 11, 10,
|
||||
0, 25, 17, 24, 23, 22, 20, 19, 18,
|
||||
}
|
||||
var yyR1 = []int{
|
||||
|
||||
0, 1, 2, 2, 3, 4, 4, 7, 7, 5,
|
||||
5, 5, 5, 8, 6, 6,
|
||||
5, 5, 5, 5, 5, 5, 5, 8, 6, 6,
|
||||
}
|
||||
var yyR2 = []int{
|
||||
|
||||
0, 1, 2, 1, 3, 0, 1, 1, 1, 1,
|
||||
1, 3, 3, 2, 0, 1,
|
||||
1, 3, 3, 4, 5, 4, 5, 2, 0, 1,
|
||||
}
|
||||
var yyChk = []int{
|
||||
|
||||
-1000, -1, -2, -3, -4, -7, 6, 7, -2, -5,
|
||||
4, 5, -6, -8, 9, 8, 12, 4, 5,
|
||||
4, 5, -6, -8, 9, 8, 12, 4, 5, 13,
|
||||
14, 12, 15, 12, 15, 12, 12,
|
||||
}
|
||||
var yyDef = []int{
|
||||
|
||||
5, -2, 1, -2, 0, 6, 7, 8, 2, 14,
|
||||
9, 10, 4, 15, 0, 0, 13, 11, 12,
|
||||
5, -2, 1, -2, 0, 6, 7, 8, 2, 18,
|
||||
9, 10, 4, 19, 0, 0, 17, 11, 12, 0,
|
||||
0, 13, 0, 15, 0, 14, 16,
|
||||
}
|
||||
var yyTok1 = []int{
|
||||
|
||||
@ -106,7 +116,7 @@ var yyTok1 = []int{
|
||||
var yyTok2 = []int{
|
||||
|
||||
2, 3, 4, 5, 6, 7, 8, 9, 10, 11,
|
||||
12,
|
||||
12, 13, 14, 15,
|
||||
}
|
||||
var yyTok3 = []int{
|
||||
0,
|
||||
@ -449,7 +459,83 @@ yydefault:
|
||||
parsingLastQuery = q
|
||||
}
|
||||
case 13:
|
||||
//line query_syntax.y:130
|
||||
//line query_syntax.y:128
|
||||
{
|
||||
field := yyS[yypt-3].s
|
||||
min := yyS[yypt-0].f
|
||||
minInclusive := false
|
||||
logDebugGrammar("FIELD - GREATER THAN %f", min)
|
||||
q := NewNumericRangeInclusiveQuery(&min, nil, &minInclusive, nil).SetField(field)
|
||||
if parsingMust {
|
||||
parsingMustList.AddQuery(q)
|
||||
parsingMust = false
|
||||
} else if parsingMustNot {
|
||||
parsingMustNotList.AddQuery(q)
|
||||
parsingMustNot = false
|
||||
} else {
|
||||
parsingShouldList.AddQuery(q)
|
||||
}
|
||||
parsingLastQuery = q
|
||||
}
|
||||
case 14:
|
||||
//line query_syntax.y:146
|
||||
{
|
||||
field := yyS[yypt-4].s
|
||||
min := yyS[yypt-0].f
|
||||
minInclusive := true
|
||||
logDebugGrammar("FIELD - GREATER THAN OR EQUAL %f", min)
|
||||
q := NewNumericRangeInclusiveQuery(&min, nil, &minInclusive, nil).SetField(field)
|
||||
if parsingMust {
|
||||
parsingMustList.AddQuery(q)
|
||||
parsingMust = false
|
||||
} else if parsingMustNot {
|
||||
parsingMustNotList.AddQuery(q)
|
||||
parsingMustNot = false
|
||||
} else {
|
||||
parsingShouldList.AddQuery(q)
|
||||
}
|
||||
parsingLastQuery = q
|
||||
}
|
||||
case 15:
|
||||
//line query_syntax.y:164
|
||||
{
|
||||
field := yyS[yypt-3].s
|
||||
max := yyS[yypt-0].f
|
||||
maxInclusive := false
|
||||
logDebugGrammar("FIELD - LESS THAN %f", max)
|
||||
q := NewNumericRangeInclusiveQuery(nil, &max, nil, &maxInclusive).SetField(field)
|
||||
if parsingMust {
|
||||
parsingMustList.AddQuery(q)
|
||||
parsingMust = false
|
||||
} else if parsingMustNot {
|
||||
parsingMustNotList.AddQuery(q)
|
||||
parsingMustNot = false
|
||||
} else {
|
||||
parsingShouldList.AddQuery(q)
|
||||
}
|
||||
parsingLastQuery = q
|
||||
}
|
||||
case 16:
|
||||
//line query_syntax.y:182
|
||||
{
|
||||
field := yyS[yypt-4].s
|
||||
max := yyS[yypt-0].f
|
||||
maxInclusive := true
|
||||
logDebugGrammar("FIELD - LESS THAN OR EQUAL %f", max)
|
||||
q := NewNumericRangeInclusiveQuery(nil, &max, nil, &maxInclusive).SetField(field)
|
||||
if parsingMust {
|
||||
parsingMustList.AddQuery(q)
|
||||
parsingMust = false
|
||||
} else if parsingMustNot {
|
||||
parsingMustNotList.AddQuery(q)
|
||||
parsingMustNot = false
|
||||
} else {
|
||||
parsingShouldList.AddQuery(q)
|
||||
}
|
||||
parsingLastQuery = q
|
||||
}
|
||||
case 17:
|
||||
//line query_syntax.y:202
|
||||
{
|
||||
boost := yyS[yypt-0].f
|
||||
if parsingLastQuery != nil {
|
||||
@ -462,13 +548,13 @@ yydefault:
|
||||
}
|
||||
logDebugGrammar("BOOST %f", boost)
|
||||
}
|
||||
case 14:
|
||||
//line query_syntax.y:144
|
||||
case 18:
|
||||
//line query_syntax.y:216
|
||||
{
|
||||
|
||||
}
|
||||
case 15:
|
||||
//line query_syntax.y:148
|
||||
case 19:
|
||||
//line query_syntax.y:220
|
||||
{
|
||||
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user