Suite à l’article Solr 4.0 et jointures cross-index, voici ce qu’il en est dans un environnement SolrCloud.
Donc, les nouvelles sont plutôt mauvaises. Car, comme l’explique le ticket SOLR-4905, les recherches de type join cross-collection ne sont pas supportées avec Solrcloud.
Cependant, sous certaines conditions qui limitent cruellement l’intérêt de SolrCloud, il est possible de réaliser des jointures cross-collections.
Les conditions sont :
- les collections impliquées ne peuvent pas être multi-shard mais peuvent être multi-replicas
- chaque node Solr qui héberge un réplica d’une des 2 collections doit héberger un réplica de l’autre collection
- lors de la création des collections, il faut forcer le nom des cores correspondant à chaque replica du shard. le nom des cores doit être identique au nom de la collection.
Je l’ai dit, c’est draconien comme conditions et cela limite grandement l’intérêt de SolrCloud.
Pour créer la collection et contrôler le nom des cores des réplica, il faut utiliser le Cores API et non pas la Collections API.
Alors que normalement, on aurait créer une collection d’un seul shard comme ceci en une seule commande :
curl 'http://localhost:8983/solr/admin/collections?action=CREATE&name=col1&numShards=1&replicationFactor=2&collection.configName=collection1'
Il faut créer chaque core sur chaque noeud du cloud, ce qui devient :
curl 'http://localhost:8983/solr/admin/cores?action=CREATE&name=col1&collection=col1&shard=1&collection.configName=collection1' curl 'http://localhost:8993/solr/admin/cores?action=CREATE&name=col1&collection=col1&shard=1&collection.configName=collection1'
Avec 2 collections, la syntaxe d’une requête avec jointure est :
http://.../solr/articles/select?fl=xxx,yyy&q=energy&fqn{!join%20from=id%20to=id_author%20fromIndex=users}country:france
Ceci est clairement très limité (je l’ai déjà dit ?) et il faudrait que le ticket SOLR-4905 soit pris en charge.