2017-02-08 7 views
0

私はdoctrineエンティティの配列を弾性検索にどのようにマップするのか分かりません。 インデックス作成は1つではなく、2つではないようです。ここでdoctrine配列を弾性検索にマップする方法

は私の実体である:

/** 
* @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] [クラスタ] [メタデータ] [セントアンナ] [[unadere]] remove_mapping [[ged_document]] [2017-02-08 08:23:29,772] [クラスタメタデータ] [Saint Anna] [unadere] create_mapping [ged_document] [2017-02-08 08:23:29,865] [DEBUG] [アクション[unadere] [ged_document] [37]、ソース[{"name": "vente1"、 "year": "2000"を実行するのに失敗しました。 "、" author ":{" id ":10004133}"カテゴリ ":{" id ":10、" name ":" Commande 1 "、" parent ":{" id ":2、" onlyAuthor ":true 、 "名前": "Espace vente"、 "視聴者":["ROLE_UNADERE_CHARGE_DE_MISSION"]}}、 "tags":[]、 "breadcrumb": "Espace vente - > Commande 1"}]} org.elasticsearch.index .mapper.MapperParsingException:オブジェクトマッピング[ビューア]は、フィールドが関連付けられていない値、現在値[ROLE_UNADERE_CHARGE_DE_MISSION] をorg.elasticsearch.index.mapper.object.ObjectMapper.serializeValue(ObjectMapper.java:702) でシリアル化しようとしています。 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) (org.elasticsearch.index.mapper.object.ObjectMapper.parse(ObjectMapper.java:487)) (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。 org.elasticsearch.action.bulk.TransportShardBulkAction.shardOperationOnPrimary(TransportShardBulkAction.javaでorg.elasticsearch.action.bulk.TransportShardBulkAction.shardIndexOperation(TransportShardBulkAction.java:409) でshard.IndexShard.prepareIndex(IndexShard.java:492) : 148) at org.elasticsearch.action.support.replication.TransportShardReplicationOperationAction $ PrimaryPhase.performOnPrimary(TransportShardReplicationOperationAction.java:574) at org.elasticsearch.action.support.replication.TransportShardReplicationOperationAction $ PrimaryPhase $ 1.doRun(TransportShardRepl (AbstractRunnable.java:36) at org.elasticsearch.common.util.concurrent.AbstractRunnable.run(AbstractRunnable.java:36) at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1145) at java。 [情報] [クラスター] [クラスター] [クラスター] [クラスター] [クラス] [クラス] [クラス] [クラス] [クラス] [クラス] 。

オブジェクト1:

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

オブジェクト2:

をメタデータ] [聖アンナ] [unadere] [ged_document](動的)

それはDBでどのように見えるか
[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]] 

をupdate_mapping

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);"を追加する必要があります。理由はわからないので配列が逆転していたので(インデックス0より前のインデックス1)、時にはうまくいきませんでした。 – Dgrey

+0

私はそれが 'string'へのマッピング変更と関係しているのか分かりませんか? – Val

+0

そうでなければ私はこれを得ます: 一つ以上の一括要求アクションでエラーが発生しました: index:/ unadere/ged_document/35が原因でMapperParsingException [[category.parent.viewers]を解析できませんでした。ネストされた:ElasticsearchIllegalArgumentException [不明プロンプト rty [1]]; – Dgrey

関連する問題