我使用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错误或错误配置,我找不到问题的位置并不成功
我是否遗漏了配置中的内容?你有这个问题吗?
答案 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序列化器配置。