code: func (q *TagQuery) getInitialIds() (chan schema.MKey, chan struct{}) {
  	idCh := make(chan schema.MKey, 1000)
  	stopCh := make(chan struct{})
  	q.wg.Add(1)
  
  	switch q.startWith {
  	case EQUAL:
  		query := q.equal[0]
  		q.equal = q.equal[1:]
  		go q.getInitialByEqual(query, idCh, stopCh)
  	case PREFIX:
  		query := q.prefix[0]
  		q.prefix = q.prefix[1:]
  		go q.getInitialByPrefix(query, idCh, stopCh)
  	case MATCH:
  		query := q.match[0]
  		q.match = q.match[1:]
  		go q.getInitialByMatch(query, idCh, stopCh)
  	case PREFIX_TAG:
  		go q.getInitialByTagPrefix(idCh, stopCh)
  	case MATCH_TAG:
  		go q.getInitialByTagMatch(idCh, stopCh)
  	}
  
  	return idCh, stopCh
  }
docs: // getInitialIds asynchronously collects all ID's of the initial result set.  It returns:
  // a channel through which the IDs of the initial result set will be sent
  // a stop channel, which when closed, will cause it to abort the background worker.