2016-04-26 7 views
0

Wir versuchen, einen zweidimensionalen Solr-Cloud-Cluster zu implementieren, wobei die erste Dimension eine Sammlung und die zweite ein Shard ist. Die Sammlung sollte in Laufzeit basierend auf einer Dokumenteigenschaften bestimmt werden.Wie wird die Solr Cloud-Sammlung in Spring Data Solr 2.0.1 dynamisch angegeben?

ich sehen kann, dass diese Funktionalität durch solrj- CloudSolrClient unterstützt hat geeignete Methoden, die Kollektionsnamen wie add(String collection, SolrInputDocument doc) akzeptieren, so dass ich registrierte @Bean CloudSolrClient("zookeeper.host"). Aber anscheinend ist es nicht genug, weil Methoden in SolrTemplate, die von Spring Data Solr verwendet wird, einen Sammlungsnamen nicht akzeptiert.

Da SolrTemplate verwendet SolrClient unter der Haube ich versuchte, dieses Problem zu umgehen verlauf SolrTemplate und überwiegende saveBean und saveBeans Delegieren Methoden CloudSolrClient#add(String collection, SolrInputDocument doc) und CloudSolrClient#add(String collection, Collection<SolrInputDocument> docs). Es funktionierte gut, bis ich das gleiche für Abfragen tun musste. SolrTemplate#executeSolrQuery ist package-private und final, also kann ich es nicht überschreiben. Und hier steckte ich fest!

Um meine Frage zusammenzufassen: Gibt es eine Möglichkeit, einen Sammlungsnamen im Frühjahr Daten Solr in Laufzeit anzugeben?

Ich würde jede Hilfe sehr schätzen!

Grüße, Eugeny

Antwort

0

war mein Problem ein wenig anders, aber ich hatte auch ein Problem mit Kollektionsnamen in Abfragen und in meinem Fall das Hinzufügen @SolrDocument (solrCoreName = „core_to_which_model_class_belong“) Klasse das Problem gelöst zu modellieren .

+0

Aber leider scheint es nicht dynamisch. Ich musste Dokumente in verschiedenen Sammlungen speichern können, nicht in einem vordefinierten. – Eugeny

+0

Ich habe solrj und spring-data-solr Code ein bisschen debuggen lassen und es scheint anders zu sein, dass Solr Clients unterschiedliche Ansätze haben. Schauen Sie sich diesen Codeschnipsel an: 'if (collection == null)' 'collection = (reqParams! = Null)? reqParams.get ("Sammlung", getDefaultCollection()): getDefaultCollection(); ' Dies ist von CloudSolrClient. Scheint so, als müssten Sie einen Request-Parameter angeben, um den Client anzuweisen, Ihren Anruf gegen die ausgewählte Sammlung auszuführen. Allerdings kann ich keine Methode in Spring-Data-Solr sehen, um eine Anfrage zu übergeben. Es ist in solrj –

+0

erstellt Ja, danke! Ich habe diesen Code auch gesehen. Ich habe am Ende Anfragen mit Solrj implementiert. – Eugeny