У меня проблема с FOSElasticaBundle, с атрибутами очистки / удаления вasticsearch.
Я бегу:
friendsofsymfony /astica-bundle v5.0.3
Руфлин / Эластика v6.1.1
jms / serializer-bundle v3.2.0
JMS / сериализатор v2.3.0
Symfony v4.2.7
asticsearch v6.7.1
Когда я сохраняю объект с помощью доктрины. он получает правильно сериализованный и отправляется вasticsearch. Каждое обновление также работает:
{
"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
}
Когда теперь запрашивается эластичный поиск, 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 отсутствует в запросе, он не обновляется и не удаляется.
Есть ли какой-нибудь способ выполнить жесткое обновление записи вместо ее обновления?