Мы используем Serilog и недавно установили приемник Serilog.Sinks.Elasticsearch, чтобы иметь возможность регистрировать записи на сервере Elasticsearch нашей компании.
Мы хотим иметь возможность вызывать Elasticsearch с настраиваемым полем "_id", чтобы мы могли обновлять существующие записи дополнительной информацией, когда наши распределенные транзакции проходят через шаблон событий Saga.
Использование настраиваемого поля _id с Elasticsearch очень легко сделать в JavaScript, но Serinog 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++;
}
Мы что-то упускаем? Есть ли поддерживаемый способ сделать это?