2017-02-08 2 views
0

Ich weiß nicht, wie man ein Array von einer Doktrinsentität der elastischen Suche zuordnet. Indexierung scheint für 1 zu funktionieren, aber nicht für die zweite.Wie man Doktrin-Array auf elastische Suche abbildet

Hier ist meine Einheit:

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

Meine Elasticsearch 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} 

Die Störung, die ich erhalte, wenn ich zu indizieren Elasticsearch versuchen:

[2017-02 -08 08: 23: 29,751] [INFO] [cluster.metadata] [Sankt Anna] [[unadere]] remove_mapping [[ged_document]] [2017-02-08 08: 23: 29.772] [INFO] [cluster.metadata] [Sankt Anna] [unadere] create_mapping [ged_document] [2017-02-08 08: 23: 29.865] [DEBUG] [Aktion .bulk] [Saint Anna] [unadere] [2] konnte den Bulk Item (Index) Index nicht ausführen {[unadere] [ged_document] [37], source [{"name": "vente1", "year": "2000 "," author ": {" id ": 10004133}," Kategorie ": {" id ": 10," name ":" Befehl 1 "," übergeordneter ": {" id ": 2," onlyAuthor ": true , "Name": "Espace vente", "Zuschauer": ["ROLE_UNADERE_CHARGE_DE_MISSION"]}}, "Tags": [], "breadcrumb": "Espace vente -> Commande 1"}]} org.elasticsearch.index .mapper.MapperParsingException: Objekt-Mapping [Viewer], das versucht, einen Wert ohne zugeordnetes Feld zu serialisieren, aktueller Wert [ROLE_UNADERE_CHARGE_DE_MISSION] unter org.elasticsearch.index.mapper.object.ObjectMapper.serializeValue (ObjectMapper.java:702) bei org.elasticsearch.index.mapper.object.ObjectMapper.parse (Objec tMapper.java:497) bei org.elasticsearch.index.mapper.object.ObjectMapper.serializeValue (ObjectMapper.java:706) bei org.elasticsearch.index.mapper.object.ObjectMapper.serializeNonDynamicArray (ObjectMapper.java:695) bei org.elasticsearch.index.mapper.object.ObjectMapper.serializeArray (ObjectMapper.java:604) bei org.elasticsearch.index.mapper.object.ObjectMapper.parse (ObjectMapper.java:489) bei org.elasticsearch. index.mapper.object.ObjectMapper.serializeObject (ObjectMapper.java:554) bei org.elasticsearch.index.mapper.object.ObjectMapper.parse (ObjectMapper.java:487) bei org.elasticsearch.index.mapper.object. ObjectMapper.serializeObject (ObjectMapper.java:554) bei org.elasticsearch.index.mapper.object.ObjectMapper.parse (ObjectMapper.java:48 7) bei org.elasticsearch.index.mapper.DocumentMapper.parse (DocumentMapper.java:544) bei org.elasticsearch.index.mapper.DocumentMapper.parse (DocumentMapper.java:493) bei org.elasticsearch.index. shard.IndexShard.prepareIndex (IndexShard.java:492) bei org.elasticsearch.action.bulk.TransportShardBulkAction.shardIndexOperation (TransportShardBulkAction.java:409) bei org.elasticsearch.action.bulk.TransportShardBulkAction.shardOperationOnPrimary (TransportShardBulkAction.java: 148) bei org.elasticsearch.action.support.replication.TransportShardReplicationOperationAction $ PrimaryPhase.performOnPrimary (TransportShardReplicationOperationAction.java:574) bei org.elasticsearch.action.support.replication.TransportShardReplicationOperationAction $ PrimaryPhase $ 1.doRun (TransportShardRepl icationOperationAction.java:440) bei org.elasticsearch.common.util.concurrent.AbstractRunnable.run (AbstractRunnable.java:36) bei java.util.concurrent.ThreadPoolExecutor.runWorker (ThreadPoolExecutor.java:1145) auf Java. util.concurrent.ThreadPoolExecutor $ Worker.run (ThreadPoolExecutor.java:615) bei java.lang.Thread.run (Thread.java:745) [2017-02-08 08: 23: 29.873] [INFO] [Cluster .Metadaten] [St. Anna] [unadere] update_mapping [ged_document] (dynamisch)

[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]] 

Wie sieht es aus wie in DB:

Objekt 1:

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

Objekt 2:

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

Antwort

0

Da viewers ist einfach ein Array o f Strings können Sie nicht einen nested Typ zuordnen, aber Sie können es einfach als String deklarieren.

viewers: {type: string, index: not_analyzed} 

ES wird dann nahtlos eine Reihe von String daraus erstellen.

+0

Danke für die Hilfe, aber ich muss hinzufügen "return array_values ​​($ this-> Zuschauer);" in der Getter der Entität, weil ich nicht weiß warum, aber Array wurde invertiert (Index 1 vor Index 0), also manchmal hat es nicht funktioniert. – Dgrey

+0

Ich verstehe nicht, was das mit der Mapping-Änderung zu 'string'' zu tun hat? – Val

+0

Weil sonst bekomme ich das: Fehler in einer oder mehreren Massenanforderung Aktionen: Index:/unadere/ged_document/35 verursacht MapperParsingException [konnte nicht parsen [category.parent.viewers]]; verschachtelt: ElasticsearchIllegalArgumentException [unbekanntes Projekt rty [1]]; – Dgrey