Skip to content

Commit

Permalink
add ip-range searches to QueryStringQuery
Browse files Browse the repository at this point in the history
  • Loading branch information
amnonbc committed Dec 22, 2020
1 parent b21cda5 commit c8a1b8b
Show file tree
Hide file tree
Showing 4 changed files with 88 additions and 42 deletions.
9 changes: 9 additions & 0 deletions search/query/ip_range.go
Original file line number Diff line number Diff line change
Expand Up @@ -124,3 +124,12 @@ func newNumericRangeInclusiveQuery(min, max uint32, minInclusive, maxInclusive b
m2 := float64(max)
return NewNumericRangeInclusiveQuery(&m1, &m2, &minInclusive, &maxInclusive)
}

func isIPRange(s string) bool {
_, _, err := net.ParseCIDR(s)
if err == nil {
return true
}
ip := net.ParseIP(s)
return ip != nil
}
7 changes: 6 additions & 1 deletion search/query/query_string.y
Original file line number Diff line number Diff line change
Expand Up @@ -185,7 +185,12 @@ tSTRING tCOLON tPHRASE {
field := $1
phrase := $3
logDebugGrammar("FIELD - %s PHRASE - %s", field, phrase)
q := NewMatchPhraseQuery(phrase)
var q FieldableQuery
if isIPRange(phrase) {
q = NewIPRangeQuery(phrase)
} else {
q = NewMatchPhraseQuery(phrase)
}
q.SetField(field)
$$ = q
}
Expand Down
86 changes: 45 additions & 41 deletions search/query/query_string.y.go
Original file line number Diff line number Diff line change
@@ -1,3 +1,5 @@

//line query_string.y:2
package query

import __yyfmt__ "fmt"
Expand Down Expand Up @@ -54,6 +56,7 @@ var yyToknames = [...]string{
"tEQUAL",
"tTILDE",
}

var yyStatenames = [...]string{}

const yyEofCode = 1
Expand All @@ -70,68 +73,64 @@ var yyExca = [...]int{
-2, 5,
}

const yyNprod = 28
const yyPrivate = 57344

var yyTokenNames []string
var yyStates []string

const yyLast = 42

