code: func (c *Client) statusToNodeShardsForIndex(status Status, indexName string) (map[uint64]*URI, error) {
  	result := make(map[uint64]*URI)
  	if maxShard, ok := status.indexMaxShard[indexName]; ok {
  		for shard := 0; shard <= int(maxShard); shard++ {
  			fragmentNodes, err := c.fetchFragmentNodes(indexName, uint64(shard))
  			if err != nil {
  				return nil, err
  			}
  			if len(fragmentNodes) == 0 {
  				return nil, ErrNoFragmentNodes
  			}
  			node := fragmentNodes[0]
  			uri := &URI{
  				host:   node.Host,
  				port:   node.Port,
  				scheme: node.Scheme,
  			}
  
  			result[uint64(shard)] = uri
  		}
  	} else {
  		return nil, ErrNoShard
  	}
  	return result, nil
  }
docs: // statusToNodeShardsForIndex finds the hosts which contains shards for the given index