Solr überschreibt nicht - duplizierte uniqueKey-Einträge

Ich habe ein Problem mit Solr 5.3.1. Mein Schema ist ziemlich einfach. Ich habe einen eindeutigen Schlüssel, der die "ID" als Zeichenfolge ist. indiziert, gespeichert und erforderlich, nicht mehrwertig.

Ich füge Dokumente zuerst mit einem "content_type: document_unfinished" und dann mit @ hinzüberschreibe dasselbe Dokument mit derselben ID, aber einem anderen Inhaltstyp: Dokument. Das Dokument befindet sich dann zweimal im Index. Der einzige eindeutige Schlüssel ist wiederum "id" als Zeichenfolge. Die ID stammt ursprünglich aus einem MySQL-Index-Primär-Int.

Auch so sieht es nicht nur einmal aus:

http: //lucene.472066.n3.nabble.com/uniqueKey-not-enforced-td4015086.htm

http: //lucene.472066.n3.nabble.com/Duplicate-Unique-Key-td4129651.htm

In meinem Fall werden nicht alle Dokumente im Index dupliziert, nur einige. Ich nahm anfangs an, dass sie beim Festschreiben überschrieben werden, wenn derselbe eindeutige Schlüssel im Index vorhanden ist. Was nicht so zu funktionieren scheint, wie ich es erwartet habe. Ich möchte nicht nur einige Felder im Dokument aktualisieren, sondern es vollständig durch alle untergeordneten Felder ersetzen.

Einige Statistiken: rund 350.000 Dokumente im Index. Meistens mit childDocuments. Die Dokumente werden durch ein Feld "content_type" unterschieden. Ich habe SolrJ verwendet, um sie auf diese Weise zu importieren:

HttpSolrServer server = new HttpSolrServer(url);
server.add(a Collection<SolrInputDocument>);
server.commit();

Ich füge immer wieder ein ganzes Dokument mit allen Kindern hinzu. Es ist nichts Besonderes. Am Ende habe ich doppelte Dokumente für denselben uniqueKey. Es gibt keine Seiteninjektionen. Ich betreibe nur Solr mit dem integrierten Steg. Ich öffne den Lucene-Index in Java nicht "manuell".

Was ich dann gemacht habe war das löschen + wieder einfügen. Das schien eine Weile zu funktionieren, aber dann begann unter bestimmten Umständen diese Fehlermeldung:

Parent query liefert ein Dokument, das nicht vom Elternfilter @ abgeglichen wir

Das Dokument, in dem das passiert, scheint völlig zufällig zu sein, nur eines scheint sich herauszustellen: Es ist ein untergeordnetes Dokument, in dem es passiert. Ich führe nichts Besonderes aus, lade im Grunde genommen das solr-Paket von der Website herunter und starte es mitbin/solr start

Keine Ideen?

EDIT 1

Ich denke, ich habe das Problem gefunden, was anscheinend ein Bug ist? So reproduzieren Sie das Problem:

Ich habe Solr 5.3.1 auf ein Debian in einer virtualBox heruntergeladen und es mit @ gestartbin/solr start. Hinzufügen eines neuen Kerns mit dem Basis-Konfigurationssatz. An der Grundkonfiguration hat sich nichts geändert. Kopieren Sie sie einfach und fügen Sie den Core hinzu.

Dies führt zu zwei Dokumenten mit derselben ID im Index:

    SolrClient solrClient = new HttpSolrClient("http://192.168.56.102:8983/solr/test1");
    SolrInputDocument inputDocument = new SolrInputDocument();
    inputDocument.setField("id", "1");
    inputDocument.setField("content_type_s", "doc_unfinished");
    solrClient.add(inputDocument);
    solrClient.commit();
    solrClient.close();

    solrClient = new HttpSolrClient("http://192.168.56.102:8983/solr/test1");
    inputDocument = new SolrInputDocument();
    inputDocument.setField("id", "1");
    inputDocument.setField("content_type_s", "doc");
    SolrInputDocument childDocument = new SolrInputDocument();
    childDocument.setField("id","1-1");
    childDocument.setField("content_type_s", "subdoc");
    inputDocument.addChildDocument(childDocument);
    solrClient.add(inputDocument);
    solrClient.commit();
    solrClient.close();

Suche mit:

http: //192.168.56.102: 8983 / solr / test1 / select? q =% 3A & wt = json & indent = true

führt zu folgender Ausgabe:

{

  "responseHeader": {
    "status": 0,
    "QTime": 0,
    "params": {
      "q": "*:*",
      "indent": "true",
      "wt": "json",
      "_": "1450078098465"
    }
  },
  "response": {
    "numFound": 3,
    "start": 0,
    "docs": [
      {
        "id": "1",
        "content_type_s": "doc_unfinished",
        "_version_": 1520517084715417600
      },
      {
        "id": "1-1",
        "content_type_s": "subdoc"
      },
      {
        "id": "1",
        "content_type_s": "doc",
        "_version_": 1520517084838101000
      }
    ]
  }
}

Was mache ich falsch

Antworten auf die Frage(2)

Ihre Antwort auf die Frage