func NewTermPrefixSearcher(index index.Index, prefix string, field string, boost float64, explain bool) (*TermPrefixSearcher, error) { // find the terms with this prefix fieldReader, err := index.FieldReader(field, []byte(prefix), []byte(prefix)) // enumerate all the terms in the range qsearchers := make([]search.Searcher, 0, 25) tfd, err := fieldReader.Next() for err == nil && tfd != nil { qsearcher, err := NewTermSearcher(index, string(tfd.Term), field, 1.0, explain) if err != nil { return nil, err } qsearchers = append(qsearchers, qsearcher) tfd, err = fieldReader.Next() } // build disjunction searcher of these ranges searcher, err := NewDisjunctionSearcher(index, qsearchers, 0, explain) if err != nil { return nil, err } return &TermPrefixSearcher{ index: index, prefix: prefix, field: field, explain: explain, searcher: searcher, }, nil }