FOSElasticaBundle сортировка не работает
Конфигурация моего типа эластика выглядит следующим образом:
acme_article:
mappings:
title: {type:string, index_analyzer:acme_analyzer}
content: {type:string, index_analyzer:acme_analyzer}
slug: ~
media: {type:string, index_analyzer:acme_analyzer}
categories:
type: "object"
properties:
name: ~
id: ~
instance:
type: "object"
properties:
name: ~
created_by: ~
created_at: ~
У меня есть класс репозитория, который расширяет FOS\ElasticaBundle\Repository, и все работает хорошо, кроме сортировки.
$query = new \Elastica\Query();
$query->setSort(array('created_at' => array('order' => 'desc')));
return $this->find($query);
Получение какого-то релевантного результата, совершенно без порядка. Затем я попытался добавить идентификатор модели в индекс и попытаться отсортировать по идентификатору, но также безуспешно.
1 ответ
Решение состоит в том, чтобы установить {type:date} в поле selected_at. В этом случае ES сортировка по отметке времени и все в порядке.
Сортировка по идентификатору не работает, потому что каким-то образом category.id переопределяет основной идентификатор, и тогда я получил результаты, упорядоченные по category.id вместо идентификатора объекта.