diff --git a/search/searcher/search_term_prefix.go b/search/searcher/search_term_prefix.go index 8c0590e0..b666d3b7 100644 --- a/search/searcher/search_term_prefix.go +++ b/search/searcher/search_term_prefix.go @@ -36,11 +36,19 @@ func NewTermPrefixSearcher(indexReader index.IndexReader, prefix string, field s // enumerate all the terms in the range qsearchers := make([]search.Searcher, 0, 25) + qsearchersClose := func() { + for _, searcher := range qsearchers { + _ = searcher.Close() + } + } + tfd, err := fieldDict.Next() for err == nil && tfd != nil { var qsearcher *TermSearcher qsearcher, err = NewTermSearcher(indexReader, string(tfd.Term), field, 1.0, explain) if err != nil { + qsearchersClose() + _ = fieldDict.Close() return nil, err } qsearchers = append(qsearchers, qsearcher) @@ -49,12 +57,14 @@ func NewTermPrefixSearcher(indexReader index.IndexReader, prefix string, field s err = fieldDict.Close() if err != nil { + qsearchersClose() return nil, err } // build disjunction searcher of these ranges searcher, err := NewDisjunctionSearcher(indexReader, qsearchers, 0, explain) if err != nil { + qsearchersClose() return nil, err } @@ -66,6 +76,7 @@ func NewTermPrefixSearcher(indexReader index.IndexReader, prefix string, field s searcher: searcher, }, nil } + func (s *TermPrefixSearcher) Count() uint64 { return s.searcher.Count() }