@@ -27,6 +27,7 @@ import (
2727 "github.com/blevesearch/bleve/v2/search"
2828 "github.com/blevesearch/bleve/v2/search/collector"
2929 "github.com/blevesearch/bleve/v2/search/query"
30+ "github.com/blevesearch/bleve/v2/util"
3031 index "github.com/blevesearch/bleve_index_api"
3132)
3233
@@ -42,18 +43,18 @@ type SearchRequest struct {
4243 Query query.Query `json:"query"`
4344 Size int `json:"size"`
4445 From int `json:"from"`
45- Highlight * HighlightRequest `json:"highlight"`
46- Fields []string `json:"fields"`
47- Facets FacetsRequest `json:"facets"`
46+ Highlight * HighlightRequest `json:"highlight,omitempty "`
47+ Fields []string `json:"fields,omitempty "`
48+ Facets FacetsRequest `json:"facets,omitempty "`
4849 Explain bool `json:"explain"`
4950 Sort search.SortOrder `json:"sort"`
5051 IncludeLocations bool `json:"includeLocations"`
5152 Score string `json:"score,omitempty"`
52- SearchAfter []string `json:"search_after"`
53- SearchBefore []string `json:"search_before"`
53+ SearchAfter []string `json:"search_after,omitempty "`
54+ SearchBefore []string `json:"search_before,omitempty "`
5455
55- KNN []* KNNRequest `json:"knn"`
56- KNNOperator knnOperator `json:"knn_operator"`
56+ KNN []* KNNRequest `json:"knn,omitempty "`
57+ KNNOperator knnOperator `json:"knn_operator,omitempty "`
5758
5859 // PreSearchData will be a map that will be used
5960 // in the second phase of any 2-phase search, to provide additional
@@ -125,35 +126,35 @@ func (r *SearchRequest) AddKNNOperator(operator knnOperator) {
125126// a SearchRequest
126127func (r * SearchRequest ) UnmarshalJSON (input []byte ) error {
127128 type tempKNNReq struct {
128- Field string `json:"field"`
129- Vector []float32 `json:"vector"`
130- VectorBase64 string `json:"vector_base64"`
131- K int64 `json:"k"`
132- Boost * query.Boost `json:"boost,omitempty"`
133- Params json. RawMessage `json:"params"`
134- FilterQuery json. RawMessage `json:"filter,omitempty"`
129+ Field string `json:"field"`
130+ Vector []float32 `json:"vector"`
131+ VectorBase64 string `json:"vector_base64"`
132+ K int64 `json:"k"`
133+ Boost * query.Boost `json:"boost,omitempty"`
134+ Params OptionalRawMessage `json:"params"`
135+ FilterQuery OptionalRawMessage `json:"filter,omitempty"`
135136 }
136137
137138 var temp struct {
138- Q json.RawMessage `json:"query"`
139- Size * int `json:"size"`
140- From int `json:"from"`
141- Highlight * HighlightRequest `json:"highlight"`
142- Fields []string `json:"fields"`
143- Facets FacetsRequest `json:"facets"`
144- Explain bool `json:"explain"`
145- Sort []json.RawMessage `json:"sort"`
146- IncludeLocations bool `json:"includeLocations"`
147- Score string `json:"score"`
148- SearchAfter []string `json:"search_after"`
149- SearchBefore []string `json:"search_before"`
150- KNN []* tempKNNReq `json:"knn"`
151- KNNOperator knnOperator `json:"knn_operator"`
152- PreSearchData json. RawMessage `json:"pre_search_data"`
153- Params json. RawMessage `json:"params"`
154- }
155-
156- err := json . Unmarshal (input , & temp )
139+ Q json.RawMessage `json:"query"`
140+ Size * int `json:"size"`
141+ From int `json:"from"`
142+ Highlight * HighlightRequest `json:"highlight"`
143+ Fields []string `json:"fields"`
144+ Facets FacetsRequest `json:"facets"`
145+ Explain bool `json:"explain"`
146+ Sort []json.RawMessage `json:"sort"`
147+ IncludeLocations bool `json:"includeLocations"`
148+ Score string `json:"score"`
149+ SearchAfter []string `json:"search_after"`
150+ SearchBefore []string `json:"search_before"`
151+ KNN []* tempKNNReq `json:"knn"`
152+ KNNOperator knnOperator `json:"knn_operator"`
153+ PreSearchData OptionalRawMessage `json:"pre_search_data"`
154+ Params OptionalRawMessage `json:"params"`
155+ }
156+
157+ err := util . UnmarshalJSON (input , & temp )
157158 if err != nil {
158159 return err
159160 }
@@ -216,11 +217,10 @@ func (r *SearchRequest) UnmarshalJSON(input []byte) error {
216217 r .KNN [i ].VectorBase64 = temp .KNN [i ].VectorBase64
217218 r .KNN [i ].K = temp .KNN [i ].K
218219 r .KNN [i ].Boost = temp .KNN [i ].Boost
219- r .KNN [i ].Params = temp .KNN [i ].Params
220- if len (knnReq .FilterQuery ) == 0 {
221- // Setting this to nil to avoid ParseQuery() setting it to a match none
222- r .KNN [i ].FilterQuery = nil
223- } else {
220+ if len (temp .KNN [i ].Params ) > 0 {
221+ r .KNN [i ].Params = json .RawMessage (temp .KNN [i ].Params )
222+ }
223+ if len (temp .KNN [i ].FilterQuery ) > 0 {
224224 r .KNN [i ].FilterQuery , err = query .ParseQuery (knnReq .FilterQuery )
225225 if err != nil {
226226 return err
0 commit comments