fix date facets when using MultiSearch
changed date parsing to NOT update internal state of the date range object (avoids races) second, when marshaling a facet date range, we now use the string version, if the time.Time is zero and the string version is not ""
This commit is contained in:
parent
a3f8953c9f
commit
647bfd10ad
@ -395,8 +395,8 @@ func (i *indexImpl) SearchInContext(ctx context.Context, req *SearchRequest) (sr
|
|||||||
facetBuilder := facet.NewDateTimeFacetBuilder(facetRequest.Field, facetRequest.Size)
|
facetBuilder := facet.NewDateTimeFacetBuilder(facetRequest.Field, facetRequest.Size)
|
||||||
dateTimeParser := i.m.DateTimeParserNamed("")
|
dateTimeParser := i.m.DateTimeParserNamed("")
|
||||||
for _, dr := range facetRequest.DateTimeRanges {
|
for _, dr := range facetRequest.DateTimeRanges {
|
||||||
dr.ParseDates(dateTimeParser)
|
start, end := dr.ParseDates(dateTimeParser)
|
||||||
facetBuilder.AddRange(dr.Name, dr.Start, dr.End)
|
facetBuilder.AddRange(dr.Name, start, end)
|
||||||
}
|
}
|
||||||
facetsBuilder.Add(facetName, facetBuilder)
|
facetsBuilder.Add(facetName, facetBuilder)
|
||||||
} else {
|
} else {
|
||||||
|
28
search.go
28
search.go
@ -38,19 +38,22 @@ type dateTimeRange struct {
|
|||||||
endString *string
|
endString *string
|
||||||
}
|
}
|
||||||
|
|
||||||
func (dr *dateTimeRange) ParseDates(dateTimeParser analysis.DateTimeParser) {
|
func (dr *dateTimeRange) ParseDates(dateTimeParser analysis.DateTimeParser) (start, end time.Time) {
|
||||||
|
start = dr.Start
|
||||||
if dr.Start.IsZero() && dr.startString != nil {
|
if dr.Start.IsZero() && dr.startString != nil {
|
||||||
start, err := dateTimeParser.ParseDateTime(*dr.startString)
|
s, err := dateTimeParser.ParseDateTime(*dr.startString)
|
||||||
if err == nil {
|
if err == nil {
|
||||||
dr.Start = start
|
start = s
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
end = dr.End
|
||||||
if dr.End.IsZero() && dr.endString != nil {
|
if dr.End.IsZero() && dr.endString != nil {
|
||||||
end, err := dateTimeParser.ParseDateTime(*dr.endString)
|
e, err := dateTimeParser.ParseDateTime(*dr.endString)
|
||||||
if err == nil {
|
if err == nil {
|
||||||
dr.End = end
|
end = e
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
return start, end
|
||||||
}
|
}
|
||||||
|
|
||||||
func (dr *dateTimeRange) UnmarshalJSON(input []byte) error {
|
func (dr *dateTimeRange) UnmarshalJSON(input []byte) error {
|
||||||
@ -76,6 +79,21 @@ func (dr *dateTimeRange) UnmarshalJSON(input []byte) error {
|
|||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func (dr *dateTimeRange) MarshalJSON() ([]byte, error) {
|
||||||
|
rv := map[string]interface{}{
|
||||||
|
"name": dr.Name,
|
||||||
|
"start": dr.Start,
|
||||||
|
"end": dr.End,
|
||||||
|
}
|
||||||
|
if dr.Start.IsZero() && dr.startString != nil {
|
||||||
|
rv["start"] = dr.startString
|
||||||
|
}
|
||||||
|
if dr.End.IsZero() && dr.endString != nil {
|
||||||
|
rv["end"] = dr.endString
|
||||||
|
}
|
||||||
|
return json.Marshal(rv)
|
||||||
|
}
|
||||||
|
|
||||||
// A FacetRequest describes a facet or aggregation
|
// A FacetRequest describes a facet or aggregation
|
||||||
// of the result document set you would like to be
|
// of the result document set you would like to be
|
||||||
// built.
|
// built.
|
||||||
|
Loading…
Reference in New Issue
Block a user