     private static let DECAY = "decay"
     private static let MULTI_VALUE_MODE = "multi_value_mode"
     
-    public var name: String
-    public var field: String
-    
-    public var multiValueMode:  MultiValueMode = .MIN
-    
-    public var origin: String
-    public var scale: String
-    public var offset: String
-    public var decay: Decimal
-    
-    public init(type: DecayScoreFunctionType, field: String, origin: String, scale: String, offset: String, decay: Decimal, isMultiValue: Bool, multiValueMode: MultiValueMode) {
+    public let name: String
+    public let field: String
+    
+    public let multiValueMode:  MultiValueMode?
+    
+    public let origin: String
+    public let scale: String
+    public let offset: String?
+    public let decay: Decimal?
+    
+    public init(type: DecayScoreFunctionType, field: String, origin: String, scale: String, offset: String? = nil, decay: Decimal? = nil, multiValueMode: MultiValueMode?) {
         self.name = type.rawValue
         self.field = field
         self.origin = origin
         self.scale = scale
         self.offset = offset
         self.decay = decay
+        self.multiValueMode = multiValueMode
     }
     
     public func toDic() -> [String : Any] {

    }
}

public class RandomScoreFunction: ScoreFunction {
    
    private static let SEED = "seed"

        return FieldValueFactorFunctionBuilder()
    }
    
}

// MARK:- ScoreFunctionBuilder Protocol

public protocol ScoreFunctionBuilder {
    
