Определение сопоставления содержит неподдерживаемые параметры: [store: true]

Я определил свой индекс ads следующим образом:

fos_elastica:
    clients:
         default: { host: %elastica_host%, port: %elastica_port% }         
    indexes:
          ads:
            types:                        
                brand:
                    mappings:
                        name:
                            type: string
                            boost: 5
                        slug:
                            type: string
                            boost: 4
                        date : ~
                        isPublished: ~
                        user:
                            type: nested
                            properties: 
                                username: ~
                                email: ~
                    persistence:
                        driver: orm
                        model: Minn\AdsBundle\Entity\Brend
                        elastica_to_model_transformer:
                            service: minn_ads.transformers_elastica.brand
                        provider: ~
                        listener:
                            immediate: ~
                        finder: ~

К вашему сведению: 1. Вот как Brend связан с User с @ManyToOne

/**
 * @ORM\ManyToOne(targetEntity="Minn\UserBundle\Entity\User")
 * @ORM\JoinColumn(nullable=false)
 */
private $user;

К вашему сведению: 2. Я использую ветки dev-master для FOSElasticaBundle и Elastica. Для elasticsearch я использую 2.1.1.

Команда заполнения php app/console fos:elastica:populate всегда возвращает эту ошибку:

[Elastica \ Exception \ ResponseException]
{"root_cause": [{"type": "mapper_parsing_exception", "reason": "Определение сопоставления для [пользователя] имеет неподдерживаемые параметры: [store: true]"} ], "type": "mapper_parsing_exception", "reason": "Не удалось проанализировать сопоставление [марка]:
Определение сопоставления для [user] имеет неподдерживаемые параметры: [store: true]", "called_by": {"type ":" mapper_parsing_exception "," reason ":" Определение сопоставления для [пользователя] имеет неподдерживаемые параметры: [store: true] "}}

Я проверил app/logs/dev.log и обнаружил, что сгенерированное сопоставление для индекса ads имеет дополнительный параметр "store":true. Вы можете проверить это:

[2015-12-20 21:28:21] elastica.DEBUG: запрос журнала {"path": "ads /", "method": "PUT", "data": {"mappings": {" brand ": {" properties ": {" name ": {" type ":" string "," boost ": 5," store ": true}," slug ": {" type ":" string "," boost ": 4," store ": true}," date ": {" type ":" string "," store ": true}," isPublished ": {" type ":" string "," store ": true} , "user": {"type": "nested", "properties": {"username": {"type": "string", "store": true}, "email": {"type": "string "," store ": true}}," store ": true}}," dynamic_date_formats ": []," _ meta ": {" model ":" Minn \ AdsBundle \ Entity \ Brend "}}}}," query ": []," connection ": {" config ": {" headers ": []}," host ":" 127.0.0.1 "," port ": 9200," logger ":" fos_elastica.logger "," enabled ": true}} []

Ниже приведено отображение с дополнительным "store": true. Есть ли идеи, как настроить FOSElasticaBundle для получения сопоставления без этой дополнительной строки с "store": true?

{
    "mappings": {
        "brand": {
            "properties": {
                "name": {
                    "type": "string",
                    "boost": 5,
                    "store": true
                },
                "slug": {
                    "type": "string",
                    "boost": 4,
                    "store": true
                },
                "date": {
                    "type": "string",
                    "store": true
                },
                "isPublished": {
                    "type": "string",
                    "store": true
                },
                "user": {
                    "type": "nested",
                    "properties": {
                        "username": {
                            "type": "string",
                            "store": true
                        },
                        "email": {
                            "type": "string",
                            "store": true
                        }
                    },
                    "store": true  # extra line! If deleted, it will work!
                }
            }
        }
    }
}

person Amine Jallouli    schedule 20.12.2015    source источник
comment
Для желающих подписаться: была открыта проблема в репозитории FOSElasticaBundle Github.   -  person Val    schedule 21.12.2015


Ответы (2)


Ошибка в MappingBuilder.php, которая пытается добавить store: true всякий раз, когда свойство не указано.

Вы можете попробовать явно указать store: false, чтобы !isset($property['store']) тест не прошел:

                mappings:
                    name:
                        type: string
                        boost: 5
                    slug:
                        type: string
                        boost: 4
                    date : ~
                    isPublished: ~
                    user:
                        type: nested
                        store: false        <---
                        properties: 
                            username: ~
                            email: ~

Еще одна вещь, которую вы можете попробовать, - это изменить частный массив, чтобы включить nested в дополнение к completion, что могло бы помочь.

person Val    schedule 21.12.2015
comment
store: false не сработало! Я просто прокомментировал код, в котором была обнаружена эта ошибка. Это пиар! - person Amine Jallouli; 21.12.2015
comment
Вот чего я боялся. А что насчет $skipTypes? - person Val; 21.12.2015
comment
Я не понял вашего решения по поводу _1 _... Можете обновить ответ? - person Amine Jallouli; 21.12.2015
comment
В MappingBuilder.php (строка 24) вы можете попытаться добавить nested в массив $skipTypes, т.е. private $skipTypes = array('completion','nested'); - person Val; 21.12.2015

Это ошибка в FOSElasticaBundle. Это решено в этом PR 987.

Вам нужно просто прокомментировать строки в person Amine Jallouli    schedule 21.12.2015