parent
2f607d73f3
commit
afbda14dc2
@ -75,15 +75,54 @@ func (dm *DocumentMapping) validate(cache *registry.Cache) error {
|
||||
return nil
|
||||
}
|
||||
|
||||
func (dm *DocumentMapping) analyzerNameForPath(path string) string {
|
||||
pathElements := decodePath(path)
|
||||
last := false
|
||||
current := dm
|
||||
OUTER:
|
||||
for i, pathElement := range pathElements {
|
||||
if i == len(pathElements)-1 {
|
||||
last = true
|
||||
}
|
||||
for name, subDocMapping := range current.Properties {
|
||||
for _, field := range subDocMapping.Fields {
|
||||
if field.Name == "" && name == pathElement {
|
||||
if last {
|
||||
return field.Analyzer
|
||||
}
|
||||
current = subDocMapping
|
||||
continue OUTER
|
||||
} else if field.Name == pathElement {
|
||||
if last {
|
||||
return field.Analyzer
|
||||
}
|
||||
current = subDocMapping
|
||||
continue OUTER
|
||||
}
|
||||
}
|
||||
}
|
||||
return ""
|
||||
}
|
||||
return ""
|
||||
}
|
||||
|
||||
func (dm *DocumentMapping) documentMappingForPath(path string) *DocumentMapping {
|
||||
pathElements := decodePath(path)
|
||||
current := dm
|
||||
OUTER:
|
||||
for _, pathElement := range pathElements {
|
||||
var ok bool
|
||||
current, ok = current.Properties[pathElement]
|
||||
if !ok {
|
||||
return nil
|
||||
for name, subDocMapping := range current.Properties {
|
||||
for _, field := range subDocMapping.Fields {
|
||||
if field.Name == "" && name == pathElement {
|
||||
current = subDocMapping
|
||||
continue OUTER
|
||||
} else if field.Name == pathElement {
|
||||
current = subDocMapping
|
||||
continue OUTER
|
||||
}
|
||||
}
|
||||
}
|
||||
return nil
|
||||
}
|
||||
return current
|
||||
}
|
||||
|
@ -384,13 +384,9 @@ func (im *IndexMapping) newWalkContext(doc *document.Document, dm *DocumentMappi
|
||||
func (im *IndexMapping) analyzerNameForPath(path string) string {
|
||||
// first we look for explicit mapping on the field
|
||||
for _, docMapping := range im.TypeMapping {
|
||||
pathMapping := docMapping.documentMappingForPath(path)
|
||||
if pathMapping != nil {
|
||||
if len(pathMapping.Fields) > 0 {
|
||||
if pathMapping.Fields[0].Analyzer != "" {
|
||||
return pathMapping.Fields[0].Analyzer
|
||||
}
|
||||
}
|
||||
analyzerName := docMapping.analyzerNameForPath(path)
|
||||
if analyzerName != "" {
|
||||
return analyzerName
|
||||
}
|
||||
}
|
||||
// now try the default mapping
|
||||
|
@ -215,3 +215,32 @@ func TestMappingJSONWithNull(t *testing.T) {
|
||||
t.Errorf("expected to find 1 find, found %d", count)
|
||||
}
|
||||
}
|
||||
|
||||
func TestMappingForPath(t *testing.T) {
|
||||
|
||||
enFieldMapping := NewTextFieldMapping()
|
||||
enFieldMapping.Analyzer = "en"
|
||||
|
||||
docMappingA := NewDocumentMapping()
|
||||
docMappingA.AddFieldMappingsAt("name", enFieldMapping)
|
||||
|
||||
customMapping := NewTextFieldMapping()
|
||||
customMapping.Analyzer = "xyz"
|
||||
customMapping.Name = "nameCustom"
|
||||
|
||||
docMappingA.AddFieldMappingsAt("author", enFieldMapping, customMapping)
|
||||
|
||||
mapping := NewIndexMapping()
|
||||
mapping.AddDocumentMapping("a", docMappingA)
|
||||
|
||||
analyzerName := mapping.analyzerNameForPath("name")
|
||||
if analyzerName != enFieldMapping.Analyzer {
|
||||
t.Errorf("expected '%s' got '%s'", enFieldMapping.Analyzer, analyzerName)
|
||||
}
|
||||
|
||||
analyzerName = mapping.analyzerNameForPath("nameCustom")
|
||||
if analyzerName != customMapping.Analyzer {
|
||||
t.Errorf("expected '%s' got '%s'", customMapping.Analyzer, analyzerName)
|
||||
}
|
||||
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user