在更新时删除空属性

时间:2019-04-30 08:24:54

标签: symfony4 php-7.3

我在使用FOSElasticaBundle时遇到问题,在Elasticsearch中清空/删除属性。

我正在跑步:

symfony / elastica-bundle朋友版v5.0.3 ruflin / elastica v6.1.1 jms / serializer-bundle v3.2.0 jms / serializer v2.3.0 symfony v4.2.7 elasticsearch v6.7.1

当我通过理论保存对象时。它已正确序列化并被发送到elasticsearch。每次更新也都有效:

{  
   "update":{  
      "_index":"demo_companies",
      "_type":"company",
      "_id":13
   }
}
{  
   "doc":{  
      "id":13,
      "company_name":"Demo Company",
      "company_tagline":"Only the finest",
   },
   "doc_as_upsert":true
}

但是,当我清除表单中的company_tagline并将其保存时,就按预期将其清空到数据库中。现在,序列化后,由于未序列化空字符串,因此缺少company_tagline。因此,批量更新如下所示:

{  
   "update":{  
      "_index":"demo_companies",
      "_type":"company",
      "_id":13
   }
}
{  
   "doc":{  
      "id":13,
      "company_name":"Demo Company",
   },
   "doc_as_upsert":true
}

现在查询elasticsearch时,company_tagline仍然存在:

{
    "took" : 0,
    "timed_out" : false,
    "_shards" : {
    "total" : 1,
    "successful" : 1,
    "skipped" : 0,
    "failed" : 0
    },
    "hits" : {
        "total" : 14,
        "max_score" : 1.0,
        "hits" : [
            {
                "_index" : "demo_companies",
                "_type" : "company",
                "_id" : "13",
                "_score" : 1.0,
                "_source" : {
                    "id" : 13,
                    "company_name" : "FTI Touristik GmbH",
                    "company_tagline":"Only the finest"
                }
            }
        ]
    }
}

我认为这是因为doc_as_upsert仅在适当位置更新属性。因此,由于请求中缺少company_tagline,因此不会对其进行更新/删除。

有什么方法可以对条目执行硬更新,而不是对它进行升级?

0 个答案:

没有答案