Class InstantiatingObjectParser.Builder<Value,Context>

java.lang.Object
org.elasticsearch.xcontent.AbstractObjectParser<Value,Context>
org.elasticsearch.xcontent.InstantiatingObjectParser.Builder<Value,Context>
Enclosing class:
InstantiatingObjectParser<Value,Context>

public static class InstantiatingObjectParser.Builder<Value,Context> extends AbstractObjectParser<Value,Context>
  • Constructor Details

  • Method Details

    • build

    • declareField

      public <T> void declareField(BiConsumer<Value,T> consumer, ContextParser<Context,T> parser, ParseField parseField, ObjectParser.ValueType type)
      Description copied from class: AbstractObjectParser
      Specified by:
      declareField in class AbstractObjectParser<Value,Context>
    • declareNamedObject

      public <T> void declareNamedObject(BiConsumer<Value,T> consumer, ObjectParser.NamedObjectParser<T,Context> namedObjectParser, ParseField parseField)
      Description copied from class: AbstractObjectParser
      Declares a single named object.
       
       {
         "object_name": {
           "instance_name": { "field1": "value1", ... }
           }
         }
       }
       
       
      Specified by:
      declareNamedObject in class AbstractObjectParser<Value,Context>
      Parameters:
      consumer - sets the value once it has been parsed
      namedObjectParser - parses the named object
      parseField - the field to parse
    • declareNamedObjects

      public <T> void declareNamedObjects(BiConsumer<Value,List<T>> consumer, ObjectParser.NamedObjectParser<T,Context> namedObjectParser, ParseField parseField)
      Description copied from class: AbstractObjectParser
      Declares named objects in the style of aggregations. These are named inside and object like this:
       
       {
         "aggregations": {
           "name_1": { "aggregation_type": {} },
           "name_2": { "aggregation_type": {} },
           "name_3": { "aggregation_type": {} }
           }
         }
       }
       
       
      Unlike the other version of this method, "ordered" mode (arrays of objects) is not supported. See NamedObjectHolder in ObjectParserTests for examples of how to invoke this.
      Specified by:
      declareNamedObjects in class AbstractObjectParser<Value,Context>
      Parameters:
      consumer - sets the values once they have been parsed
      namedObjectParser - parses each named object
      parseField - the field to parse
    • declareNamedObjects

      public <T> void declareNamedObjects(BiConsumer<Value,List<T>> consumer, ObjectParser.NamedObjectParser<T,Context> namedObjectParser, Consumer<Value> orderedModeCallback, ParseField parseField)
      Description copied from class: AbstractObjectParser
      Declares named objects in the style of highlighting's field element. These are usually named inside and object like this:
       
       {
         "highlight": {
           "fields": {        <------ this one
             "title": {},
             "body": {},
             "category": {}
           }
         }
       }
       
       
      but, when order is important, some may be written this way:
       
       {
         "highlight": {
           "fields": [        <------ this one
             {"title": {}},
             {"body": {}},
             {"category": {}}
           ]
         }
       }
       
       
      This is because json doesn't enforce ordering. Elasticsearch reads it in the order sent but tools that generate json are free to put object members in an unordered Map, jumbling them. Thus, if you care about order you can send the object in the second way. See NamedObjectHolder in ObjectParserTests for examples of how to invoke this.
      Specified by:
      declareNamedObjects in class AbstractObjectParser<Value,Context>
      Parameters:
      consumer - sets the values once they have been parsed
      namedObjectParser - parses each named object
      orderedModeCallback - called when the named object is parsed using the "ordered" mode (the array of objects)
      parseField - the field to parse
    • getName

      public String getName()
      Specified by:
      getName in class AbstractObjectParser<Value,Context>
    • declareRequiredFieldSet

      public void declareRequiredFieldSet(String... requiredSet)
      Description copied from class: AbstractObjectParser
      Declares a set of fields that are required for parsing to succeed. Only one of the values provided per String[] must be matched. E.g. declareRequiredFieldSet("foo", "bar"); means at least one of "foo" or "bar" fields must be present. If neither of those fields are present, an exception will be thrown. Multiple required sets can be configured:
      
         parser.declareRequiredFieldSet("foo", "bar");
         parser.declareRequiredFieldSet("bizz", "buzz");
       
      requires that one of "foo" or "bar" fields are present, and also that one of "bizz" or "buzz" fields are present. In JSON, it means any of these combinations are acceptable:
      • {"foo":"...", "bizz": "..."}
      • {"bar":"...", "bizz": "..."}
      • {"foo":"...", "buzz": "..."}
      • {"bar":"...", "buzz": "..."}
      • {"foo":"...", "bar":"...", "bizz": "..."}
      • {"foo":"...", "bar":"...", "buzz": "..."}
      • {"foo":"...", "bizz":"...", "buzz": "..."}
      • {"bar":"...", "bizz":"...", "buzz": "..."}
      • {"foo":"...", "bar":"...", "bizz": "...", "buzz": "..."}
      The following would however be rejected:
      failure cases
      Provided JSONReason for failure
      {"foo":"..."}Missing "bizz" or "buzz" field
      {"bar":"..."}Missing "bizz" or "buzz" field
      {"bizz": "..."}Missing "foo" or "bar" field
      {"buzz": "..."}Missing "foo" or "bar" field
      {"foo":"...", "bar": "..."}Missing "bizz" or "buzz" field
      {"bizz":"...", "buzz": "..."}Missing "foo" or "bar" field
      {"unrelated":"..."} Missing "foo" or "bar" field, and missing "bizz" or "buzz" field
      Specified by:
      declareRequiredFieldSet in class AbstractObjectParser<Value,Context>
      Parameters:
      requiredSet - A set of required fields, where at least one of the fields in the array _must_ be present
    • declareExclusiveFieldSet

      public void declareExclusiveFieldSet(String... exclusiveSet)
      Description copied from class: AbstractObjectParser
      Declares a set of fields of which at most one must appear for parsing to succeed E.g. declareExclusiveFieldSet("foo", "bar"); means that only one of 'foo' or 'bar' must be present, and if both appear then an exception will be thrown. Note that this does not make 'foo' or 'bar' required - see AbstractObjectParser.declareRequiredFieldSet(String...) for required fields. Multiple exclusive sets may be declared
      Specified by:
      declareExclusiveFieldSet in class AbstractObjectParser<Value,Context>
      Parameters:
      exclusiveSet - a set of field names, at most one of which must appear