使用串行器填充的FosElasticaBundle不会索引所有字段

时间:2018-11-12 09:51:20

标签: php symfony elasticsearch foselasticabundle

我正在使用FOS Elastica捆绑软件,并试图在Elasticsearch中索引一些数据。

我遵循了文档,所以我写了这个会议

fos_elastica:
    clients:
        default: { host: '%env(ELASTICSEARCH_HOST)%', port: '%env(ELASTICSEARCH_PORT)%' }
    indexes:
        app:
            index_name: app
            types:
                user:
                    serializer:
                        groups: [elastica]
                    persistence:
                        driver: orm
                        model: AppBundle\Entity\User
                        provider: ~
                country:
                    serializer:
                        groups: [elastica]
                    persistence:
                        driver: orm
                        model: AppBundle\Entity\Country
                        provider: ~

然后在我的实体中添加序列化组

use Symfony\Component\Serializer\Annotation\Groups;
...

/**
 * @ORM\Table
 * @ORM\Entity
 */
class Country
{
    ...

    /**
     * @var string
     *
     * @Groups({"elastica"})
     *
     * @ORM\Column(type="string", length=64, unique=true)
     * @Assert\NotBlank
     * @Assert\Length(max=64)
     */
    private $name = '';
}

然后,当我启动fos:elastica:populate时,一切工作都很好,但是我放置elastica序列化组的所有字段均未编制索引。

我使用的是Symfony序列化程序,并遵循了官方文档,但我不理解并发现为什么我的字段未编入索引。

我尝试添加

serializer:
    serializer: serializer

serializer: ~

但是我得到一个错误

  

动作/元数据行[3]格式不正确,应该是START_OBJECT,但找到的是[VALUE_STRING]

当我尝试不使用序列化程序时,一切运行良好,并且所有定义的字段都已建立索引。

有人知道如何解决此错误吗?我在FosElastica GitHub存储库上发现的每个问题都与JMSSerializer有关。

1 个答案:

答案 0 :(得分:0)

确保您的exclusion strategy未设置为“全部”。如果是这种情况,您应该使用@JMS \ Expose()以便将该字段暴露给给定的组。

例如:

use JMS\Serializer\Annotation as JMS;


 /**
  * @JMS\Expose()
  * @JMS\Groups(["elastica"})
  */
 private $name = '';