ONGR ElasticsearchBundle将虚拟字段映射到ElasticSearch

时间:2018-01-02 12:07:06

标签: php symfony elasticsearch doctrine-orm ongr

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

我查看了cross_fieldscopy-to,但是根据我的判断,它们都不支持能够灵活地搜索MatchPhrasePrefixQuery中的部分或全部名称。< / p>

所以我想做的是向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个单独的字段?

有没有办法使用装饰器添加它,以便自动处理其他字段和数据迁移等,而无需为它创建单独的导入脚本并手动执行?

1 个答案:

答案 0 :(得分:1)

快速拍摄(未经测试):

 /**
 * @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;
}