var yyAct = [...]int{

17, 16, 18, 23, 22, 30, 3, 21, 19, 20,
29, 26, 22, 22, 1, 21, 21, 15, 28, 25,
24, 27, 34, 14, 22, 13, 31, 21, 32, 33,
22, 9, 11, 21, 5, 6, 2, 10, 4, 12,
7, 8,
}
var yyPact = [...]int{

var yyPact = [...]int{
28, -1000, -1000, 28, 27, -1000, -1000, -1000, 16, 9,
-1000, -1000, -1000, -1000, -1000, -3, -11, -1000, -1000, 6,
5, -1000, -5, -1000, -1000, 23, -1000, -1000, 17, -1000,
-1000, -1000, -1000, -1000, -1000,
}
var yyPgo = [...]int{

var yyPgo = [...]int{
0, 0, 41, 39, 38, 14, 36, 6,
}
var yyR1 = [...]int{

var yyR1 = [...]int{
0, 5, 6, 6, 7, 4, 4, 4, 2, 2,
2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
2, 2, 2, 2, 3, 3, 1, 1,
}
var yyR2 = [...]int{

var yyR2 = [...]int{
0, 1, 2, 1, 3, 0, 1, 1, 1, 2,
4, 1, 1, 3, 3, 3, 4, 5, 4, 5,
4, 5, 4, 5, 0, 1, 1, 2,
}
var yyChk = [...]int{

var yyChk = [...]int{
-1000, -5, -6, -7, -4, 6, 7, -6, -2, 4,
10, 5, -3, 9, 14, 8, 4, -1, 5, 11,
12, 10, 7, 14, -1, 13, 5, -1, 13, 5,
10, -1, 5, -1, 5,
}
var yyDef = [...]int{

var yyDef = [...]int{
5, -2, 1, -2, 0, 6, 7, 2, 24, 8,
11, 12, 4, 25, 9, 0, 13, 14, 15, 0,
0, 26, 0, 10, 16, 0, 20, 18, 0, 22,
27, 17, 21, 19, 23,
}
var yyTok1 = [...]int{

var yyTok1 = [...]int{
1,
}
var yyTok2 = [...]int{

var yyTok2 = [...]int{
2, 3, 4, 5, 6, 7, 8, 9, 10, 11,
12, 13, 14,
}

var yyTok3 = [...]int{
0,
}
Expand Down Expand Up @@ -475,25 +474,25 @@ yydefault:

case 1:
yyDollar = yyS[yypt-1 : yypt+1]
//line query_string.y:40
//line query_string.y:40
{
logDebugGrammar("INPUT")
}
case 2:
yyDollar = yyS[yypt-2 : yypt+1]
//line query_string.y:45
//line query_string.y:45
{
logDebugGrammar("SEARCH PARTS")
}
case 3:
yyDollar = yyS[yypt-1 : yypt+1]
//line query_string.y:49
//line query_string.y:49
{
logDebugGrammar("SEARCH PART")
}
case 4:
yyDollar = yyS[yypt-3 : yypt+1]
//line query_string.y:54
//line query_string.y:54
{
query := yyDollar[2].q
if yyDollar[3].pf != nil {
Expand All @@ -512,27 +511,27 @@ yydefault:
}
case 5:
yyDollar = yyS[yypt-0 : yypt+1]
//line query_string.y:73
//line query_string.y:73
{
yyVAL.n = queryShould
}
case 6:
yyDollar = yyS[yypt-1 : yypt+1]
//line query_string.y:77
//line query_string.y:77
{
logDebugGrammar("PLUS")
yyVAL.n = queryMust
}
case 7:
yyDollar = yyS[yypt-1 : yypt+1]
//line query_string.y:82
//line query_string.y:82
{
logDebugGrammar("MINUS")
yyVAL.n = queryMustNot
}
case 8:
yyDollar = yyS[yypt-1 : yypt+1]
//line query_string.y:88
//line query_string.y:88
{
str := yyDollar[1].s
logDebugGrammar("STRING - %s", str)
Expand All @@ -548,7 +547,7 @@ yydefault:
}
case 9:
yyDollar = yyS[yypt-2 : yypt+1]
//line query_string.y:102
//line query_string.y:102
{
str := yyDollar[1].s
fuzziness, err := strconv.ParseFloat(yyDollar[2].s, 64)
Expand All @@ -562,7 +561,7 @@ yydefault:
}
case 10:
yyDollar = yyS[yypt-4 : yypt+1]
//line query_string.y:114
//line query_string.y:114
{
field := yyDollar[1].s
str := yyDollar[3].s
Expand All @@ -578,7 +577,7 @@ yydefault:
}
case 11:
yyDollar = yyS[yypt-1 : yypt+1]
//line query_string.y:128
//line query_string.y:128
{
str := yyDollar[1].s
logDebugGrammar("STRING - %s", str)
Expand All @@ -595,7 +594,7 @@ yydefault:
}
case 12:
yyDollar = yyS[yypt-1 : yypt+1]
//line query_string.y:143
//line query_string.y:143
{
phrase := yyDollar[1].s
logDebugGrammar("PHRASE - %s", phrase)
Expand All @@ -604,7 +603,7 @@ yydefault:
}
case 13:
yyDollar = yyS[yypt-3 : yypt+1]
//line query_string.y:150
//line query_string.y:150
{
field := yyDollar[1].s
str := yyDollar[3].s
Expand All @@ -622,7 +621,7 @@ yydefault:
}
case 14:
yyDollar = yyS[yypt-3 : yypt+1]
//line query_string.y:166
//line query_string.y:166
{
field := yyDollar[1].s
str := yyDollar[3].s
Expand All @@ -642,18 +641,23 @@ yydefault:
}
case 15:
yyDollar = yyS[yypt-3 : yypt+1]
//line query_string.y:184
//line query_string.y:184
{
field := yyDollar[1].s
phrase := yyDollar[3].s
logDebugGrammar("FIELD - %s PHRASE - %s", field, phrase)
q := NewMatchPhraseQuery(phrase)
var q FieldableQuery
if isIPRange(phrase) {
q = NewIPRangeQuery(phrase)
} else {
q = NewMatchPhraseQuery(phrase)
}
q.SetField(field)
yyVAL.q = q
}
case 16:
yyDollar = yyS[yypt-4 : yypt+1]
//line query_string.y:193
//line query_string.y:198
{
field := yyDollar[1].s
min, err := strconv.ParseFloat(yyDollar[4].s, 64)
Expand All @@ -668,7 +672,7 @@ yydefault:
}
case 17:
yyDollar = yyS[yypt-5 : yypt+1]
//line query_string.y:206
//line query_string.y:211
{
field := yyDollar[1].s
min, err := strconv.ParseFloat(yyDollar[5].s, 64)
Expand All @@ -683,7 +687,7 @@ yydefault:
}
case 18:
yyDollar = yyS[yypt-4 : yypt+1]
//line query_string.y:219
//line query_string.y:224
{
field := yyDollar[1].s
max, err := strconv.ParseFloat(yyDollar[4].s, 64)
Expand All @@ -698,7 +702,7 @@ yydefault:
}
case 19:
yyDollar = yyS[yypt-5 : yypt+1]
//line query_string.y:232
//line query_string.y:237
{
field := yyDollar[1].s
max, err := strconv.ParseFloat(yyDollar[5].s, 64)
Expand All @@ -713,7 +717,7 @@ yydefault:
}
case 20:
yyDollar = yyS[yypt-4 : yypt+1]
//line query_string.y:245
//line query_string.y:250
{
field := yyDollar[1].s
minInclusive := false
Expand All @@ -730,7 +734,7 @@ yydefault:
}
case 21:
yyDollar = yyS[yypt-5 : yypt+1]
//line query_string.y:260
//line query_string.y:265
{
field := yyDollar[1].s
minInclusive := true
Expand All @@ -747,7 +751,7 @@ yydefault:
}
case 22:
yyDollar = yyS[yypt-4 : yypt+1]
//line query_string.y:275
//line query_string.y:280
{
field := yyDollar[1].s
maxInclusive := false
Expand All @@ -764,7 +768,7 @@ yydefault:
}
case 23:
yyDollar = yyS[yypt-5 : yypt+1]
//line query_string.y:290
//line query_string.y:295
{
field := yyDollar[1].s
maxInclusive := true
Expand All @@ -781,13 +785,13 @@ yydefault:
}
case 24:
yyDollar = yyS[yypt-0 : yypt+1]
//line query_string.y:306
//line query_string.y:311
{
yyVAL.pf = nil
}
case 25:
yyDollar = yyS[yypt-1 : yypt+1]
//line query_string.y:310
//line query_string.y:315
{
yyVAL.pf = nil
boost, err := strconv.ParseFloat(yyDollar[1].s, 64)
Expand All @@ -800,13 +804,13 @@ yydefault:
}
case 26:
yyDollar = yyS[yypt-1 : yypt+1]
//line query_string.y:322
//line query_string.y:327
{
yyVAL.s = yyDollar[1].s
}
case 27:
yyDollar = yyS[yypt-2 : yypt+1]
//line query_string.y:326
//line query_string.y:331
{
yyVAL.s = "-" + yyDollar[2].s
}
Expand Down
28 changes: 28 additions & 0 deletions search/query/query_string_parser_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -214,6 +214,34 @@ func TestQuerySyntaxParserValid(t *testing.T) {
nil,
nil),
},
{
input: `+hostIP:"192.168.1.1"`,
mapping: mapping.NewIndexMapping(),
result: NewBooleanQueryForQueryString(
[]Query{
func() Query {
q := NewIPRangeQuery("192.168.1.1")
q.SetField("hostIP")
return q
}(),
},
nil,
nil),
},
{
input: `+hostIP:"192.168.1.1/24"`,
mapping: mapping.NewIndexMapping(),
result: NewBooleanQueryForQueryString(
[]Query{
func() Query {
q := NewIPRangeQuery("192.168.1.1/24")
q.SetField("hostIP")
return q
}(),
},
nil,
nil),
},
{
input: `-field5:"test phrase 2"`,
mapping: mapping.NewIndexMapping(),
Expand Down

0 comments on commit c8a1b8b

Please sign in to comment.