Ich habe einen Java-Job, der Dokumente mit SolrCloud in Solr schreibt. Eingabedaten werden in eine Karte verschiedener Entitäten transformiert, und jede Entität wird dann entsprechend ihrem Entitätstyp in die Solr-Sammlung geschrieben.Garantie für eine Solr-Commit ist aufgetreten
Mein Code sieht so aus:
public void updateSolrDocumentsToCollection(String collectionName, Collection<SolrInputDocument> documents) {
this.solrClient.setDefaultCollection(collectionName);
UpdateRequest updateRequest = new UpdateRequest();
updateRequest.add(documents);
updateRequest.setCommitWithin(100); //100ms
updateRequest.process(this.solrClient);
}
Diese Methode für jede Sammlung einmal aufgerufen wird, auf die ich schreibe, und dann ein letzter Anruf getätigt wird ein letztes Dokument an eine audit
Sammlung zu schreiben.
In Integrationstests warte ich, bis ich das Dokument aus der audit
Sammlung abrufen und dann die Dokumente aus den Entitätssammlungen abrufen kann.
Das Problem
Ich mache die Annahme, dass, weil audit
dauern geschrieben wird, sobald ich aus audit
abrufen kann, dann kann ich von einer anderen Sammlung abrufen ich zuvor geschrieben habe. Dies scheint jedoch nicht wahr zu sein. Etwa 1% der Zeit wird ein Audit-Dokument abgerufen, aber die Tests schlagen fehl, weil die anderen Collections ihre Dokumente noch nicht enthalten.
Auch das Hinzufügen einer Thread.sleep(1000)
vor dem Abrufen von Dokumenten hilft nicht. Das ist das Zehnfache des Commit-Fensters, also sollte ich garantiert Dokumente sehen?
Wie kann ich garantieren, dass alle Dokumente durchsuchbar sind?
Es ist SolrCloud tut mir leid, ich habe die Frage jetzt geklärt. –