Symfony2 FOSElasticaBundle update-index für alle Elemente im Zusammenhang mit der Entität aktualisiert
Ich bin mit FOSElasticaBundle und Lehre in mein Projekt, und mein code funktioniert für die selektive Aktualisierung des index mit der Lehre lifecycle-events. Die Frage, die ich vor wenn ich ein update der eine verknüpfte Entität getrennt.
Beispielsweise kann eine person in Beziehung zu einem Unternehmen durch eine manytomany-Beziehung. Wenn ich update den Namen des Unternehmens durch eigene Entität direkt und unmittelbar, dann die Indizes für die person, die auf das Unternehmen beziehen, veraltet und immer noch beziehen sich auf das Unternehmen alte name.
Ich bin ein bisschen verloren, wie Sie damit umgehen, hat jemand irgendwelche Vorschläge? Muss ich dabei auf eine geplante Aktualisierung des index und zu bewältigen ungenau-index-Daten in der Zwischenzeit, oder gibt es eine Möglichkeit, die ich anrufen kann ein update für Entitäten, die im Zusammenhang mit der Einheit, die aktualisiert wurde.
Verlasse ich mich auf JMSSerializer Gruppen zu etablieren, die die Zuordnungen. Ich Schätze das ist vielleicht nicht der beste Weg, Dinge zu tun, in der langfristigen.
Du musst angemeldet sein, um einen Kommentar abzugeben.
Ich habe das gleiche problem. Es scheint meine installation (Symfony 2.5.4 und FOSElastica 3.0.4) unterscheidet sich Recht wenig von Ihnen, obwohl. Daher gab es einige Probleme, um den code zu arbeiten. Ich werde Entsendung meine Lösung, weil es kann nützlich sein, für die anderen Entwickler da draußen.
Den Hörer nicht in die FOS\ElasticaBundle\Doctrine\ORM\, aber in FOS\ElasticaBundle\Lehre. So müssen Sie diese verwenden.
Auch ich musste Doctrine\Common\EventArgs statt Doctrine\ORM\Event\LifecycleEventArgs, weil sonst meine eigenen postUpdate-Methode war nicht kompatibel mit der in der BaseListener.
In meiner app, einen Kurs (seminar) können eine Menge von Sitzungen, aber in diesem Projekt, elastica wird nur über diese Sitzungen. Die app muss wissen, einige details aus dem Kurs, die im Zusammenhang mit der Sitzung natürlich. So, hier ist mein code:
In der config.yml meine elastica bundle config sieht wie folgt aus:
Ein wenig weiter, immer noch in der config.yml
Mein eigener listener (XXX\CourseBundle\EventListener\ElasticaCourseListener) sieht dann wie folgt aus:
Nun, wenn ich ein update für einen Kurs, es wird aktualisiert, sobald eine verschachtelte Objekt in ElasticSearch 😉
Ich glaube, ich habe die Lösung gefunden auf dieser Seite https://groups.google.com/forum/#!Thema/elastica-php-client/WTONX-zBTI4
Dank Cassiano
Grundsätzlich benötigen Sie zum erweitern der FOS\ElasticaBundle\Doctrine\ORM\Hörer Sie können sich also für die verbundenen Entitäten, und aktualisieren Sie dann Ihren index, wie gut.
und Ihre Dienstleistungen wie folgt definiert
diese aktualisieren dann die Indizes für die beiden 🙂
Ich bin mit FosElastica 3.1.0 und ich habe versucht die Lösung von Julien Rm ohne Erfolg 🙁
Nach vielen Tagen der Forschung, habe ich endlich die Lösung gefunden
hier
Hoffe diese Hilfe !
alle Kommentare und meine Forschung, habe ich ein generischer Kern für auto-index auf untergeordnete Objekte, mit fosElastica:
https://gist.github.com/Nightbr/ddb586394d95877dde8ed7445c51d973
In der Tat, ich überschreiben die Standard-Listener aus FOSElastica und ich füge die
function updateRelations($entity)
. Wir suchen alle Beziehungen verknüpft mit der$entity
und wenn es indiziert in ES (ES-Typ vorhanden ist) für die Aktualisierung der zugehörigen Dokumente.Wenn jemand will, um es zu betrachten und stellen keine Verbesserung, es wäre toll! ^^
Vielen Dank im Voraus
Sorry, kann ich keinen Kommentar unter deiner Antwort aber etwas fehlt in der Lösung. Sie überschreiben müssen, preRemove zu.
Mit der BC Break #729 von FosElastica 3.1.0, Dinge haben sich geändert und der code oben nicht funktioniert :
Für diejenigen, die versuchen, damit es funktioniert mit FOSElastica 3.1.X hier ist, wie ich Tat, zu verwalten, um eine verschachtelte widersprochen indiziert werden, in die seine Eltern in Elastic Search bei persistierenden/aktualisieren/entfernen von einer verschachtelten Einheit :
Definieren der service-listener :
Erstellen Sie den listener :
Hoffe diese Hilfe !
Article
welche FunktiongetParent()
hat null zurück? Merci beaucoup!Ich bin mit Symphony 3 und FOSElasticaBundle 3.2 und ich habe die Dinge ein wenig anders.
Nach der überprüfung der Codes, die in den anderen Antworten, das hat mir sehr geholfen, ich habe beschlossen, nicht zu erweitern, um die Standard-listener. Stattdessen lassen Sie es seine Sache und ich habe gerade meine eigene listener.
Habe ich einige Kategorien (1) die mehrere (viele-zu-viele) Themen (2) die mehrere (einer-an-viele) Beiträge (3).
Die Beiträge sind die Entitäten gespeichert, die in Elasticsearch mit infos auf Ihren jeweiligen Gegenstand und seine eigenen Kategorien.
Etwa so:
Die service-definition (app/config/services.yml)
Und die Zuhörer AppBundle\EventListener\UpdateElasticaPostListener.php
... Und das ist es! Ich habe nicht versucht, es für das entfernen von Ereignis-und jetzt, wo ich darüber nachdenke, vielleicht ist dies die Lösung wäre nicht das beste für ihn... aber vielleicht ist es...
Vielen Dank an @Ben Stinton und @maercky oben.
Ich hoffe, es hilft! (dies ist meine erste Antwort hier so Rum ich hoffe, dass ich nicht vermasseln)