gpt4 book ai didi

elasticsearch - Elasticsearch Nest 是否支持按查询更新

转载 作者:行者123 更新时间:2023-12-01 10:22:10 28 4
gpt4 key购买 nike

我想在高级客户端上使用 UpdateByQuery 方法,但找不到 Nest 的任何文档。如果我想提出 CURL 请求,但对于 NEST 没有任何要求,他们有很好的文档。 https://www.elastic.co/guide/en/elasticsearch/reference/current/docs-update-by-query.html
如果有人有他们使用它的例子,或者可以分享他们发现的文档,那就太棒了!

最佳答案

Update By Query API NEST 支持。这是一个例子 adapted from the integration tests . NEST Documentation计划用于索引和更新 API :)

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,而在 Update By Query API 调用之后的第二个 Count API 调用中,计数为 2。

关于elasticsearch - Elasticsearch Nest 是否支持按查询更新,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50069565/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com