elasticsearch Elasticsearch嵌套是否支持按查询更新
我想在高级客户机上使用UpdateByQuery方法,但找不到Nest的任何文档。如果我想提出一个CURL请求,他们有很好的文档,但对NEST没有。 如果有人有他们使用它的例子,或者可以分享他们发现的文档,那将是非常棒的 嵌套中支持。这里有一个例子。对于计划的索引和更新API:)elasticsearch Elasticsearch嵌套是否支持按查询更新,elasticsearch,nest,elasticsearch,Nest,我想在高级客户机上使用UpdateByQuery方法,但找不到Nest的任何文档。如果我想提出一个CURL请求,他们有很好的文档,但对NEST没有。 如果有人有他们使用它的例子,或者可以分享他们发现的文档,那将是非常棒的 嵌套中支持。这里有一个例子。对于计划的索引和更新API:) private static void Main() { 变量池=新的SingleNodeConnectionPool(新Uri(“http://localhost:9200")); var设置=新连接设置(池) .D
private static void Main()
{
变量池=新的SingleNodeConnectionPool(新Uri(“http://localhost:9200"));
var设置=新连接设置(池)
.DefaultMappingFor(m=>m
.IndexName(“测试”)
.TypeName(“测试”)
);
var客户端=新的ElasticClient(设置);
var index=IndexName.From();
if(client.indexists(index.Exists)
client.DeleteIndex(索引);
CreateIndex(index,c=>c
.Mappings(m=>m
.Map(Map=>Map
.Properties(props=>props
.Text(s=>s.Name(p=>p.Text))
.Keyword(s=>s.Name(p=>p.Flag))
)
)
)
);
client.Bulk(b=>b
.IndexMany(新[]{
新测试{Text=“words”,Flag=“bar”},
新测试{Text=“words”,Flag=“foo”}
})
.Refresh(Refresh.WaitFor)
);
client.Count(s=>s)
.Query(q=>q
.Match(m=>m
.Field(p=>p.Flag)
.Query(“foo”)
)
)
);
client.UpdateByQuery(u=>u
.Query(q=>q
.术语(f=>f.标志,“条形”)
)
.Script(“ctx.\u source.flag='foo')
.冲突(冲突。继续)
.刷新(真)
);
client.Count(s=>s)
.Query(q=>q
.Match(m=>m
.Field(p=>p.Flag)
.Query(“foo”)
)
)
);
}
公开课考试
{
公共字符串文本{get;set;}
公共字符串标志{get;set;}
}
请注意,第一个count API调用的计数为1,在Update By Query API调用之后的第二个count API调用中,计数为2。是否有以下两个示例:1。如何更新多个字段?2.如何更新整个对象/文档?顺便说一句,您提供的链接已更改:例如:1。是否可以一次调用更新两个字段,还是必须为每个字段调用
UpdateByQuery
?2.是否可以在不指定所有字段的情况下通过一次调用更新所有字段(仅将对象输入到某个方法以更新文档)?您可以使用脚本更新两个字段“ctx.\u source.flag='foo';ctx.\u source.flag2='bar';”
。您可以通过编写脚本来获得创造性,以便能够将对象作为参数传递给脚本,并迭代其属性以更新文档的属性。没有方法像更新时那样传递文档。我认为最初的意图是用户可能希望使用每个文档的属性值来更新它们。
private static void Main()
{
var pool = new SingleNodeConnectionPool(new Uri("http://localhost:9200"));
var settings = new ConnectionSettings(pool)
.DefaultMappingFor<Test>(m => m
.IndexName("tests")
.TypeName("test")
);
var client = new ElasticClient(settings);
var index = IndexName.From<Test>();
if (client.IndexExists(index).Exists)
client.DeleteIndex(index);
client.CreateIndex(index, c => c
.Mappings(m => m
.Map<Test>(map => map
.Properties(props => props
.Text(s => s.Name(p => p.Text))
.Keyword(s => s.Name(p => p.Flag))
)
)
)
);
client.Bulk(b => b
.IndexMany(new[] {
new Test { Text = "words words", Flag = "bar" },
new Test { Text = "words words", Flag = "foo" }
})
.Refresh(Refresh.WaitFor)
);
client.Count<Test>(s => s
.Query(q => q
.Match(m => m
.Field(p => p.Flag)
.Query("foo")
)
)
);
client.UpdateByQuery<Test>(u => u
.Query(q => q
.Term(f => f.Flag, "bar")
)
.Script("ctx._source.flag = 'foo'")
.Conflicts(Conflicts.Proceed)
.Refresh(true)
);
client.Count<Test>(s => s
.Query(q => q
.Match(m => m
.Field(p => p.Flag)
.Query("foo")
)
)
);
}
public class Test
{
public string Text { get; set; }
public string Flag { get; set; }
}