Я хочу сделать поиск полного имени в ElasticSearch, когда у меня есть имя и фамилия в MySQL.
Я смотрел на cross_fields
а также copy-to
, но не поддерживают гибкость возможности поиска части или всего имени в 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 отдельных полей?
Есть ли способ добавить его с помощью декораторов, чтобы он автоматически обрабатывался с другими полями, миграциями данных и т. Д., Без необходимости создавать отдельный скрипт импорта для него и делать это вручную?
Просто быстрый выстрел (не проверено):
/**
* @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;
}
Других решений пока нет …