我将索引ads
定义如下:
fos_elastica:
clients:
default: { host: %elastica_host%, port: %elastica_port% }
indexes:
ads:
types:
brand:
mappings:
name:
type: string
boost: 5
slug:
type: string
boost: 4
date : ~
isPublished: ~
user:
type: nested
properties:
username: ~
email: ~
persistence:
driver: orm
model: Minn\AdsBundle\Entity\Brend
elastica_to_model_transformer:
service: minn_ads.transformers_elastica.brand
provider: ~
listener:
immediate: ~
finder: ~
仅供参考: 1.这是Brend
与User
与@ManyToOne相关联的方式
/**
* @ORM\ManyToOne(targetEntity="Minn\UserBundle\Entity\User")
* @ORM\JoinColumn(nullable=false)
*/
private $user;
仅供参考: 2.我正在使用F dev-master
分支用于FOSElasticaBundle和Elastica。对于elasticsearch,我使用的是2.1.1。
填充命令php app/console fos:elastica:populate
始终返回此错误:
[弹性曲线\异常\ ResponseException]
{“root_cause”:[{“type”:“mapper_parsing_exception”,“reason”:“[user]的映射定义具有不受支持的参数:[store:true]”}],“type”:“mapper_parsing_exception”,“reason” :“无法解析映射[品牌]:
[user]的映射定义具有不受支持的参数:[store:true]“,”caused_by“:{”type“:”mapper_parsing_exception“,”reason“:”[user]的映射定义具有不受支持的参数:[store:true] “}}
我检查了app/logs/dev.log
,发现生成的索引ads
的映射有一个额外的参数"store":true
。你可以检查一下:
[2015-12-20 21:28:21] elastica.DEBUG:logging request {“path”:“ads /”,“method”:“PUT”,“data”:{“mappings” :{ “品牌”:{ “属性”:{ “名”:{ “类型”: “串”, “提升”:5, “存储”:真正}, “弹头”:{ “类型”: “串” , “提升”:4, “存储”:真正}, “日期”:{ “类型”: “串”, “存储”:真正} “|评论”:{ “类型”: “串”, “商店” :真}, “用户”:{ “类型”: “嵌套”, “属性”:{ “用户名”:{ “类型”: “字符串”, “存储”:真}, “电子邮件”:{ “类型” : “串”, “存储”:真正}}, “存储”:真正}}, “dynamic_date_formats”:[], “_元”:{ “模式”: “明尼苏达州\ AdsBundle \实体\ Brend”}}}} “查询”:[], “连接”:{ “配置”:{ “报头”:[]}, “宿主”: “127.0.0.1”, “端口”:9200, “记录器”:“fos_elastica.logger “,”启用“:true}} []
以下是额外"store": true
的映射。有没有关于如何配置FOSElasticaBundle以获得没有"store": true
额外行的映射的想法?
{
"mappings": {
"brand": {
"properties": {
"name": {
"type": "string",
"boost": 5,
"store": true
},
"slug": {
"type": "string",
"boost": 4,
"store": true
},
"date": {
"type": "string",
"store": true
},
"isPublished": {
"type": "string",
"store": true
},
"user": {
"type": "nested",
"properties": {
"username": {
"type": "string",
"store": true
},
"email": {
"type": "string",
"store": true
}
},
"store": true # extra line! If deleted, it will work!
}
}
}
}
}