2017-02-08 9 views
0

Я не знаю, как сопоставить массив от объекта доктрины до упругого поиска. Индексация кажется работающей для 1, но не для второй.Как нарисовать массив доктрины до упругого поиска

Вот моя сущность:

/** 
* @var array $viewers 
* @ORM\Column(name="permission_viewers", type="array", nullable=false) 
*/ 
protected $viewers; 

Мой эластичный поиск config.yml:

ged_document: 
    mappings: 
    name: { analyzer: default, type: string } 
    year: { analyzer: default, type: string } 
    author: 
    type: "object" 
    properties: 
    id: {analyzer: default, type: integer} 
    category: 
    type: "object" 
    properties: 
    id: {analyzer: default, type: integer} 
    name: {analyzer: whitespace, type: string} 
    parent: 
    type: "object" 
    properties: 
    id: {analyzer: default, type: integer} 
    onlyAuthor: {type: boolean} 
    name: {analyzer: whitespace, type: string} 
    viewers: {type: 'nested', index: not_analyzed} 

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

[2017-02 -08 08: 23: 29,751] [INFO] [cluster.metadata] [Saint Anna] [[unadere]] remove_mapping [[ged_document]] [2017-02-08 08: 23: 29,772] [INFO] [cluster.metadata] [Saint Anna] [unadere] create_mapping [ged_document] [2017-02-08 08: 23: 29,865] [DEBUG] [действие .bkk] [Saint Anna] [unadere] [2] не удалось выполнить индекс массового товара (индекс) {[unadere] [ged_document] [37], источник [{"name": "vente1", "year": "2000 "," author ": {" id ": 10004133}," category ": {" id ": 10," name ":" Commande 1 "," parent ": {" id ": 2," onlyAuthor ": true , "name": "Espace vente", "viewers": ["ROLE_UNADERE_CHARGE_DE_MISSION"]}}, "tags": [], "breadcrumb": "Espace vente -> Commande 1"}}} org.elasticsearch.index .mapper.MapperParsingException: сопоставление объектов [зрителей] пытается сериализовать значение без связанного с ним поля, текущее значение [ROLE_UNADERE_CHARGE_DE_MISSION] at org.elasticsearch.index.mapper.object.ObjectMapper.serializeValue (ObjectMapper.java:702) at org.elasticsearch.index.mapper.object.ObjectMapper.parse (Objec tMapper.java:497) at org.elasticsearch.index.mapper.object.ObjectMapper.serializeValue (ObjectMapper.java:706) at org.elasticsearch.index.mapper.object.ObjectMapper.serializeNonDynamicArray (ObjectMapper.java:695) at org.elasticsearch.index.mapper.object.ObjectMapper.serializeArray (ObjectMapper.java:604) at org.elasticsearch.index.mapper.object.ObjectMapper.parse (ObjectMapper.java:489) at org.elasticsearch. index.mapper.object.ObjectMapper.serializeObject (ObjectMapper.java:554) at org.elasticsearch.index.mapper.object.ObjectMapper.parse (ObjectMapper.java:487) at org.elasticsearch.index.mapper.object. ObjectMapper.serializeObject (ObjectMapper.java:554) at org.elasticsearch.index.mapper.object.ObjectMapper.parse (ObjectMapper.java:48) 7) at org.elasticsearch.index.mapper.DocumentMapper.parse (DocumentMapper.java:544) at org.elasticsearch.index.mapper.DocumentMapper.parse (DocumentMapper.java:493) at org.elasticsearch.index. shard.IndexShard.prepareIndex (IndexShard.java:492) на org.elasticsearch.action.bulk.TransportShardBulkAction.shardIndexOperation (TransportShardBulkAction.java:409) на org.elasticsearch.action.bulk.TransportShardBulkAction.shardOperationOnPrimary (TransportShardBulkAction.java: 148) в org.elasticsearch.action.support.replication.TransportShardReplicationOperationAction $ PrimaryPhase.performOnPrimary (TransportShardReplicationOperationAction.java:574) в org.elasticsearch.action.support.replication.TransportShardReplicationOperationAction $ PrimaryPhase $ 1.doRun (TransportShardRepl icationOperationAction.java:440) at org.elasticsearch.common.util.concurrent.AbstractRunnable.run (AbstractRunnable.java:36) at java.util.concurrent.ThreadPoolExecutor.runWorker (ThreadPoolExecutor.java:1145) в java. util.concurrent.ThreadPoolExecutor $ Worker.run (ThreadPoolExecutor.java:615) на java.lang.Thread.run (Thread.java:745) [2017-02-08 08: 23: 29,873] [INFO] [кластер ,Метаданные] [Санкт Анна] [unadere] update_mapping [ged_document] (динамическая)

[Elastica\Exception\Bulk\ResponseException]                                
Error in one or more bulk request actions:                                
index: /unadere/ged_document/37 caused MapperParsingException[object mapping [viewers] trying to serialize a value with no field associated with it, current value [ROLE_UNADERE_CHARGE_DE_MISSION]] 

Как это выглядит в БД:

Объект 1:

a:2{i:1;s:16:"ROLE_UNADERE_ACJ";i:0;s:30:"ROLE_UNADERE_CHARGE_DE_MISSION";} 

Объект 2:

a:1:{i:0;s:30:"ROLE_UNADERE_CHARGE_DE_MISSION";} 

ответ

0

С viewers - это просто массив o f, вы не можете сопоставить его с типом nested, но вы можете просто объявить его как строку.

viewers: {type: string, index: not_analyzed} 

ES затем без проблем создаст массив из него.

+0

Спасибо вам за помощь, но я должен добавить «return array_values ​​($ this-> viewers);" в получателе объекта, потому что я не знаю, почему, но массив был инвертирован (индекс 1 перед индексом 0), поэтому иногда он не работал. – Dgrey

+0

Я не понимаю, что это связано с изменением отображения на 'string''? – Val

+0

Потому что в противном случае я получаю это: Ошибка в одном или нескольких действиях массового запроса: индекс:/unadere/ged_document/35 вызвал ошибку MapperParsingException [не удалось проанализировать [category.parent.viewers]]; inested: ElasticsearchIllegalArgumentException [unknown prope rty [1]]; – Dgrey