@@ -90,15 +90,15 @@ const CheckDoneEvery = uint64(1024)
9090// skipping over the first 'skip' hits
9191// ordering hits by the provided sort order
9292func NewTopNCollector (size int , skip int , sort search.SortOrder ) * TopNCollector {
93- return newTopNCollector (size , skip , sort )
93+ return newTopNCollector (size , skip , sort , nil )
9494}
9595
9696// NewTopNCollectorAfter builds a collector to find the top 'size' hits
9797// skipping over the first 'skip' hits
9898// ordering hits by the provided sort order
9999// starting after the provided 'after' sort values
100100func NewTopNCollectorAfter (size int , sort search.SortOrder , after []string ) * TopNCollector {
101- rv := newTopNCollector (size , 0 , sort )
101+ rv := newTopNCollector (size , 0 , sort , nil )
102102 rv .searchAfter = createSearchAfterDocument (sort , after )
103103 return rv
104104}
@@ -109,7 +109,7 @@ func NewTopNCollectorAfter(size int, sort search.SortOrder, after []string) *Top
109109// while ensuring the nested documents are handled correctly
110110// (i.e. parent document is returned instead of nested document)
111111func NewNestedTopNCollector (size int , skip int , sort search.SortOrder , nr index.NestedReader ) * TopNCollector {
112- return newNestedTopNCollector (size , skip , sort , nr )
112+ return newTopNCollector (size , skip , sort , nr )
113113}
114114
115115// NewNestedTopNCollectorAfter builds a collector to find the top 'size' hits
@@ -119,37 +119,21 @@ func NewNestedTopNCollector(size int, skip int, sort search.SortOrder, nr index.
119119// while ensuring the nested documents are handled correctly
120120// (i.e. parent document is returned instead of nested document)
121121func NewNestedTopNCollectorAfter (size int , sort search.SortOrder , after []string , nr index.NestedReader ) * TopNCollector {
122- rv := newNestedTopNCollector (size , 0 , sort , nr )
122+ rv := newTopNCollector (size , 0 , sort , nr )
123123 rv .searchAfter = createSearchAfterDocument (sort , after )
124124 return rv
125125}
126126
127- func newTopNCollector (size int , skip int , sort search.SortOrder ) * TopNCollector {
127+ func newTopNCollector (size int , skip int , sort search.SortOrder , nr index. NestedReader ) * TopNCollector {
128128 hc := & TopNCollector {size : size , skip : skip , sort : sort }
129129
130130 hc .store = getOptimalCollectorStore (size , skip , func (i , j * search.DocumentMatch ) int {
131131 return hc .sort .Compare (hc .cachedScoring , hc .cachedDesc , i , j )
132132 })
133133
134- // these lookups traverse an interface, so do once up-front
135- if sort .RequiresDocID () {
136- hc .needDocIds = true
134+ if nr != nil {
135+ hc .nestedStore = newStoreNested (nr )
137136 }
138- hc .neededFields = sort .RequiredFields ()
139- hc .cachedScoring = sort .CacheIsScore ()
140- hc .cachedDesc = sort .CacheDescending ()
141-
142- return hc
143- }
144-
145- func newNestedTopNCollector (size int , skip int , sort search.SortOrder , nr index.NestedReader ) * TopNCollector {
146- hc := & TopNCollector {size : size , skip : skip , sort : sort }
147-
148- hc .store = getOptimalCollectorStore (size , skip , func (i , j * search.DocumentMatch ) int {
149- return hc .sort .Compare (hc .cachedScoring , hc .cachedDesc , i , j )
150- })
151-
152- hc .nestedStore = newStoreNested (nr )
153137
154138 // these lookups traverse an interface, so do once up-front
155139 if sort .RequiresDocID () {
@@ -369,7 +353,7 @@ func (hc *TopNCollector) Collect(ctx context.Context, searcher search.Searcher,
369353 }
370354
371355 if hc .nestedStore != nil {
372- var count int
356+ var count uint64
373357 err := hc .nestedStore .VisitRoots (func (doc * search.DocumentMatch ) error {
374358 if err := hc .adjustDocumentMatch (searchContext , reader , doc ); err != nil {
375359 return err
@@ -386,7 +370,7 @@ func (hc *TopNCollector) Collect(ctx context.Context, searcher search.Searcher,
386370 if err != nil {
387371 return err
388372 }
389- hc .total = uint64 ( count )
373+ hc .total = count
390374 }
391375
392376 if hc .knnHits != nil {
0 commit comments