2016-05-19 4 views
0

Um die Suchergebnisse zu beschleunigen, verwende ich eine benutzerdefinierte Abfrage für den elastica_to_model_transformer, der die 20 oder mehr Werte für die Auflistungsseite in Form von Teilelementen abruft .Unvollständige Flüssigkeitszufuhr beim Einfügen von Dokumenten nach einer Suche mit einem benutzerdefinierten Transformator

persistence: 
    elastica_to_model_transformer: 
     query_builder_method: createSearchQueryBuilder 

Allerdings habe ich eine unbeabsichtigte Nebenwirkung gefunden. Wenn ich einige Entitäten mithilfe einer Suche abrufe und dann einen Wert in diesen Entitäten aktualisiere, werden beim Zurückführen des Objekts in ein elasticsearch-Dokument zum Einfügen in den Index nur die etwa 20 hydratisierten Werte zum Index hinzugefügt.

Gibt es eine Möglichkeit, sicherzustellen, dass die Objekte vor der Aktualisierung des Indexes vollständig hydratisiert sind, oder kann ich die benutzerdefinierte Abfrage bei bestimmten Suchen ignorieren?

Antwort

0

Das Problem tritt auf, weil createSearchQueryBuilder eine partielle Entität zurückgibt und nur diese partielle Entität im Index aktualisiert/eingefügt wird.

So sieht es aus wie die Lösung

$em->refresh($entity); 

verwenden, die das Unternehmen aus der Datenbank neu geladen.

Dies kann verwendet werden;

  • entweder das Skript das Update ausgeführt wird, bevor Änderungen vorgenommen werden,

Wenn Sie benutzerdefinierte Abfrage gibt teilweise zu aktualisieren oder fügen Sie in den Index verwendet

  • oder in der postUpdate einer Lehre Ereignis-Listener Ergebnisse für verbundene Entitäten, dann ist es wichtig,

    cascade={"refresh"} 
    

    zum Mapping für diese Beziehungen hinzuzufügen.

  • Verwandte Themen