0
0
bleve/search/facets_builder_test.go
Marty Schoch 6c988de5b5 fix date facet merging for searches on index aliases
previously we incorrectly identified matching buckets by
comparing string pointers.  this worked in the unit test
but not in real applications since the strings result from
date parsing inside the facet collector, and are therefore
different pointers
2016-02-23 15:33:07 -05:00

308 lines
4.9 KiB
Go

package search
import (
"reflect"
"testing"
)
func TestTermFacetResultsMerge(t *testing.T) {
fr1 := &FacetResult{
Field: "type",
Total: 100,
Missing: 25,
Other: 25,
Terms: []*TermFacet{
&TermFacet{
Term: "blog",
Count: 25,
},
&TermFacet{
Term: "comment",
Count: 24,
},
&TermFacet{
Term: "feedback",
Count: 1,
},
},
}
fr1Only := &FacetResult{
Field: "category",
Total: 97,
Missing: 22,
Other: 15,
Terms: []*TermFacet{
&TermFacet{
Term: "clothing",
Count: 35,
},
&TermFacet{
Term: "electronics",
Count: 25,
},
},
}
frs1 := FacetResults{
"types": fr1,
"categories": fr1Only,
}
fr2 := &FacetResult{
Field: "type",
Total: 100,
Missing: 25,
Other: 25,
Terms: []*TermFacet{
&TermFacet{
Term: "blog",
Count: 25,
},
&TermFacet{
Term: "comment",
Count: 22,
},
&TermFacet{
Term: "flag",
Count: 3,
},
},
}
frs2 := FacetResults{
"types": fr2,
}
expectedFr := &FacetResult{
Field: "type",
Total: 200,
Missing: 50,
Other: 51,
Terms: []*TermFacet{
&TermFacet{
Term: "blog",
Count: 50,
},
&TermFacet{
Term: "comment",
Count: 46,
},
&TermFacet{
Term: "flag",
Count: 3,
},
},
}
expectedFrs := FacetResults{
"types": expectedFr,
"categories": fr1Only,
}
frs1.Merge(frs2)
frs1.Fixup("types", 3)
if !reflect.DeepEqual(frs1, expectedFrs) {
t.Errorf("expected %v, got %v", expectedFrs, frs1)
}
}
func TestNumericFacetResultsMerge(t *testing.T) {
lowmed := 3.0
medhi := 6.0
hihigher := 9.0
fr1 := &FacetResult{
Field: "rating",
Total: 100,
Missing: 25,
Other: 25,
NumericRanges: []*NumericRangeFacet{
&NumericRangeFacet{
Name: "low",
Max: &lowmed,
Count: 25,
},
&NumericRangeFacet{
Name: "med",
Count: 24,
Max: &lowmed,
Min: &medhi,
},
&NumericRangeFacet{
Name: "hi",
Count: 1,
Min: &medhi,
Max: &hihigher,
},
},
}
frs1 := FacetResults{
"ratings": fr1,
}
fr2 := &FacetResult{
Field: "rating",
Total: 100,
Missing: 25,
Other: 25,
NumericRanges: []*NumericRangeFacet{
&NumericRangeFacet{
Name: "low",
Max: &lowmed,
Count: 25,
},
&NumericRangeFacet{
Name: "med",
Max: &lowmed,
Min: &medhi,
Count: 22,
},
&NumericRangeFacet{
Name: "highest",
Min: &hihigher,
Count: 3,
},
},
}
frs2 := FacetResults{
"ratings": fr2,
}
expectedFr := &FacetResult{
Field: "rating",
Total: 200,
Missing: 50,
Other: 51,
NumericRanges: []*NumericRangeFacet{
&NumericRangeFacet{
Name: "low",
Count: 50,
Max: &lowmed,
},
&NumericRangeFacet{
Name: "med",
Max: &lowmed,
Min: &medhi,
Count: 46,
},
&NumericRangeFacet{
Name: "highest",
Min: &hihigher,
Count: 3,
},
},
}
expectedFrs := FacetResults{
"ratings": expectedFr,
}
frs1.Merge(frs2)
frs1.Fixup("ratings", 3)
if !reflect.DeepEqual(frs1, expectedFrs) {
t.Errorf("expected %#v, got %#v", expectedFrs, frs1)
}
}
func TestDateFacetResultsMerge(t *testing.T) {
lowmed := "2010-01-01"
medhi := "2011-01-01"
hihigher := "2012-01-01"
// why second copy? the pointer are to strings done by date time parsing
// inside the facet generation, so comparing pointers will not work
lowmed2 := "2010-01-01"
medhi2 := "2011-01-01"
hihigher2 := "2012-01-01"
fr1 := &FacetResult{
Field: "birthday",
Total: 100,
Missing: 25,
Other: 25,
DateRanges: []*DateRangeFacet{
&DateRangeFacet{
Name: "low",
End: &lowmed,
Count: 25,
},
&DateRangeFacet{
Name: "med",
Count: 24,
Start: &lowmed,
End: &medhi,
},
&DateRangeFacet{
Name: "hi",
Count: 1,
Start: &medhi,
End: &hihigher,
},
},
}
frs1 := FacetResults{
"birthdays": fr1,
}
fr2 := &FacetResult{
Field: "birthday",
Total: 100,
Missing: 25,
Other: 25,
DateRanges: []*DateRangeFacet{
&DateRangeFacet{
Name: "low",
End: &lowmed2,
Count: 25,
},
&DateRangeFacet{
Name: "med",
Start: &lowmed2,
End: &medhi2,
Count: 22,
},
&DateRangeFacet{
Name: "highest",
Start: &hihigher2,
Count: 3,
},
},
}
frs2 := FacetResults{
"birthdays": fr2,
}
expectedFr := &FacetResult{
Field: "birthday",
Total: 200,
Missing: 50,
Other: 51,
DateRanges: []*DateRangeFacet{
&DateRangeFacet{
Name: "low",
Count: 50,
End: &lowmed,
},
&DateRangeFacet{
Name: "med",
Start: &lowmed,
End: &medhi,
Count: 46,
},
&DateRangeFacet{
Name: "highest",
Start: &hihigher,
Count: 3,
},
},
}
expectedFrs := FacetResults{
"birthdays": expectedFr,
}
frs1.Merge(frs2)
frs1.Fixup("birthdays", 3)
if !reflect.DeepEqual(frs1, expectedFrs) {
t.Errorf("expected %#v, got %#v", expectedFrs, frs1)
}
}