Bump github.com/blevesearch/bleve/v2 from 2.3.9 to 2.3.10
Bumps [github.com/blevesearch/bleve/v2](https://github.com/blevesearch/bleve) from 2.3.9 to 2.3.10. - [Release notes](https://github.com/blevesearch/bleve/releases) - [Commits](https://github.com/blevesearch/bleve/compare/v2.3.9...v2.3.10) --- updated-dependencies: - dependency-name: github.com/blevesearch/bleve/v2 dependency-type: direct:production update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] <support@github.com>
This commit is contained in:
committed by
Ralf Haferkamp
parent
f051b9ef7d
commit
0f2838e525
+34
-11
@@ -15,6 +15,7 @@
|
||||
package document
|
||||
|
||||
import (
|
||||
"bytes"
|
||||
"fmt"
|
||||
"math"
|
||||
"reflect"
|
||||
@@ -26,6 +27,8 @@ import (
|
||||
index "github.com/blevesearch/bleve_index_api"
|
||||
)
|
||||
|
||||
var dateTimeValueSeperator = []byte{'\xff'}
|
||||
|
||||
var reflectStaticSizeDateTimeField int
|
||||
|
||||
func init() {
|
||||
@@ -79,17 +82,28 @@ func (n *DateTimeField) AnalyzedTokenFrequencies() index.TokenFrequencies {
|
||||
return n.frequencies
|
||||
}
|
||||
|
||||
// split the value into the prefix coded date and the layout
|
||||
// using the dateTimeValueSeperator as the split point
|
||||
func (n *DateTimeField) splitValue() (numeric.PrefixCoded, string) {
|
||||
parts := bytes.SplitN(n.value, dateTimeValueSeperator, 2)
|
||||
if len(parts) == 1 {
|
||||
return numeric.PrefixCoded(parts[0]), ""
|
||||
}
|
||||
return numeric.PrefixCoded(parts[0]), string(parts[1])
|
||||
}
|
||||
|
||||
func (n *DateTimeField) Analyze() {
|
||||
valueWithoutLayout, _ := n.splitValue()
|
||||
tokens := make(analysis.TokenStream, 0)
|
||||
tokens = append(tokens, &analysis.Token{
|
||||
Start: 0,
|
||||
End: len(n.value),
|
||||
Term: n.value,
|
||||
End: len(valueWithoutLayout),
|
||||
Term: valueWithoutLayout,
|
||||
Position: 1,
|
||||
Type: analysis.DateTime,
|
||||
})
|
||||
|
||||
original, err := n.value.Int64()
|
||||
original, err := valueWithoutLayout.Int64()
|
||||
if err == nil {
|
||||
|
||||
shift := DefaultDateTimePrecisionStep
|
||||
@@ -118,12 +132,13 @@ func (n *DateTimeField) Value() []byte {
|
||||
return n.value
|
||||
}
|
||||
|
||||
func (n *DateTimeField) DateTime() (time.Time, error) {
|
||||
i64, err := n.value.Int64()
|
||||
func (n *DateTimeField) DateTime() (time.Time, string, error) {
|
||||
date, layout := n.splitValue()
|
||||
i64, err := date.Int64()
|
||||
if err != nil {
|
||||
return time.Time{}, err
|
||||
return time.Time{}, "", err
|
||||
}
|
||||
return time.Unix(0, i64).UTC(), nil
|
||||
return time.Unix(0, i64).UTC(), layout, nil
|
||||
}
|
||||
|
||||
func (n *DateTimeField) GoString() string {
|
||||
@@ -144,18 +159,26 @@ func NewDateTimeFieldFromBytes(name string, arrayPositions []uint64, value []byt
|
||||
}
|
||||
}
|
||||
|
||||
func NewDateTimeField(name string, arrayPositions []uint64, dt time.Time) (*DateTimeField, error) {
|
||||
return NewDateTimeFieldWithIndexingOptions(name, arrayPositions, dt, DefaultDateTimeIndexingOptions)
|
||||
func NewDateTimeField(name string, arrayPositions []uint64, dt time.Time, layout string) (*DateTimeField, error) {
|
||||
return NewDateTimeFieldWithIndexingOptions(name, arrayPositions, dt, layout, DefaultDateTimeIndexingOptions)
|
||||
}
|
||||
|
||||
func NewDateTimeFieldWithIndexingOptions(name string, arrayPositions []uint64, dt time.Time, options index.FieldIndexingOptions) (*DateTimeField, error) {
|
||||
func NewDateTimeFieldWithIndexingOptions(name string, arrayPositions []uint64, dt time.Time, layout string, options index.FieldIndexingOptions) (*DateTimeField, error) {
|
||||
if canRepresent(dt) {
|
||||
dtInt64 := dt.UnixNano()
|
||||
prefixCoded := numeric.MustNewPrefixCodedInt64(dtInt64, 0)
|
||||
// The prefixCoded value is combined with the layout.
|
||||
// This is necessary because the storage layer stores a fields value as a byte slice
|
||||
// without storing extra information like layout. So by making value = prefixCoded + layout,
|
||||
// both pieces of information are stored in the byte slice.
|
||||
// During a query, the layout is extracted from the byte slice stored to correctly
|
||||
// format the prefixCoded value.
|
||||
valueWithLayout := append(prefixCoded, dateTimeValueSeperator...)
|
||||
valueWithLayout = append(valueWithLayout, []byte(layout)...)
|
||||
return &DateTimeField{
|
||||
name: name,
|
||||
arrayPositions: arrayPositions,
|
||||
value: prefixCoded,
|
||||
value: valueWithLayout,
|
||||
options: options,
|
||||
// not correct, just a place holder until we revisit how fields are
|
||||
// represented and can fix this better
|
||||
|
||||
Reference in New Issue
Block a user