func TestSplitRange(t *testing.T) { min := numeric_util.Float64ToInt64(1.0) max := numeric_util.Float64ToInt64(5.0) ranges := splitInt64Range(min, max, 4) enumerated := ranges.Enumerate() if len(enumerated) != 135 { t.Errorf("expected 135 terms, got %d", len(enumerated)) } }
func NewNumericRangeSearcher(indexReader index.IndexReader, min *float64, max *float64, inclusiveMin, inclusiveMax *bool, field string, boost float64, explain bool) (*NumericRangeSearcher, error) { // account for unbounded edges if min == nil { negInf := math.Inf(-1) min = &negInf } if max == nil { Inf := math.Inf(1) max = &Inf } if inclusiveMin == nil { defaultInclusiveMin := true inclusiveMin = &defaultInclusiveMin } if inclusiveMax == nil { defaultInclusiveMax := false inclusiveMax = &defaultInclusiveMax } // find all the ranges minInt64 := numeric_util.Float64ToInt64(*min) if !*inclusiveMin && minInt64 != math.MaxInt64 { minInt64++ } maxInt64 := numeric_util.Float64ToInt64(*max) if !*inclusiveMax && maxInt64 != math.MinInt64 { maxInt64-- } // FIXME hard-coded precision, should match field declaration termRanges := splitInt64Range(minInt64, maxInt64, 4) terms := termRanges.Enumerate() // enumerate all the terms in the range qsearchers := make([]search.Searcher, len(terms)) for i, term := range terms { var err error qsearchers[i], err = NewTermSearcher(indexReader, string(term), field, 1.0, explain) if err != nil { return nil, err } } // build disjunction searcher of these ranges searcher, err := NewDisjunctionSearcher(indexReader, qsearchers, 0, explain) if err != nil { return nil, err } return &NumericRangeSearcher{ indexReader: indexReader, min: min, max: max, field: field, explain: explain, searcher: searcher, }, nil }
func NewNumericFieldWithIndexingOptions(name string, arrayPositions []uint64, number float64, options IndexingOptions) *NumericField { numberInt64 := numeric_util.Float64ToInt64(number) prefixCoded := numeric_util.MustNewPrefixCodedInt64(numberInt64, 0) return &NumericField{ name: name, arrayPositions: arrayPositions, value: prefixCoded, options: options, } }