我正在使用FOS Elastica bundle 包,并尝试在Elasticsearch中索引一些数据。
我遵循了文档,所以我写了这个 session
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: ~
但我得到一个错误
Malformed action/metadata line [3], expected START_OBJECT but found [VALUE_STRING]
当我尝试不使用序列化程序时,一切运行良好,并且所有定义的字段都已建立索引。
有人知道如何解决此错误吗?我在FosElastica GitHub存储库上发现的每个问题都与JMSSerializer有关。
最佳答案
确保未将exclusion strategy设置为“全部”。如果是这种情况,您应该使用@JMS \ Expose()以便将该字段暴露给给定的组。
例如 :
use JMS\Serializer\Annotation as JMS;
/**
* @JMS\Expose()
* @JMS\Groups(["elastica"})
*/
private $name = '';
关于php - 使用串行器填充的FosElasticaBundle不会索引所有字段,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53259562/