我安装了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: AppBundleEntityUser
provider: ~
listener: ~
finder: ~
以及我的用户实体的模型,将elastica
序列化程序组提供给某个字段
AppBundleEntityUser:
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:
[ElasticaExceptionResponseException]
Malformed action/metadata line [3], expected START_OBJECT but found [VALUE_STRING]
我尝试在fos_elastica配置中使用properties.type
配置设置字段类型,但没有成功。
我尝试使用另一个实体,但出现相同的错误。
我已经在 FOSElasticaBundle ~1 年前在同一个项目上工作,并且人们正在工作......
我没有成功找到问题所在,如果有JMSSerializer/FOSElastica错误或配置错误
我错过了配置中的某些内容吗?你已经有这个问题了吗?
我也有类似的问题。以下是原始的弹性配置(给出了此错误(。
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: AppEntityGoodsGoods
provider: ~
finder: ~
repository: AppSearchRepositoryGoodsRepository
但是,我在供应商foselastic 内部爬了很长时间,并注意到添加它的数据是基于jms_serializer的,这是显而易见的,但当时我并不这么认为。通过删除此序列化,它被工作了。 我们有不同的设置,但也许它会给你一个想法。
要避免此错误,只需删除
JSON_PRETTY_PRINT
来自您的 JMS/Symfony Serializer 配置。