我在使用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,因此不会对其进行更新/删除。
有什么方法可以对条目执行硬更新,而不是对它进行升级?