func QueryBlevePIndexImpl(mgr *cbgt.Manager, indexName, indexUUID string, req []byte, res io.Writer) error { queryCtlParams := cbgt.QueryCtlParams{ Ctl: cbgt.QueryCtl{ Timeout: cbgt.QUERY_CTL_DEFAULT_TIMEOUT_MS, }, } err := json.Unmarshal(req, &queryCtlParams) if err != nil { return fmt.Errorf("bleve: QueryBlevePIndexImpl"+ " parsing queryCtlParams, req: %s, err: %v", req, err) } searchRequest := &bleve.SearchRequest{} err = json.Unmarshal(req, searchRequest) if err != nil { return fmt.Errorf("bleve: QueryBlevePIndexImpl"+ " parsing searchRequest, req: %s, err: %v", req, err) } err = searchRequest.Query.Validate() if err != nil { return err } cancelCh := cbgt.TimeoutCancelChan(queryCtlParams.Ctl.Timeout) alias, err := bleveIndexAlias(mgr, indexName, indexUUID, true, queryCtlParams.Ctl.Consistency, cancelCh) if err != nil { return err } doneCh := make(chan struct{}) var searchResult *bleve.SearchResult go func() { searchResult, err = alias.Search(searchRequest) close(doneCh) }() select { case <-cancelCh: err = fmt.Errorf("pindex_bleve: query timeout") case <-doneCh: if searchResult != nil { rest.MustEncode(res, searchResult) } } return err }
func QueryAlias(mgr *cbgt.Manager, indexName, indexUUID string, req []byte, res io.Writer) error { queryCtlParams := cbgt.QueryCtlParams{ Ctl: cbgt.QueryCtl{ Timeout: cbgt.QUERY_CTL_DEFAULT_TIMEOUT_MS, }, } err := json.Unmarshal(req, &queryCtlParams) if err != nil { return fmt.Errorf("alias: QueryAlias"+ " parsing queryCtlParams, req: %s, err: %v", req, err) } searchRequest := &bleve.SearchRequest{} err = json.Unmarshal(req, searchRequest) if err != nil { return fmt.Errorf("alias: QueryAlias"+ " parsing searchRequest, req: %s, err: %v", req, err) } if srqv, ok := searchRequest.Query.(query.ValidatableQuery); ok { err = srqv.Validate() if err != nil { return err } } cancelCh := cbgt.TimeoutCancelChan(queryCtlParams.Ctl.Timeout) alias, err := bleveIndexAliasForUserIndexAlias(mgr, indexName, indexUUID, true, queryCtlParams.Ctl.Consistency, cancelCh, true) if err != nil { return err } searchResponse, err := alias.Search(searchRequest) if err != nil { return err } rest.MustEncode(res, searchResponse) return nil }