gpt4 book ai didi

symfony - 无法使用FOSElasticaBundle设置亲子

转载 作者:行者123 更新时间:2023-12-02 22:20:23 25 4
gpt4 key购买 nike

我正在尝试建立父子关系,但似乎无法正确获取映射配置。我正在使用Symfony2.5,FOSElastica 3.0.9和Elasticsearch 1.4.4

这是我的映射中的relevent部分:

# fos elastica
fos_elastica:
clients:
default: { host: 127.0.0.1, port: 9200 }
serializer:
callback_class: FOS\ElasticaBundle\Serializer\Callback
serializer: serializer
indexes:
index:
index_name: index_%kernel.environment%
client: default
types:
company:
mappings:
id:
type: "long"
company_name:
type: "string"
fields:
raw:
type: "string"
index: "analyzed"
index_analyzer: "sortable"
persistence:
elastica_to_model_transformer:
ignore_missing: true
driver: orm # orm, mongodb, propel are available
model: Alpha\RMSBundle\Entity\Company
provider: ~
finder: ~
listener: ~
serializer:
groups: [company]
job:
mappings:
id:
type: "long"
company:
type: "object"
properties:
id:
type: "long"
_parent:
type: company
property: company
identifier: id
#_routing:
# required: true
# path: company
persistence:
elastica_to_model_transformer:
ignore_missing: true
driver: orm # orm, mongodb, propel are available
model: Alpha\RMSBundle\Entity\JobOpening
provider: ~
finder: ~
listener: ~
serializer:
groups: [job]

首先,我填充公司,但是当我尝试填充工作时,出现以下错误:
    [Elastica\Exception\ResponseException]                                 
RoutingMissingException[routing is required for [index_v2]/[job]/[1]]

我尝试过指定上面已注释掉的路由,但是也没有设置关系,因为文档中未提到该路由,所以我将其删除了。
谁能看到我要去哪里错了?

最佳答案

上面的映射没有问题,并且不需要_routing。但是,FOSElastica不会使用_parent集填充映射。

但是,正如docs所说,您需要在Document上使用setParent。为此,我需要设置一个自定义ModelToElasticaTransformer。这可以通过在类Alpha \ RMSBundle \ Transformer \ JobToElasticaTransformer中扩展从 bundle 软件提供的ModelToElasticaAutoTransformer来完成。

在transform()函数中,我插入了一行:

$document->setParent($object->getCompany()->getId());

就在上面
return $document

然后,您声明服务:
alpha.transformers.model.job:
class: Alpha\RMSBundle\Transformer\JobToElasticaTransformer
calls:
- [ setPropertyAccessor, ['@fos_elastica.property_accessor'] ]

最后,在持久性部分的类型映射中添加以下内容:
model_to_elastica_transformer:
service: alpha.transformers.model.job

现在,只要您记得先填充父类,就可以正常使用populate

关于symfony - 无法使用FOSElasticaBundle设置亲子,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29562458/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com