我想在高级客户端上使用UpdateByQuery方法,但找不到Nest的任何文档。如果我想发出CURL请求,他们有很多文档,但NEST没什么。 https://www.elastic.co/guide/en/elasticsearch/reference/current/docs-update-by-query.html
如果有人使用它的示例,或者可以共享文档,他们会发现这太棒了!
最佳答案
NEST支持Update By Query API。这是一个示例adapted from the integration tests。索引和更新API的NEST Documentation已计划:)
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; }
}
请注意,第一个Count API调用中的计数为1,在“按查询更新API”调用之后的第二个Count API调用中为2。
关于elasticsearch - Elasticsearch Nest是否支持按查询更新,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/50069565/