Symfony Elastic mapping

У меня есть карта для сущности для поля «навыки»

 * @ORM\Column(name="skills", type="array", nullable=true)
* @Groups({"for_profile_project"})
*/
private $skills = [];

упругий конфиг (это мой весь конфиг postebin)

команды:

    indexes:
profile:
finder: ~
types:
team:
mappings:
id:
type: integer
slug:
type: string
projects:
type: "nested"properties:
id: ~
title:
type: string
description:
type: string
skills:
expose: true
persistence:
driver: orm
model: Artel\ProfileBundle\Entity\Teams
provider: ~
listener:
immediate: true
finder: ~

а в БД у меня вот так

a:5:{i:0;a:2:{s:4:"lang";s:10:"JavaScript";s:7:"percent";d:44.169475214305216;}i:1;a:2:{s:4:"lang";s:3:"CSS";s:7:"percent";d:37.235383527019629;}i:2;a:2:{s:4:"lang";s:3:"PHP";s:7:"percent";d:10.312846145221229;}i:3;a:2:{s:4:"lang";s:4:"HTML";s:7:"percent";d:8.1084777328220206;}i:4;a:2:{s:4:"lang";s:10:"ApacheConf";s:7:"percent";d:0.17381738063190688;}}

и когда я обновляю сущность, у меня появляется ошибка

Merging dynamic updates triggered a conflict: mapper [projects.skills.percent] of different type, current_type [double], merged_type [long]

какой тип мне нужен для полевых навыков или как исправить упругий конфиг?
что не так с моим конфигом?

Я удалил все Inde в моей команде упругости и запуска

app/console fos:elastica:populate --no-reset

и теперь у меня есть это отображение

"team": {
"properties": {
"skills": {
"type": "string"},
"webSite": {
"type": "string"},
"createdAt": {
"format": "strict_date_optional_time||epoch_millis",
"type": "date"},
"projects": {
"properties": {
"cost": {
"type": "long"},
"authorId": {
"properties": {
"firstName": {
"type": "string"},
"lastName": {
"type": "string"},
"id": {
"type": "long"},
"username": {
"type": "string"}
}
},
"skills": {
"type": "string"},
"status": {
"type": "string"}
}
},

и теперь я создаю тестовый проект с одним навыком (a: 1: {i: 0; s: 6: «навыков»;}), но автоматически не загружаю в эластичный файл только при редактировании команды объекта или команды запуска

app/console fos:elastica:populate --no-reset

и когда я добавляю реальный проект с

a:5:{i:0;a:2:{s:4:"lang";s:10:"JavaScript";s:7:"percent";d:44.169475214305216;}i:1;a:2:{s:4:"lang";s:3:"CSS";s:7:"percent";d:37.235383527019629;}i:2;a:2:{s:4:"lang";s:3:"PHP";s:7:"percent";d:10.312846145221229;}i:3;a:2:{s:4:"lang";s:4:"HTML";s:7:"percent";d:8.1084777328220206;}i:4;a:2:{s:4:"lang";s:10:"ApacheConf";s:7:"percent";d:0.17381738063190688;}}

и беги

app/console fos:elastica:populate --no-reset

или когда я добавляю для этой команды разработчиков сущностей сущность, у меня появляется ошибка:

Notice: Array to string conversion

mapper_parsing_exception

failed to parse [projects.skills]

illegal_argument_exception

unknown property [lang]

Я пытаюсь установить процент как целое число, но все еще есть ошибка

a:5:{i:0;a:2:{s:4:"lang";s:10:"JavaScript";s:7:"percent";d:44;}i:1;a:2:{s:4:"lang";s:3:"CSS";s:7:"percent";d:37;}i:2;a:2:{s:4:"lang";s:3:"PHP";s:7:"percent";d:10;}i:3;a:2:{s:4:"lang";s:4:"HTML";s:7:"percent";d:8;}i:4;a:2:{s:4:"lang";s:10:"ApacheConf";s:7:"percent";d:0;}}

я попробую

                                 skills:
expose: true
properties:
lang:
type: string
percent:
type: double

но все еще есть

      Notice: Array to string conversion

mapper_parsing_exception

failed to parse [projects.skills]

illegal_argument_exception

unknown property [lang]

ОБНОВИТЬ

Теперь я удалил индекс и изменил конфигурацию следующим образом:

                                skills:
properties:
lang:
type: string
percent:
type: double

и в упругой

          "skills": {
"properties": {
"lang": {
"type": "string"},
"percent": {
"type": "double"}
}
},

и когда я загружаю сущность с полевыми навыками, как это:

a:5:{i:0;a:2:{s:4:"lang";s:10:"JavaScript";s:7:"percent";d:44.169475214305216;}i:1;a:2:{s:4:"lang";s:3:"CSS";s:7:"percent";d:37.235383527019629;}i:2;a:2:{s:4:"lang";s:3:"PHP";s:7:"percent";d:10.312846145221229;}i:3;a:2:{s:4:"lang";s:4:"HTML";s:7:"percent";d:8.1084777328220206;}i:4;a:2:{s:4:"lang";s:10:"ApacheConf";s:7:"percent";d:0.17381738063190688;}}

все хорошо, но когда я создаю сущность с полем

a:1:{i:0;s:8:"skills23";}

У меня ошибка

ОБНОВИТЬ

                             skills:
expose: true
github:
properties:
lang:
type: string
percent:
type: double

Почему полевой гитхуб не создают в упругой я не понимаю
(это мой весь конфиг postebin)

0

Решение

"skills": {
"type": "string"},

определяется как строка в вашем отображении, но в ваших навыках данных есть массив с ключами lang и процентами, так что ваше частичное отображение навыков должно быть.

"skills": {
"properties" : {
"lang" : {
"type" : "string"},
"percent" : {
"type" : "double"},
}
},

Отредактировано: должно работать.

indexes:
profile:
finder: ~
types:
team:
mappings:
id:
type: integer
slug:
type: string
projects:
type: "nested"properties:
id: ~
title:
type: string
description:
type: string
skills:
properties:
lang:
type: string
percent:
type: double
persistence:
driver: orm
model: Artel\ProfileBundle\Entity\Teams
provider: ~
listener:
immediate: true
finder: ~
1

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]