1

我对 FOSElasticaBundle 有疑问,在 elasticsearch 中清空/删除属性。

我在跑:

Friendsofsymfony/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,因此它不会被更新/删除。

有没有办法对条目进行硬更新而不是更新它?

4

0 回答 0