我们正在使用Serilog,并且最近安装了Serilog.Sinks.Elasticsearch接收器,以便能够将条目记录到我们公司的Elasticsearch服务器中。
我们希望能够使用自定义的“ _id”字段调用Elasticsearch,以便在分布式事务处理事件类型时,我们可以使用其他信息更新现有条目。
在JavaScript中使用Elasticsearch使用自定义_id字段非常容易,但是Serilog Elasticsearch Sink似乎不支持此功能。 _id字段在“ ElasticsearchPayloadReader”的深处进行了汇编,没有任何选项可以覆盖它。
protected override void AddToPayLoad(string nextLine)
{
var indexName = _getIndexForEvent(nextLine, _date);
var action = default(object);
if (string.IsNullOrWhiteSpace(_pipelineName))
{
action = new { index = new { _index = indexName, _type = _typeName, _id = _count + "_" + Guid.NewGuid() } };
}
else
{
action = new { index = new { _index = indexName, _type = _typeName, _id = _count + "_" + Guid.NewGuid(), pipeline = _pipelineName } };
}
var actionJson = _serialize(action);
_payload.Add(actionJson);
_payload.Add(nextLine);
_count++;
}
我们在俯视什么吗?有支持的方法吗?
答案 0 :(得分:0)
当前用于弹性搜索的Serilog接收器不支持此功能。 https://github.com/serilog/serilog-sinks-elasticsearch/issues/287
一种有效的解决方法和更标准的约定是将Saga Id传递为_id字段以外的另一个字段。