2016-11-04 3 views
0

Ich habe den seltsamen Effekt, dass eine Suche auf einem Index ein Dokument zurückgibt, das ich gerade zuvor gelöscht habe. Ein "Get" funktioniert richtig. Mache ich etwas falsch? Die Suche hat keine Einschränkungen (client.prepareSearch("test").execute(...))Suche gibt Dokument nach dem Löschen

Ich bin ein „ESIntegTestCase“ mit Elasticsearch 5,0

@Test 
public void testES() throws Exception { 

    String index = "test"; 
    String type = "event"; 
    String doc = "{\"Key0\":\"Val0\"}"; 

    createIndex(index); 

    Semaphore sem = new Semaphore(0); 

    client().prepareIndex(index, type).setSource(doc).execute(handleOrError(postResp -> { 
     client().prepareGet(postResp.getIndex(), postResp.getType(), postResp.getId()).execute(handleOrError(getResp -> { 
      printGR(getResp); 
      client().prepareSearch(postResp.getIndex()).execute(handleOrError(searchResponse -> { 
       printSR(searchResponse); 
       client().prepareDelete(postResp.getIndex(), postResp.getType(), postResp.getId()).execute(handleOrError(resp -> { 
        printDR(resp); 
        client().prepareGet(postResp.getIndex(), postResp.getType(), postResp.getId()).execute(handleOrError(getResp2 -> { 
         printGR(getResp2); 
         client().prepareSearch(postResp.getIndex()).execute(handleOrError(searchResponse2 -> { 
          printSR(searchResponse2); 
          sem.release(); 
         })); 
        })); 
       })); 
      })); 
     })); 
    })); 

    sem.acquire(); 
} 

Drucke laufen:

1) GetResponse: {"_index":"test","_type":"events","_id":"AVgv1NHPHZ0vJaA-eRhJ","_version":1,"found":true,"_source":{"Key0":"Val0"}} 


2) SearchResponse:{"took":2,"timed_out":false,"_shards":{"total":5,"successful":5,"failed":0},"hits":{"total":1,"max_score":1.0,"hits":[{"_index":"test","_type":"events","_id":"AVgv1NHPHZ0vJaA-eRhJ","_score":1.0,"_source":{"Key0":"Val0"}}]}} 


3) DeleteResponse: DeleteResponse[index=test,type=events,id=AVgv1NHPHZ0vJaA-eRhJ,version=2,result=deleted,shards="_shards"{"total":2,"successful":2,"failed":0}] 


4) GetResponse: {"_index":"test","_type":"events","_id":"AVgv1NHPHZ0vJaA-eRhJ","found":false} 


5) SearchResponse:{"took":1,"timed_out":false,"_shards":{"total":5,"successful":5,"failed":0},"hits":{"total":1,"max_score":1.0,"hits":[{"_index":"test","_type":"events","_id":"AVgv1NHPHZ0vJaA-eRhJ","_score":1.0,"_source":{"Key0":"Val0"}}]}} 

Antwort

1

Sie fanden den Unterschied zwischen dem Suchindex und tun eine Anfrage bekommen. Eine Get-Anfrage nutzt auch das Transaktionslog. Wenn das Löschen Auswirkungen auf die Suche haben soll, müssen Sie eine Aktualisierung durchführen. Mit elastic 5 gibt es jetzt eine Option, nach einem Einfügen oder Löschen auf eine Aktualisierung zu warten. Die Verwendung dieser Funktionalität sollte Ihnen geben, was Sie wollen. Weitere Informationen finden Sie hier: https://www.elastic.co/guide/en/elasticsearch/reference/current/docs-refresh.html

+0

Vielen Dank! Durch das Ändern der Aktualisierungsrichtlinie für das Löschen wurde das Problem behoben. – Fabian