简体   繁体   English

如何将学说数组映射到弹性搜索

[英]How to map doctrine array to elastic search

I don't know how to map an array from a doctrine entity to elastic search. 我不知道如何从理论实体到弹性搜索映射数组。 Indexation seems working for 1 but not for the second. 索引似乎适用于1,但不适用于第二。

Here is my entity : 这是我的实体:

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

My elastic search config.yml : 我的弹性搜索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}

The error I get when I try to index elastic search : 当我尝试索引弹性搜索时遇到的错误:

[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][action.bulk ] [Saint Anna] [unadere][2] failed to execute bulk item (index) index {[unadere][ged_document][37], source[{"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: object mapping [viewers] trying to serialize a value with no field associated with it, current value [ROLE_UNADERE_CHARGE_DE_MISSION] at org.elasticsearch.index.mapper.object.ObjectMapper.serializeValue(ObjectMapper.java:702) at org.elasticsearch.index.mapper.object.ObjectMapper.parse(ObjectMapper.java:497) at org.elastics [2017-02-08 08:23:29,751] [INFO] [cluster.metadata] [圣安娜] [[unadere]] remove_mapping [[ged_document]] [2017-02-08 08:23:29,772] [INFO] [cluster.metadata] [圣安娜] [unadere] create_mapping [ged_document] [2017-02-08 08:23:29,865] [DEBUG] [action.bulk] [圣安娜] [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 “]}},”标签“:[],”面包屑“:”空格键-> 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(ObjectMapper.java:497) )在org.elastics earch.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:487) 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) at org.elasticsearch.action.bulk.TransportShardBulkActio org.elasticsearch.index.mapper.object.ObjectMapper.serializeNonDynamicArray(ObjectMapper.java:695)的earch.index.mapper.object.ObjectMapper.serializeValue(ObjectMapper.java:706)在org.elasticsearch.index.mapper.object处。 org.elasticsearch.index.mapper.object.ObjectMapper.parse(ObjectMapper.java:489)的org.elasticsearch.index.mapper.object.ObjectMapper.serializeObject(ObjectMapper.java的ObjectMapper.serializeArray(ObjectMapper.java:604): 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 org.elasticsearch.index.mapper.DocumentMapper.parse(DocumentMapper.java:544)的.mapper.object.ObjectMapper.parse(ObjectMapper.java:487)org.elasticsearch.index.mapper.DocumentMapper.parse(DocumentMapper.java) :493),位于org.elasticsearch.index.shard.IndexShard.prepareIndex(IndexShard.java:492),位于org.elasticsearch.action.bulk.TransportShardBulkActio n.shardIndexOperation(TransportShardBulkAction.java:409) at org.elasticsearch.action.bulk.TransportShardBulkAction.shardOperationOnPrimary(TransportShardBulkAction.java:148) at org.elasticsearch.action.support.replication.TransportShardReplicationOperationAction$PrimaryPhase.performOnPrimary(TransportShardReplicationOperationAction.java:574) at org.elasticsearch.action.support.replication.TransportShardReplicationOperationAction$PrimaryPhase$1.doRun(TransportShardReplicationOperationAction.java:440) at org.elasticsearch.common.util.concurrent.AbstractRunnable.run(AbstractRunnable.java:36) at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1145) at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:615) at java.lang.Thread.run(Thread.java:745) [2017-02-08 08:23:29,873][INFO ][cluster.metadata ] [Saint Anna] [unadere] update_mapping [ged_document] (dynamic) org.elasticsearch.action.bulk.TransportShardBulkAction.shardOperationOnPrimary(TransportShardBulkAction.java:148)上的n.shardIndexOperation(TransportShardBulkAction.java:409)在org.elasticsearch.action.support.replication.TransportShardReplicationOperationAction $ PrimaryPhase.performOn 574),位于org.elasticsearch.common.util.concurrent.AbstractRunnable.run(AbstractRunnable.java:36)的org.elasticsearch.action.support.replication.TransportShardReplicationOperationAction $ PrimaryPhase $ 1.doRun(TransportShardReplicationOperationAction.java:440)处。 util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1145)at java.util.concurrent.ThreadPoolExecutor $ Worker.run(ThreadPoolExecutor.java:615)at java.lang.Thread.run(Thread.java:745)[2017 -02-08 08:23:29,873] [INFO] [cluster.metadata] [Saint Anna] [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]]   

How it looks like in DB : 在DB中的样子:

Object 1 : 对象1:

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

Object 2 : 对象2:

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

Since viewers is simply an array of strings you cannot map it a nested type but you can simply declare it as a string. 由于viewers器只是一个字符串数组,因此您不能将其映射为nested类型,而可以将其声明为字符串。

  viewers: {type: string, index: not_analyzed}

ES will then seamlessly create an array of string out of it. 然后,ES将无缝地从中创建一个字符串数组。

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM