我有产品索引,为简单起见,它有两个字段Id和ProductAttributes作为嵌套对象,定义如下:
public class ProductType
{
public Guid Id { get; set; }
public List<ProductAttribute> ProductAttributes { get; set; }
}
public class ProductAttribute
{
public Guid Id { get; set; }
public string Name { get; set; }
public string Value { get; set; }
}
以及以下映射:
elasticClient.CreateIndex("product", i => i
.Settings(s => s
.NumberOfShards(2)
.NumberOfReplicas(0)
)
.Mappings(m => m
.Map<ProductType>(map => map
.AutoMap()
.Properties(p => p
.Nested<ProductAttribute>(n => n
.Name(c => c.ProductAttributes)
.AutoMap()
.Properties(nc => nc
.Keyword(t => t
.Name(nn => nn.Name)
)
.Keyword(t => t
.Name(nn => nn.Value)
)
)
)
现在我正在尝试更新嵌套对象中的名称字段,并且我已尝试使用脚本更新实现它,如下所示:
var scriptParams = new Dictionary<string, object>
{
{"name", "new name"}
};
var result = elasticClient.UpdateByQuery<ProductType>(u => u
.Script(sn => sn
.Inline(
$"ctx._source.productAttributes= params.name;"
)
.Params(scriptParams)
)
.Conflicts(Conflicts.Proceed)
.Refresh(true)
);
但是使用上面的查询我无法更新嵌套对象,您能告诉我如何使用嵌套ES使用_update_by_query api更新嵌套对象吗?
慕的地8271018
MMTTMM
相关分类