Faits : A. Le 25 juillet 2018, X._, ressortissante jordanienne, a déposé plainte pénale contre inconnu pour traite d'êtres humains. En substance, elle a exposé avoir quitté la Jordanie en octobre 2017 afin de fuir son oncle qui n'acceptait pas son mariage et voulait qu'elle épouse un cousin. Elle avait pu s'enfuir et rejoindre la Grèce, où, contre 400 euros et son passeport, un certain A._ l'avait amenée à Genève, dans l'appartement d'un couple (jordano-irakien), dont l'épouse s'appelait B._. X._ était restée dans cet appartement, dont elle ne pouvait pas sortir puisque B._ fermait la porte à clé, du 5 ou 6 novembre au 19 décembre 2017. Elle y faisait le ménage et la cuisine. B._ se prostituait et l'avait incitée à en faire autant. Un jour, un Algérien ou un Marocain, à qui elle avait parlé la veille, était venu la chercher et l'avait conduite au centre pour réfugiés de Vallorbe. B. Par ordonnance du 23 août 2018, le ministère public genevois a refusé d'entrer en matière sur la plainte faute d'avoir pu identifier les auteurs, malgré une enquête de police. C. Par arrêt du 10 janvier 2019, la Chambre pénale de recours de la Cour de justice genevoise a rejeté le recours formé par X._ contre l'ordonnance de non-entrée en matière et a rejeté sa demande d'assistance judiciaire, la démarche étant d'emblée vouée à l'échec. D. X._ forme un recours en matière pénale auprès du Tribunal fédéral contre l'arrêt cantonal et conclut, avec suite de frais et dépens, à la transmission de la cause au ministère public pour instruction. Elle requiert, par ailleurs, l'octroi de l'assistance judiciaire.