FOSElastica + JMs сериализатор искаженные данные - PullRequest
0 голосов
/ 04 мая 2018

Я установил ElasticSearch 6 с их образом Docker, и все работает хорошо.

Затем я установил и настроил FOSElastica, как сказал док.

Это следующий конфиг fos_elastica

fos_elastica:
    clients:
        default: { host: '%env(ELASTICSEARCH_HOST)%', port: '%env(ELASTICSEARCH_PORT)%' }
    serializer:
        serializer: jms_serializer
    indexes:
        app:
            client: default
            types:
                user:
                    serializer:
                        groups: [elastica]
                    persistence:
                        driver: orm
                        model: AppBundle\Entity\User
                        provider: ~
                        listener: ~
                        finder: ~

И модель моей сущности User для предоставления группы сериализатора elastica некоторому полю

AppBundle\Entity\User:
    exclusion_policy: ALL
    properties:
        firstname:
            expose: true
            groups: [elastica, list, details]
        lastname:
            expose: true
            groups: [elastica, list, details]
        locale:
            expose: true
            groups: [elastica, details]

Сериализатор работает хорошо для моего API и хорошо настроен

 jms_serializer:
    metadata:
        auto_detection: true
        directories:
            AppBundle:
                namespace_prefix: 'AppBundle'
                path: '%kernel.project_dir%/config/serializer'

Когда я пытаюсь заполнить ElasticSearch, который я получаю, я думаю, что ошибка сериализации

In Http.php line 181:

[Elastica\Exception\ResponseException]                                              
Malformed action/metadata line [3], expected START_OBJECT but found [VALUE_STRING]

Я попытался установить тип поля, используя properties.type config в конфигурации fos_elastica, но безуспешно.

Я пытался с другим объектом, и я получаю ту же ошибку.

Я уже работал с FOSElasticaBundle ~ 1 год назад над тем же проектом, и население работало ...

Мне не удалось найти проблему, если есть ошибка JMSSerializer / FOSElastica или неверная конфигурация

Я что-то упустил в конфигурации? У вас уже была эта проблема?

Ответы [ 2 ]

0 голосов
/ 21 декабря 2018

Чтобы избежать этой ошибки, просто удалите

JSON_PRETTY_PRINT

из вашей конфигурации JMS / Symfony Serializer.

0 голосов
/ 15 августа 2018

У меня была похожая проблема. Вот оригинальные эластичные конфиги (которые дали эту ошибку).

fos_elastica:
clients:
    default: { host: '%env(ELASTICSEARCH_HOST)%', port: '%env(ELASTICSEARCH_PORT)%' }
serializer:
    serializer: jms_serializer
indexes:
    app:
        finder: ~
        types:
            goods:
                properties:
                    name: { type: text }
                    brand: { type: text }
                    cost: { type: float }
                    category:
                        type: "object"
                        properties:
                          id: ~
                          name: ~
                    goodsDescriptions:
                        type: "object"
                        properties:
                          id: ~
                          name: ~
                          description: ~
                persistence:
                    driver: orm
                    model: App\Entity\Goods\Goods
                    provider: ~
                    finder: ~
                    repository: App\SearchRepository\GoodsRepository

Однако я долго залезал в поставщика foselastic и заметил, что данные для его добавления основаны на jms_serializer, что было очевидно, но в то время я думал иначе. Удалив эту сериализацию и она сработала. У нас разные настройки, но, возможно, это даст вам представление.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...