func bleveQueryFromExpr(expr query.Expr) (bleve.Query, error) { if e, ok := expr.(*query.FieldExpr); ok { return bleve.NewPhraseQuery([]string{e.Term}, e.Field), nil } else if e, ok := expr.(*query.BinaryExpr); ok { lhs, err := bleveQueryFromExpr(e.LHS) if err != nil { return nil, err } rhs, err := bleveQueryFromExpr(e.RHS) if err != nil { return nil, err } if e.Op == query.AND { return bleve.NewConjunctionQuery([]bleve.Query{lhs, rhs}), nil } else if e.Op == query.OR { return bleve.NewDisjunctionQuery([]bleve.Query{lhs, rhs}), nil } } return nil, nil }
func Test_bleveQueryFromExpr(t *testing.T) { tests := []struct { expr query.Expr query bleve.Query }{ { &query.FieldExpr{Field: "SearchField", Term: "theTerm"}, bleve.NewPhraseQuery([]string{"theTerm"}, "SearchField"), }, } for _, tt := range tests { q, err := bleveQueryFromExpr(tt.expr) if err != nil { t.Fatalf("error transforming Ekanite query to bleve query: %s", err.Error()) } if !reflect.DeepEqual(tt.query, q) { t.Fatalf("bleve query is not correct, exp: %v, got: %v", tt.query, q) } } }