code: func (q *TagQuery) Run(index TagIndex, byId map[schema.MKey]*idx.Archive) IdSet {
  	q.index = index
  	q.byId = byId
  
  	q.sortByCost()
  
  	idCh, _ := q.getInitialIds()
  	resCh := make(chan schema.MKey)
  
  	// start the tag query workers. they'll consume the ids on the idCh and
  	// evaluate for each of them whether it satisfies all the conditions
  	// defined in the query expressions. those that satisfy all conditions
  	// will be pushed into the resCh
  	q.wg.Add(TagQueryWorkers)
  	for i := 0; i < TagQueryWorkers; i++ {
  		go q.filterIdsFromChan(idCh, resCh)
  	}
  
  	go func() {
  		q.wg.Wait()
  		close(resCh)
  	}()
  
  	result := make(IdSet)
  
  	for id := range resCh {
  		result[id] = struct{}{}
  	}
  
  	return result
  }
docs: // Run executes the tag query on the given index and returns a list of ids