ONGR ElasticsearchBundle, отображающий виртуальные поля в ElasticSearch

Я хочу сделать поиск полного имени в 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 отдельных полей?

Есть ли способ добавить его с помощью декораторов, чтобы он автоматически обрабатывался другими полями, миграциями данных и т. Д., Без необходимости создавать отдельный сценарий импорта для него и делать это вручную?

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;
}
Другие вопросы по тегам