当我在MySQL中有名字和姓氏时,我想在ElasticSearch中进行全名查找。
我看过cross_fields
和copy-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;
}
关于php - ONGR ElasticsearchBundle将虚拟字段映射到ElasticSearch,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48060719/