Merge pull request #141 from sacheendra/customanalyzer
adds handling of []string type attributes to custom analyzer
This commit is contained in:
commit
07453af0e4
@ -20,20 +20,24 @@ const Name = "custom"
|
|||||||
|
|
||||||
func AnalyzerConstructor(config map[string]interface{}, cache *registry.Cache) (*analysis.Analyzer, error) {
|
func AnalyzerConstructor(config map[string]interface{}, cache *registry.Cache) (*analysis.Analyzer, error) {
|
||||||
|
|
||||||
|
var err error
|
||||||
var charFilters []analysis.CharFilter
|
var charFilters []analysis.CharFilter
|
||||||
charFilterNames, ok := config["char_filters"].([]interface{})
|
charFiltersNames, ok := config["char_filters"].([]string)
|
||||||
if ok {
|
if ok {
|
||||||
charFilters = make([]analysis.CharFilter, len(charFilterNames))
|
charFilters, err = getCharFilters(charFiltersNames, cache)
|
||||||
for i, charFilterName := range charFilterNames {
|
if err != nil {
|
||||||
charFilterNameString, ok := charFilterName.(string)
|
return nil, err
|
||||||
if ok {
|
}
|
||||||
charFilter, err := cache.CharFilterNamed(charFilterNameString)
|
} else {
|
||||||
if err != nil {
|
charFiltersNamesInterfaceSlice, ok := config["char_filters"].([]interface{})
|
||||||
return nil, err
|
if ok {
|
||||||
}
|
charFiltersNames, err := convertInterfaceSliceToStringSlice(charFiltersNamesInterfaceSlice, "char filter")
|
||||||
charFilters[i] = charFilter
|
if err != nil {
|
||||||
} else {
|
return nil, err
|
||||||
return nil, fmt.Errorf("char filter name must be a string")
|
}
|
||||||
|
charFilters, err = getCharFilters(charFiltersNames, cache)
|
||||||
|
if err != nil {
|
||||||
|
return nil, err
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -49,19 +53,22 @@ func AnalyzerConstructor(config map[string]interface{}, cache *registry.Cache) (
|
|||||||
}
|
}
|
||||||
|
|
||||||
var tokenFilters []analysis.TokenFilter
|
var tokenFilters []analysis.TokenFilter
|
||||||
tokenFilterNames, ok := config["token_filters"].([]interface{})
|
tokenFiltersNames, ok := config["token_filters"].([]string)
|
||||||
if ok {
|
if ok {
|
||||||
tokenFilters = make([]analysis.TokenFilter, len(tokenFilterNames))
|
tokenFilters, err = getTokenFilters(tokenFiltersNames, cache)
|
||||||
for i, tokenFilterName := range tokenFilterNames {
|
if err != nil {
|
||||||
tokenFilterNameString, ok := tokenFilterName.(string)
|
return nil, err
|
||||||
if ok {
|
}
|
||||||
tokenFilter, err := cache.TokenFilterNamed(tokenFilterNameString)
|
} else {
|
||||||
if err != nil {
|
tokenFiltersNamesInterfaceSlice, ok := config["token_filters"].([]interface{})
|
||||||
return nil, err
|
if ok {
|
||||||
}
|
tokenFiltersNames, err := convertInterfaceSliceToStringSlice(tokenFiltersNamesInterfaceSlice, "token filter")
|
||||||
tokenFilters[i] = tokenFilter
|
if err != nil {
|
||||||
} else {
|
return nil, err
|
||||||
return nil, fmt.Errorf("token filter name must be a string")
|
}
|
||||||
|
tokenFilters, err = getTokenFilters(tokenFiltersNames, cache)
|
||||||
|
if err != nil {
|
||||||
|
return nil, err
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -81,3 +88,43 @@ func AnalyzerConstructor(config map[string]interface{}, cache *registry.Cache) (
|
|||||||
func init() {
|
func init() {
|
||||||
registry.RegisterAnalyzer(Name, AnalyzerConstructor)
|
registry.RegisterAnalyzer(Name, AnalyzerConstructor)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func getCharFilters(charFilterNames []string, cache *registry.Cache) ([]analysis.CharFilter, error) {
|
||||||
|
charFilters := make([]analysis.CharFilter, len(charFilterNames))
|
||||||
|
for i, charFilterName := range charFilterNames {
|
||||||
|
charFilter, err := cache.CharFilterNamed(charFilterName)
|
||||||
|
if err != nil {
|
||||||
|
return nil, err
|
||||||
|
}
|
||||||
|
charFilters[i] = charFilter
|
||||||
|
}
|
||||||
|
|
||||||
|
return charFilters, nil
|
||||||
|
}
|
||||||
|
|
||||||
|
func getTokenFilters(tokenFilterNames []string, cache *registry.Cache) ([]analysis.TokenFilter, error) {
|
||||||
|
tokenFilters := make([]analysis.TokenFilter, len(tokenFilterNames))
|
||||||
|
for i, tokenFilterName := range tokenFilterNames {
|
||||||
|
tokenFilter, err := cache.TokenFilterNamed(tokenFilterName)
|
||||||
|
if err != nil {
|
||||||
|
return nil, err
|
||||||
|
}
|
||||||
|
tokenFilters[i] = tokenFilter
|
||||||
|
}
|
||||||
|
|
||||||
|
return tokenFilters, nil
|
||||||
|
}
|
||||||
|
|
||||||
|
func convertInterfaceSliceToStringSlice(interfaceSlice []interface{}, objType string) ([]string, error) {
|
||||||
|
stringSlice := make([]string, len(interfaceSlice))
|
||||||
|
for i, interfaceObj := range interfaceSlice {
|
||||||
|
stringObj, ok := interfaceObj.(string)
|
||||||
|
if ok {
|
||||||
|
stringSlice[i] = stringObj
|
||||||
|
} else {
|
||||||
|
return nil, fmt.Errorf(objType + " name must be a string")
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return stringSlice, nil
|
||||||
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user