Idéalement, il vaut mieux laisser toute la puissance à Elasticsearch histoire de ne pas être pertubé par d'autres services. Notamment mettre avec une BDD va typiquement dégrader fortement les IO d'Elasticsearch.
Si c'est possible pour toi, fais un cluster elasticsearch complètement séparé du reste.
Evidemment. C'est un moteur de recherche. Il est fait pour ça !
L'idéal à mon avis est de faire un index par langue.
Node: instance physique d'Elasticsearch. En gros: un process (une JVM). On ne met (sauf cas exceptionnel) qu'un seul noeud par machine physique.
Cluster: un ensemble de noeuds qui ont tous le même cluster name.
Un index contient en effet les data.
Non. En tant qu'utilisateur tu dois séparer les concepts. Les noeuds sont un pb d'architecture physique. En tant que DEV tu dois juste te dire que tu as un cluster elasticsearch (quelque soit le nombre de noeuds dedans.
Toi, tu créés un index fr sur elasticsearch et tu laisses elasticsearch se charger de son allocation sur les noeuds.
Quand tu cherches dans un index, tu n'as pas à savoir où son physiquement les données. C'est le pb d'elasticsearch.
Un index est découpé en shards (partitions). Chaque shard est une instance de Lucene. Quand tu indexes un document, ce document va aller vers un shard physique et y être indexé. Là encore, ce n'est pas ton problème. Laisse faire elasticsearch.
Su un cluster de 3 noeuds, avec 3 index (fr, de, us) et 1 primary shard par index (p) et un replica par shard (r), tu auras au final 6 shards alloués sur ton cluster.
Elasticsearch en mettra 2 sur chaque noeud.
Par exemple:
Noeud 1: fr-1-P et us-1-R
Noeud 2: de-1-P et fr-1-R
Noeud 3: us-1-P et de-1-R
Si tu perds un noeud, il rebalancera tout ça et tes utilisateurs ne verront probablement pas la panne.
En espérant que ça t'aide.