summaryrefslogtreecommitdiffstats
path: root/vendor/github.com/blevesearch/bleve/mapping/document.go
diff options
context:
space:
mode:
Diffstat (limited to 'vendor/github.com/blevesearch/bleve/mapping/document.go')
-rw-r--r--vendor/github.com/blevesearch/bleve/mapping/document.go51
1 files changed, 50 insertions, 1 deletions
diff --git a/vendor/github.com/blevesearch/bleve/mapping/document.go b/vendor/github.com/blevesearch/bleve/mapping/document.go
index 54bf61b677..d62675e52a 100644
--- a/vendor/github.com/blevesearch/bleve/mapping/document.go
+++ b/vendor/github.com/blevesearch/bleve/mapping/document.go
@@ -15,6 +15,7 @@
package mapping
import (
+ "encoding"
"encoding/json"
"fmt"
"reflect"
@@ -75,7 +76,7 @@ func (dm *DocumentMapping) Validate(cache *registry.Cache) error {
}
}
switch field.Type {
- case "text", "datetime", "number", "boolean":
+ case "text", "datetime", "number", "boolean", "geopoint":
default:
return fmt.Errorf("unknown field type: '%s'", field.Type)
}
@@ -481,9 +482,57 @@ func (dm *DocumentMapping) processProperty(property interface{}, path []string,
fieldMapping := newDateTimeFieldMappingDynamic(context.im)
fieldMapping.processTime(property, pathString, path, indexes, context)
}
+ case encoding.TextMarshaler:
+ txt, err := property.MarshalText()
+ if err == nil && subDocMapping != nil {
+ // index by explicit mapping
+ for _, fieldMapping := range subDocMapping.Fields {
+ if fieldMapping.Type == "text" {
+ fieldMapping.processString(string(txt), pathString, path, indexes, context)
+ }
+ }
+ }
+ dm.walkDocument(property, path, indexes, context)
default:
+ if subDocMapping != nil {
+ for _, fieldMapping := range subDocMapping.Fields {
+ if fieldMapping.Type == "geopoint" {
+ fieldMapping.processGeoPoint(property, pathString, path, indexes, context)
+ }
+ }
+ }
dm.walkDocument(property, path, indexes, context)
}
+ case reflect.Map:
+ if subDocMapping != nil {
+ for _, fieldMapping := range subDocMapping.Fields {
+ if fieldMapping.Type == "geopoint" {
+ fieldMapping.processGeoPoint(property, pathString, path, indexes, context)
+ }
+ }
+ }
+ dm.walkDocument(property, path, indexes, context)
+ case reflect.Ptr:
+ if !propertyValue.IsNil() {
+ switch property := property.(type) {
+ case encoding.TextMarshaler:
+
+ txt, err := property.MarshalText()
+ if err == nil && subDocMapping != nil {
+ // index by explicit mapping
+ for _, fieldMapping := range subDocMapping.Fields {
+ if fieldMapping.Type == "text" {
+ fieldMapping.processString(string(txt), pathString, path, indexes, context)
+ }
+ }
+ } else {
+ dm.walkDocument(property, path, indexes, context)
+ }
+
+ default:
+ dm.walkDocument(property, path, indexes, context)
+ }
+ }
default:
dm.walkDocument(property, path, indexes, context)
}