add support for toggling Store/Index Dynamic in IndexMapping
This commit is contained in:
parent
d7292ed891
commit
57919a77f5
@ -363,11 +363,11 @@ func (dm *DocumentMapping) processProperty(property interface{}, path []string,
|
||||
parsedDateTime, err := dateTimeParser.ParseDateTime(propertyValueString)
|
||||
if err != nil {
|
||||
// index as text
|
||||
fieldMapping := newTextFieldMappingDynamic()
|
||||
fieldMapping := newTextFieldMappingDynamic(context.im)
|
||||
fieldMapping.processString(propertyValueString, pathString, path, indexes, context)
|
||||
} else {
|
||||
// index as datetime
|
||||
fieldMapping := newDateTimeFieldMappingDynamic()
|
||||
fieldMapping := newDateTimeFieldMappingDynamic(context.im)
|
||||
fieldMapping.processTime(parsedDateTime, pathString, path, indexes, context)
|
||||
}
|
||||
}
|
||||
@ -387,7 +387,7 @@ func (dm *DocumentMapping) processProperty(property interface{}, path []string,
|
||||
}
|
||||
} else if dm.Dynamic {
|
||||
// automatic indexing behavior
|
||||
fieldMapping := newNumericFieldMappingDynamic()
|
||||
fieldMapping := newNumericFieldMappingDynamic(context.im)
|
||||
fieldMapping.processFloat64(propertyValFloat, pathString, path, indexes, context)
|
||||
}
|
||||
case reflect.Bool:
|
||||
@ -399,7 +399,7 @@ func (dm *DocumentMapping) processProperty(property interface{}, path []string,
|
||||
}
|
||||
} else if dm.Dynamic {
|
||||
// automatic indexing behavior
|
||||
fieldMapping := newBooleanFieldMappingDynamic()
|
||||
fieldMapping := newBooleanFieldMappingDynamic(context.im)
|
||||
fieldMapping.processBoolean(propertyValBool, pathString, path, indexes, context)
|
||||
}
|
||||
case reflect.Struct:
|
||||
@ -412,7 +412,7 @@ func (dm *DocumentMapping) processProperty(property interface{}, path []string,
|
||||
fieldMapping.processTime(property, pathString, path, indexes, context)
|
||||
}
|
||||
} else if dm.Dynamic {
|
||||
fieldMapping := newDateTimeFieldMappingDynamic()
|
||||
fieldMapping := newDateTimeFieldMappingDynamic(context.im)
|
||||
fieldMapping.processTime(property, pathString, path, indexes, context)
|
||||
}
|
||||
default:
|
||||
|
@ -61,10 +61,10 @@ func NewTextFieldMapping() *FieldMapping {
|
||||
}
|
||||
}
|
||||
|
||||
func newTextFieldMappingDynamic() *FieldMapping {
|
||||
func newTextFieldMappingDynamic(im *IndexMapping) *FieldMapping {
|
||||
rv := NewTextFieldMapping()
|
||||
rv.Store = StoreDynamic
|
||||
rv.Index = IndexDynamic
|
||||
rv.Store = im.StoreDynamic
|
||||
rv.Index = im.IndexDynamic
|
||||
return rv
|
||||
}
|
||||
|
||||
@ -78,10 +78,10 @@ func NewNumericFieldMapping() *FieldMapping {
|
||||
}
|
||||
}
|
||||
|
||||
func newNumericFieldMappingDynamic() *FieldMapping {
|
||||
func newNumericFieldMappingDynamic(im *IndexMapping) *FieldMapping {
|
||||
rv := NewNumericFieldMapping()
|
||||
rv.Store = StoreDynamic
|
||||
rv.Index = IndexDynamic
|
||||
rv.Store = im.StoreDynamic
|
||||
rv.Index = im.IndexDynamic
|
||||
return rv
|
||||
}
|
||||
|
||||
@ -95,10 +95,10 @@ func NewDateTimeFieldMapping() *FieldMapping {
|
||||
}
|
||||
}
|
||||
|
||||
func newDateTimeFieldMappingDynamic() *FieldMapping {
|
||||
func newDateTimeFieldMappingDynamic(im *IndexMapping) *FieldMapping {
|
||||
rv := NewDateTimeFieldMapping()
|
||||
rv.Store = StoreDynamic
|
||||
rv.Index = IndexDynamic
|
||||
rv.Store = im.StoreDynamic
|
||||
rv.Index = im.IndexDynamic
|
||||
return rv
|
||||
}
|
||||
|
||||
@ -112,10 +112,10 @@ func NewBooleanFieldMapping() *FieldMapping {
|
||||
}
|
||||
}
|
||||
|
||||
func newBooleanFieldMappingDynamic() *FieldMapping {
|
||||
func newBooleanFieldMappingDynamic(im *IndexMapping) *FieldMapping {
|
||||
rv := NewBooleanFieldMapping()
|
||||
rv.Store = StoreDynamic
|
||||
rv.Index = IndexDynamic
|
||||
rv.Store = im.StoreDynamic
|
||||
rv.Index = im.IndexDynamic
|
||||
return rv
|
||||
}
|
||||
|
||||
|
@ -130,6 +130,8 @@ type IndexMapping struct {
|
||||
DefaultDateTimeParser string `json:"default_datetime_parser"`
|
||||
DefaultField string `json:"default_field"`
|
||||
ByteArrayConverter string `json:"byte_array_converter"`
|
||||
StoreDynamic bool `json:"store_dynamic"`
|
||||
IndexDynamic bool `json:"index_dynamic"`
|
||||
CustomAnalysis *customAnalysis `json:"analysis,omitempty"`
|
||||
cache *registry.Cache
|
||||
}
|
||||
@ -233,6 +235,8 @@ func NewIndexMapping() *IndexMapping {
|
||||
DefaultDateTimeParser: defaultDateTimeParser,
|
||||
DefaultField: defaultField,
|
||||
ByteArrayConverter: defaultByteArrayConverter,
|
||||
IndexDynamic: IndexDynamic,
|
||||
StoreDynamic: StoreDynamic,
|
||||
CustomAnalysis: newCustomAnalysis(),
|
||||
cache: registry.NewCache(),
|
||||
}
|
||||
@ -295,6 +299,8 @@ func (im *IndexMapping) UnmarshalJSON(data []byte) error {
|
||||
im.ByteArrayConverter = defaultByteArrayConverter
|
||||
im.DefaultMapping = NewDocumentMapping()
|
||||
im.TypeMapping = make(map[string]*DocumentMapping)
|
||||
im.StoreDynamic = StoreDynamic
|
||||
im.IndexDynamic = IndexDynamic
|
||||
|
||||
var invalidKeys []string
|
||||
for k, v := range tmp {
|
||||
@ -344,6 +350,16 @@ func (im *IndexMapping) UnmarshalJSON(data []byte) error {
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
case "store_dynamic":
|
||||
err := json.Unmarshal(v, &im.StoreDynamic)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
case "index_dynamic":
|
||||
err := json.Unmarshal(v, &im.IndexDynamic)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
default:
|
||||
invalidKeys = append(invalidKeys, k)
|
||||
}
|
||||
|
@ -339,6 +339,7 @@ func TestMappingWithTokenizerDeps(t *testing.T) {
|
||||
|
||||
func TestEnablingDisablingStoringDynamicFields(t *testing.T) {
|
||||
|
||||
// first verify that with system defaults, dynamic field is stored
|
||||
data := map[string]interface{}{
|
||||
"name": "bleve",
|
||||
}
|
||||
@ -354,11 +355,13 @@ func TestEnablingDisablingStoringDynamicFields(t *testing.T) {
|
||||
}
|
||||
}
|
||||
|
||||
// now change system level defaults, verify dynamic field is not stored
|
||||
StoreDynamic = false
|
||||
defer func() {
|
||||
StoreDynamic = true
|
||||
}()
|
||||
|
||||
mapping = NewIndexMapping()
|
||||
doc = document.NewDocument("y")
|
||||
err = mapping.mapDocument(doc, data)
|
||||
if err != nil {
|
||||
@ -369,6 +372,20 @@ func TestEnablingDisablingStoringDynamicFields(t *testing.T) {
|
||||
t.Errorf("expected field 'name' to be not stored, is")
|
||||
}
|
||||
}
|
||||
|
||||
// now override the system level defaults inside the index mapping
|
||||
mapping = NewIndexMapping()
|
||||
mapping.StoreDynamic = true
|
||||
doc = document.NewDocument("y")
|
||||
err = mapping.mapDocument(doc, data)
|
||||
if err != nil {
|
||||
t.Fatal(err)
|
||||
}
|
||||
for _, field := range doc.Fields {
|
||||
if field.Name() == "name" && !field.Options().IsStored() {
|
||||
t.Errorf("expected field 'name' to be stored, isn't")
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
func TestMappingBool(t *testing.T) {
|
||||
|
Loading…
Reference in New Issue
Block a user