func()

in pkg/espoll/search.go [34:72]


func (es *Client) SearchIndexMinDocs(
	ctx context.Context,
	min int, index string,
	query json.Marshaler,
	opts ...RequestOption,
) (SearchResult, error) {
	var result SearchResult
	req := es.NewSearchRequest(index)
	req.ExpandWildcards = "open,hidden"
	if min > 10 {
		// Size defaults to 10. If the caller expects more than 10,
		// return it in the search so we don't have to search again.
		req = req.WithSize(min)
	}
	if query != nil {
		req = req.WithQuery(query)
	}
	opts = append(opts, WithCondition(AllCondition(
		result.Hits.MinHitsCondition(min),
		result.Hits.TotalHitsCondition(req),
	)))

	// Refresh the indices before issuing the search request.
	refreshReq := esapi.IndicesRefreshRequest{
		Index:           strings.Split(",", index),
		ExpandWildcards: "all",
	}
	rsp, err := refreshReq.Do(ctx, es.Transport)
	if err != nil {
		return result, fmt.Errorf("failed refreshing indices: %s: %w", index, err)
	}

	rsp.Body.Close()

	if _, err := req.Do(ctx, &result, opts...); err != nil {
		return result, fmt.Errorf("failed issuing request: %w", err)
	}
	return result, nil
}