Merge pull request #236 from pmezard/implement-doc-static-mapping
implement document static mappings
This commit is contained in:
commit
6fa02b786d
@ -15,6 +15,7 @@ import (
|
|||||||
"log"
|
"log"
|
||||||
"os"
|
"os"
|
||||||
"reflect"
|
"reflect"
|
||||||
|
"sort"
|
||||||
"strings"
|
"strings"
|
||||||
"sync"
|
"sync"
|
||||||
"testing"
|
"testing"
|
||||||
@ -1039,6 +1040,67 @@ func TestTermVectorArrayPositions(t *testing.T) {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func TestDocumentStaticMapping(t *testing.T) {
|
||||||
|
defer func() {
|
||||||
|
err := os.RemoveAll("testidx")
|
||||||
|
if err != nil {
|
||||||
|
t.Fatal(err)
|
||||||
|
}
|
||||||
|
}()
|
||||||
|
|
||||||
|
m := NewIndexMapping()
|
||||||
|
m.DefaultMapping = NewDocumentStaticMapping()
|
||||||
|
m.DefaultMapping.AddFieldMappingsAt("Text", NewTextFieldMapping())
|
||||||
|
m.DefaultMapping.AddFieldMappingsAt("Date", NewDateTimeFieldMapping())
|
||||||
|
m.DefaultMapping.AddFieldMappingsAt("Numeric", NewNumericFieldMapping())
|
||||||
|
|
||||||
|
index, err := New("testidx", m)
|
||||||
|
if err != nil {
|
||||||
|
t.Fatal(err)
|
||||||
|
}
|
||||||
|
|
||||||
|
doc1 := struct {
|
||||||
|
Text string
|
||||||
|
IgnoredText string
|
||||||
|
Numeric float64
|
||||||
|
IgnoredNumeric float64
|
||||||
|
Date time.Time
|
||||||
|
IgnoredDate time.Time
|
||||||
|
}{
|
||||||
|
Text: "valid text",
|
||||||
|
IgnoredText: "ignored text",
|
||||||
|
Numeric: 10,
|
||||||
|
IgnoredNumeric: 20,
|
||||||
|
Date: time.Unix(1, 0),
|
||||||
|
IgnoredDate: time.Unix(2, 0),
|
||||||
|
}
|
||||||
|
|
||||||
|
err = index.Index("a", doc1)
|
||||||
|
if err != nil {
|
||||||
|
t.Fatal(err)
|
||||||
|
}
|
||||||
|
|
||||||
|
fields, err := index.Fields()
|
||||||
|
if err != nil {
|
||||||
|
t.Fatal(err)
|
||||||
|
}
|
||||||
|
sort.Strings(fields)
|
||||||
|
expectedFields := []string{"Date", "Numeric", "Text", "_all"}
|
||||||
|
if len(fields) != len(expectedFields) {
|
||||||
|
t.Fatalf("invalid field count: %d", len(fields))
|
||||||
|
}
|
||||||
|
for i, expected := range expectedFields {
|
||||||
|
if expected != fields[i] {
|
||||||
|
t.Fatalf("unexpected field[%d]: %s", i, fields[i])
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
err = index.Close()
|
||||||
|
if err != nil {
|
||||||
|
t.Fatal(err)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
func TestIndexEmptyDocId(t *testing.T) {
|
func TestIndexEmptyDocId(t *testing.T) {
|
||||||
defer func() {
|
defer func() {
|
||||||
err := os.RemoveAll("testidx")
|
err := os.RemoveAll("testidx")
|
||||||
|
@ -322,7 +322,7 @@ func (dm *DocumentMapping) processProperty(property interface{}, path []string,
|
|||||||
for _, fieldMapping := range subDocMapping.Fields {
|
for _, fieldMapping := range subDocMapping.Fields {
|
||||||
fieldMapping.processString(propertyValueString, pathString, path, indexes, context)
|
fieldMapping.processString(propertyValueString, pathString, path, indexes, context)
|
||||||
}
|
}
|
||||||
} else {
|
} else if dm.Dynamic {
|
||||||
// automatic indexing behavior
|
// automatic indexing behavior
|
||||||
|
|
||||||
// first see if it can be parsed by the default date parser
|
// first see if it can be parsed by the default date parser
|
||||||
@ -347,7 +347,7 @@ func (dm *DocumentMapping) processProperty(property interface{}, path []string,
|
|||||||
for _, fieldMapping := range subDocMapping.Fields {
|
for _, fieldMapping := range subDocMapping.Fields {
|
||||||
fieldMapping.processFloat64(propertyValFloat, pathString, path, indexes, context)
|
fieldMapping.processFloat64(propertyValFloat, pathString, path, indexes, context)
|
||||||
}
|
}
|
||||||
} else {
|
} else if dm.Dynamic {
|
||||||
// automatic indexing behavior
|
// automatic indexing behavior
|
||||||
fieldMapping := NewNumericFieldMapping()
|
fieldMapping := NewNumericFieldMapping()
|
||||||
fieldMapping.processFloat64(propertyValFloat, pathString, path, indexes, context)
|
fieldMapping.processFloat64(propertyValFloat, pathString, path, indexes, context)
|
||||||
@ -361,7 +361,7 @@ func (dm *DocumentMapping) processProperty(property interface{}, path []string,
|
|||||||
for _, fieldMapping := range subDocMapping.Fields {
|
for _, fieldMapping := range subDocMapping.Fields {
|
||||||
fieldMapping.processTime(property, pathString, path, indexes, context)
|
fieldMapping.processTime(property, pathString, path, indexes, context)
|
||||||
}
|
}
|
||||||
} else {
|
} else if dm.Dynamic {
|
||||||
fieldMapping := NewDateTimeFieldMapping()
|
fieldMapping := NewDateTimeFieldMapping()
|
||||||
fieldMapping.processTime(property, pathString, path, indexes, context)
|
fieldMapping.processTime(property, pathString, path, indexes, context)
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user