ONGR ElasticSearchBundle Converter в пользовательском фильтре
В старых версиях ONGR\ElasticSearchBundle был класс для работы с результатом агрегации:
AggregationIterator
и у него был метод
offsetGet()
в котором был конвертер для преобразования массива в документ. Теперь в новых версиях конвертер был удален оттуда и существует только в
ONGR\ElasticsearchBundle\Result\DocumentIterator
DocumentIterator был бы идеальным, потому что в объекте пользовательского фильтра он есть
public function getViewData(DocumentIterator $result, ViewData $data) {
но конвертер защищенным способом:
protected function convertDocument(array $document) {
И я не хочу редактировать продавца. Я не нашел ничего в документах о том, как использовать конвертер при разборе данных в службе пользовательских фильтров.
Сейчас я просто использовал обходной путь:
$documentIterator = \Closure::bind(function (DocumentIterator $result) use ($topHits) {
$documents = [];
foreach ($topHits as $document) {
$documents[] = $result->convertDocument($document);
}
return $documents;
}, null, 'ONGR\ElasticsearchBundle\Result\DocumentIterator');
$offersDocument = $documentIterator($result);
Но реальное решение было бы лучше.