2017-03-28 7 views
0
"chods": { 
    "mappings": { 
    "chod": { 
     "properties": { 
      "state": { 
       "type": "text" 
      } 
     } 
    }, 
    "chods": {}, 
    "variant": { 
     "_parent": { 
      "type": "chod" 
     }, 
     "_routing": { 
      "required": true 
     }, 
     "properties": { 
      "percentage": { 
       "type": "double" 
      } 
     } 
    } 
    } 
}, 

Wenn ich ausführen:Kinder zuordnen nicht richtig in elastisch Eltern

PUT /chods/variant/565?parent=36442 
{ // some data } 

Es gibt:

{ 
    "_index":"chods", 
    "_type":"variant", 
    "_id":"565", 
    "_version":6, 
    "result":"updated", 
    "_shards":{ 
    "total":2, 
    "successful":1, 
    "failed":0 
    }, 
    "created":false 
} 

Aber wenn ich diese Abfrage ausführen:

GET /chods/variant/565?parent=36442 

Es gibt eine Variante mit Eltern = 36443

012 zurück
{ 
    "_index": "chods", 
    "_type": "variant", 
    "_id": "565", 
    "_version": 7, 
    "_routing": "36443", 
    "_parent": "36443", 
    "found": true, 
    "_source": { 
     ... 
    } 
} 

Warum gibt es mit Eltern 36443 und nicht 36442 zurück?

Antwort

0

Wenn ich versuchte, dies mit Ihren Schritten zu reproduzieren, bekam ich das erwartete Ergebnis (Version = 36442). Ich habe festgestellt, dass nach der Eingabe des Dokuments mit der Ausgang "_version":6 ist. In Ihrem GET des Dokuments wird "_version": 7 zurückgegeben. Ist es möglich, dass Sie eine andere Version des Dokuments veröffentlicht haben?

Ich bemerkte auch, dass GET /chods/variant/565?parent=36443 würde nicht tatsächlich durch die Eltern-ID - der Abfrageparameter wird ignoriert. Wenn Sie tatsächlich von Eltern-ID filtern möchten, ist dies die Abfrage Sie suchen:

GET /chods/_search 
{ 
    "query": { 
    "parent_id": { 
     "type": "variant", 
     "id": "36442" 
    } 
    } 
} 
+0

gut ich überprüfte Protokolle und nein, ich bin nicht. Oder vielleicht bin ich, weil ich zwei PUT-Anrufe mache, aber mit anderer Elternnummer. Auch wenn ich GET-Anfrage mit der Versionsnummer mache, dann gibt es version_conflict_engine_exception zurück –

+0

Welche Elternnummer hast du zuletzt? Ich bin ziemlich sicher, dass Sie eine 'version_conflict_engine_exception' erhalten, wenn Sie versuchen, eine Version eines Dokuments zu aktualisieren, das nicht das letzte ist. – fylie

+0

Das letzte Elternteil ist 36443, aber ich bekomme Ausnahme beim Abrufen von Daten wie GET/chods/variant/565? Parent = 36442 & version = 1 und nicht während der Aktualisierung –

0

Wie @fylie wies das Hauptproblem, ist, dass, wenn Sie gleiche ID des Dokuments verwenden, werden Sie Ihr Dokument erhalten von der letzten Version überschrieben - eine Art

Lassen Sie uns sagen, dass wir Index/Tests und Typ „a“ haben, welches Kind vom Typ „Test“ ist und wir folgende Befehle:

PUT /tests/a/50?parent=25 
{ 
    "item": "C" 
} 

PUT /tests/a/50?parent=26 
{ 
    "item": "D" 
} 

PUT /tests/a/50?parent=50 
{ 
    "item": "E", 
    "item2": "F", 
} 

Was wird das Ergebnis sein ? Nun, es kann zur Erstellung von 1 - 3 Dokumenten führen. Wenn es zum selben Shard routet, erhalten Sie ein Dokument, das 3 Versionen haben wird.

Wenn es zu 3 verschiedenen Shards routet, erhalten Sie 3 neue Dokumente.

+0

[Hier ist] (https://discuss.elastic.co/t/can-two-documents-with-the-same-id-exist-if-the-have-different-parents/10988/5) ein Beitrag über warum ist das, wenn du neugierig bist? :) (Ich war neugierig) – fylie

Verwandte Themen