FOSElastica + JMs序列化程序格式错误的数据

时间:2018-05-04 16:14:12

标签: php symfony elasticsearch serialization

我使用Docker镜像安装了ElasticSearch 6,一切运行良好。

然后我按照doc说的那样安装并配置了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: ~

我的用户实体的模型将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]

我尝试在fos_elastica配置中使用properties.type配置设置字段输入,但没有成功。

我尝试了另一个实体,但我得到了同样的错误。

我已经和FOSElasticaBundle一起工作〜1年前在同一个项目上,人口正在工作......

如果存在JMSSerializer / FOSElastica错误或错误配置,我找不到问题的位置并不成功

我是否遗漏了配置中的内容?你有这个问题吗?

2 个答案:

答案 0 :(得分:1)

我有类似的问题。这是原始的弹性配置(导致此错误)。

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的,这很明显,但是当时我却以为是。通过删除此序列化,它可以工作。 我们有不同的设置,但也许会给您一个想法。

答案 1 :(得分:0)

为避免此错误,只需删除

JSON_PRETTY_PRINT

通过您的JMS / Symfony序列化器配置。