2016-04-26 1 views
0

Nous essayons de mettre en œuvre un cluster de nuages ​​de solr bidimensionnel où la première dimension est une collection et la seconde est un fragment. La collecte doit être déterminée dans runtime en fonction des propriétés d'un document.Comment spécifier dynamiquement la collection Solr Cloud dans Spring Data Solr 2.0.1?

Je peux voir que cette fonctionnalité est supportée par solrj- CloudSolrClient a des méthodes appropriées qui acceptent le nom de collection comme add(String collection, SolrInputDocument doc), donc j'ai enregistré @Bean CloudSolrClient("zookeeper.host"). Mais apparemment, cela ne suffit pas car les méthodes de SolrTemplate, utilisées par Spring Data Solr, n'acceptent pas de nom de collection.

Depuis SolrTemplate utilise SolrClient sous le capot j'ai essayé de contourner ce problème extension SolrTemplate et prépondérants saveBean et saveBeans méthodes déléguant CloudSolrClient#add(String collection, SolrInputDocument doc) et CloudSolrClient#add(String collection, Collection<SolrInputDocument> docs). Cela a fonctionné très bien jusqu'à ce que je devais faire la même chose pour les requêtes. SolrTemplate#executeSolrQuery est paquet-privé et final, donc je ne peux pas le contourner. Et ici je suis coincé!

Pour résumer ma question: existe-t-il un moyen de spécifier un nom de collection dans le fichier de données de printemps runtime?

J'apprécierais grandement toute aide!

Cordialement, Eugeny

Répondre

0

Mon problème était un peu différent, mais j'ai aussi eu un problème avec le nom de la collection dans les requêtes et dans mon cas en ajoutant @SolrDocument (solrCoreName = « core_to_which_model_class_belong ») pour modéliser la classe a résolu le problème .

+0

Mais malheureusement, cela ne semble pas dynamique. Je devais être capable de stocker des documents dans différentes collections, pas dans une collection prédéfinie. – Eugeny

+0

Je déboguais un peu le code de solrj et de spring-data-solr et il semble que différents clients aient des approches différentes. Regardez cet extrait de code par exemple: 'if (collection == null)' 'collection = (reqParams! = Null)? reqParams.get ("collection", getDefaultCollection()): getDefaultCollection(); ' Ceci provient de CloudSolrClient. Il semble que vous ayez besoin de fournir un paramètre de demande pour indiquer au client d'exécuter votre appel par rapport à la collection choisie. Cependant, je ne vois aucune méthode dans spring-data-solr pour passer une requête. Il est créé à l'intérieur de solrj –

+0

Oui, merci! J'ai vu ce code aussi. J'ai fini par implémenter des requêtes en utilisant solrj. – Eugeny