1

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

我已经看过cross_fieldsand ,但据我所知copy-to,它们都不支持能够在 a 中搜索部分或全部名称的灵活性。MatchPhrasePrefixQuery

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

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

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

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

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

4

1 回答 1

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;
}
于 2018-01-02T12:55:41.290 回答