当我在MySQL中有名字和姓氏时,我想在ElasticSearch中进行全名查找。
我查看了cross_fields
和copy-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个单独的字段?
有没有办法使用装饰器添加它,以便自动处理其他字段和数据迁移等,而无需为它创建单独的导入脚本并手动执行?
答案 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;
}