示例#1
0
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
}
示例#2
0
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)
		}
	}
}