2014-06-05 10 views
9

Ich bin beschäftigt, Elasticsearch für ein neues Projekt auschecken, die ich beginne. Ich laufe gerade Symfony2.5, mit dem neuesten FOSelasticaBundle und all dem. Ich mache ein paar Benchmarks in Bezug auf die Leistung des Bundles (ich weiß, dass Elastik an sich ziemlich schnell ist), aber ich bin auf ein kleines Problem gestoßen, das möglicherweise leicht zu lösen ist, wenn nur die Dokumentation des Pakets ausführlicher wäre.FOSlasticaBundle und Lehre Hydration

Meine eigentliche Frage ist einfach wie, anstatt ein Array von Doctrine-Objekten (die ich glaube, sind über eine DB-Abfrage gefüllt) zurückgegeben, um eine "rohe" Array der Antwort von Elastica selbst zurückgeben? Einschließlich der Antwortzeit, der maximalen Punktzahl, etc. Die Dokumente für den FOSelasticaBundle sind ziemlich vage zu diesen Themen ...

Es scheint ein bisschen kontraproduktiv und langsam, die Datenbank erneut abzufragen, wenn Sie bereits alle haben die Informationen, die Sie von elastischen suchen? Oder ist da etwas sehr offensichtlich, dass ich hier vermisse?

Vielen Dank für jede Hilfe!

Antwort

15

Die Antwort gefunden ... Ein bisschen Schlaf kann eine Person einen langen Weg bekommen, wie es scheint.

Wenn jemand versucht, dies herauszufinden, nach dem Durchlaufen der ganzen hydrate: false Sache und was nicht (was nicht auf diese Frage in irgendeiner Weise verwandt ist, übrigens).

Verwenden Sie einfach den Service:

$this->get('fos_elastica.index.app.foo')->search($query) die Elastica Typ Instanz zu erhalten.

$this->get('fos_elastica.finder.app.foo')->find($query) erhält ein Array von Doktrin-Entitäten.

Ich hoffe, das hilft jemandem.

+0

Haben Sie herausgefunden, ob es irgendwie möglich ist, JSON-Ergebnisse in einem benutzerdefinierten FOSlastica-Repository wiederherzustellen? – Zap

+0

@Zap, Elastica sollte nur eine Reihe von Werten zurückgeben, einschließlich der Gesamttreffer, der Zeit usw. Die meisten Sachen, die man bekommen würde, wenn man gerade Curl-Abfragen ausführt. Wenn Sie wirklich wollen, könnten Sie immer json_encode für den zurückgegebenen Wert verwenden, aber ich kann nicht wirklich sehen, warum Sie das wollen. – iLikeBreakfast

+3

@iLikeBreakfast ist es in der Tat möglich, den Indexdienst zu verwenden. Dies bedeutet jedoch, dass Sie die Paginierung, die im Finder implementiert ist, nicht verwenden können. Wir haben dieses Problem gelöst, indem wir unseren eigenen Finder-Service erstellt haben. Bei der Instanziierung setzen wir unseren eigenen elasticaToModel-Transformator ein. Dieser Transformer ist nur eine Implementierung des ORM ElasticaToModelTransformers, aber wir haben einen zusätzlichen Setter hinzugefügt, um die Hydration mit Doctrine-Objekten zu deaktivieren. Stattdessen geben wir nur ein Array der Daten aus den Elastica-Ergebnisobjekten zurück. – Jasperdc