code: func intersectFilter(q *query, tx *Transaction, filter filter, origKey string, destKey string) error {
  	switch filter.fieldSpec.indexKind {
  	case numericIndex:
  		return intersectNumericFilter(q, tx, filter, origKey, destKey)
  	case booleanIndex:
  		return intersectBoolFilter(q, tx, filter, origKey, destKey)
  	case stringIndex:
  		return intersectStringFilter(q, tx, filter, origKey, destKey)
  	}
  	return nil
  }
docs: // intersectFilter adds commands to the query transaction which, when run, will create a
  // temporary set which contains all the ids that fit the given filter criteria. Then it will
  // intersect them with origKey and stores the result in destKey. The function will automatically
  // delete any temporary sets created since, in this case, they are guaranteed to not be needed
  // by any other transaction commands.