ONGR ElasticsearchBundle 将虚拟字段映射到 ElasticSearch

ONGR ElasticsearchBundle mapping virtual fields to ElasticSearch

当我在 MySQL 中有名字和姓氏时,我想在 ElasticSearch 中进行全名查找。

我看过 cross_fieldscopy-to,但据我所知,它们都不支持在 MatchPhrasePrefixQuery 中搜索部分或全部名称的灵活性.

所以我想做的是向 ElasticSearch 添加一个字段,即 $firstName . ' ' . $lastName

我已使用 @ES 装饰器将我的用户实体字段映射到 ElasticSearch。

 /**
 * @var string
 *
 * @ORM\Column(name="firstname", type="string", length=255, nullable=true)
 * @ES\Property(type="keyword")
 * @Serializer\Groups({"default"})
 * @Serializer\SerializedName("firstName")
 */
private $firstname;

但是如何向 ElasticSearch 添加虚拟 fullName 列,以便我可以搜索该字段而不是 2 个单独的字段?

有没有一种方法可以使用装饰器添加它,以便它与其他字段和数据迁移等一起自动处理,而不必为它制作单独的导入脚本并手动执行?

快速拍摄(未测试):

 /**
 * @var string
 *
 * @ES\Property(type="keyword")
 * @Serializer\Groups({"default"})
 * @Serializer\SerializedName("fullName")
 */
private $fullname;

/**
 * Get fullname
 *
 * @return string
 */
public function getFullname()
{
    return $this->firstname . ' ' . $this->lastname;
}