Сортировка FOSElasticaBundle не работает

Конфигурация моего типа elastica выглядит следующим образом:

            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: ~

У меня есть класс Repository, который расширяет FOS\ElasticaBundle\Repository, и все работает хорошо, кроме сортировки.

    $query = new \Elastica\Query();
    $query->setSort(array('created_at' => array('order' => 'desc')));        
    return $this->find($query);

Получение какого-то нерелевантного результата, совершенно без порядка. Затем я попытался добавить идентификатор модели в индекс и попытаться отсортировать по идентификатору, но также безуспешно.


person Srdjan    schedule 05.02.2015    source источник


Ответы (1)


Решение состоит в том, чтобы установить {type:date} в поле created_at. В таком случае ES сортирует по метке времени и все ок.

Сортировка по идентификатору не работает, потому что в некотором роде category.id переопределяет основной идентификатор, а затем я получаю результаты, упорядоченные по category.id вместо идентификатора объекта.

person Srdjan    schedule 06.02.2015