parent
2f607d73f3
commit
afbda14dc2
@ -75,15 +75,54 @@ func (dm *DocumentMapping) validate(cache *registry.Cache) error {
|
|||||||
return nil
|
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 {
|
func (dm *DocumentMapping) documentMappingForPath(path string) *DocumentMapping {
|
||||||
pathElements := decodePath(path)
|
pathElements := decodePath(path)
|
||||||
current := dm
|
current := dm
|
||||||
|
OUTER:
|
||||||
for _, pathElement := range pathElements {
|
for _, pathElement := range pathElements {
|
||||||
var ok bool
|
for name, subDocMapping := range current.Properties {
|
||||||
current, ok = current.Properties[pathElement]
|
for _, field := range subDocMapping.Fields {
|
||||||
if !ok {
|
if field.Name == "" && name == pathElement {
|
||||||
return nil
|
current = subDocMapping
|
||||||
|
continue OUTER
|
||||||
|
} else if field.Name == pathElement {
|
||||||
|
current = subDocMapping
|
||||||
|
continue OUTER
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
return nil
|
||||||
}
|
}
|
||||||
return current
|
return current
|
||||||
}
|
}
|
||||||
|
@ -384,13 +384,9 @@ func (im *IndexMapping) newWalkContext(doc *document.Document, dm *DocumentMappi
|
|||||||
func (im *IndexMapping) analyzerNameForPath(path string) string {
|
func (im *IndexMapping) analyzerNameForPath(path string) string {
|
||||||
// first we look for explicit mapping on the field
|
// first we look for explicit mapping on the field
|
||||||
for _, docMapping := range im.TypeMapping {
|
for _, docMapping := range im.TypeMapping {
|
||||||
pathMapping := docMapping.documentMappingForPath(path)
|
analyzerName := docMapping.analyzerNameForPath(path)
|
||||||
if pathMapping != nil {
|
if analyzerName != "" {
|
||||||
if len(pathMapping.Fields) > 0 {
|
return analyzerName
|
||||||
if pathMapping.Fields[0].Analyzer != "" {
|
|
||||||
return pathMapping.Fields[0].Analyzer
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
// now try the default mapping
|
// now try the default mapping
|
||||||
|
@ -215,3 +215,32 @@ func TestMappingJSONWithNull(t *testing.T) {
|
|||||||
t.Errorf("expected to find 1 find, found %d", count)
|
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