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
Aber leider scheint es nicht dynamisch. Ich musste Dokumente in verschiedenen Sammlungen speichern können, nicht in einem vordefinierten. – Eugeny
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 –
erstellt Ja, danke! Ich habe diesen Code auch gesehen. Ich habe am Ende Anfragen mit Solrj implementiert. – Eugeny