elasticsearch - Elasticsearch Nest 是否支持按查询更新
问题描述
我想在高级客户端上使用 UpdateByQuery 方法,但找不到 Nest 的任何文档。如果我想发出 CURL 请求,但 NEST 没有,他们有很好的文档。https://www.elastic.co/guide/en/elasticsearch/reference/current/docs-update-by-query.html 如果有人有他们使用它的例子,或者可以分享他们发现的文档,那就太棒了!
解决方案
NEST 支持按查询更新 API 。这是一个改编自集成测试的示例。计划中的索引和更新 API 的NEST 文档:)
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。
推荐阅读
- javascript - Chrome JS 错误:混合内容:对于机器人
- apache-spark - Spark-提交 CoarseGrainedExecutorBackend 错误
- javascript - 如何使用 DataTables 和 Excel 解决 parseXML 问题?
- javascript - Karma - Jasmine 断开连接超时
- javascript - 当鼠标离开调用元素并停留在目标元素上时保持目标元素打开
- kubernetes - k8s - 删除集群时持久存储会发生什么/?
- java - 启用持久性的嵌入式 Ignite 实例重启速度非常慢
- angular - Rxjs:[ts] 类型“UnaryFunction”上不存在属性“管道”
, 可观察的 >'。任何 - openssl - 使用 Diffie-Hellman 参数(“p”和“g”)生成私钥和公钥。结果是“Pub_key”和“Priv_key”(1024 位/128 字节)
- python - Pandas 中的 Shift 分组系列