问题描述
我想使用附件处理器并删除附件数组中的处理器。我知道foreach处理器是为此目的所必需的。
这使附件处理器和删除处理器能够在阵列的各个元素上运行(https://www.elastic.co/guide/en/elasticsearch/plugins/current/ingest-attachment-with-arrays.html)
我没有找到任何好的NEST(c#)示例来索引附件数组并删除内容字段。有人可以为我的用例提供NEST(C#)示例吗?
更新:感谢Russ Cam,现在可以使用以下管道索引附件数组并删除base64编码文件内容:
_client.PutPipeline("attachments", p => p
.Description("Document attachments pipeline")
.Processors(pp => pp
.Foreach<ApplicationDto>(fe => fe
.Field(f => f.Attachments)
.Processor(fep => fep
.Attachment<Attachment>(a => a
.Field("_ingest._value._content")
.TargetField("_ingest._value.attachment")
)
)
).Foreach<ApplicationDto>(fe => fe
.Field(f => f.Attachments)
.Processor(fep => fep
.Remove<Attachment>(r => r
.Field("_ingest._value._content")
)
)
)
)
);
答案 0 :(得分:3)
您的代码缺少ForeachProcessor
; NEST的实现几乎是Elasticsearch JSON示例的直接翻译。 It's a little easier using the Attachment
type available in NEST too,将数据提取到的attachment
对象将反序列化为。
void Main()
{
var pool = new SingleNodeConnectionPool(new Uri("http://localhost:9200"));
var defaultIndex = "default-index";
var connectionSettings = new ConnectionSettings(pool)
.DefaultIndex(defaultIndex);
var client = new ElasticClient(connectionSettings);
if (client.IndexExists(defaultIndex).Exists)
client.DeleteIndex(defaultIndex);
client.PutPipeline("attachments", p => p
.Processors(pp => pp
.Description("Document attachment pipeline")
.Foreach<Document>(fe => fe
.Field(f => f.Attachments)
.Processor(fep => fep
.Attachment<Attachment>(a => a
.Field("_ingest._value.data")
.TargetField("_ingest._value.attachment")
)
)
)
)
);
var indexResponse = client.Index(new Document
{
Attachments = new List<DocumentAttachment>
{
new DocumentAttachment { Data = "dGhpcyBpcwpqdXN0IHNvbWUgdGV4dAo=" },
new DocumentAttachment { Data = "VGhpcyBpcyBhIHRlc3QK" }
}
},
i => i.Pipeline("attachments")
);
var getResponse = client.Get<Document>(indexResponse.Id);
}
public class Document
{
public List<DocumentAttachment> Attachments { get; set; }
}
public class DocumentAttachment
{
public string Data { get; set; }
public Attachment Attachment { get; set; }
}
返回
{
"_index" : "default-index",
"_type" : "document",
"_id" : "AVrOVuC1vjcwkxZzCHYS",
"_version" : 1,
"found" : true,
"_source" : {
"attachments" : [
{
"data" : "dGhpcyBpcwpqdXN0IHNvbWUgdGV4dAo=",
"attachment" : {
"content_type" : "text/plain; charset=ISO-8859-1",
"language" : "en",
"content" : "this is\njust some text",
"content_length" : 24
}
},
{
"data" : "VGhpcyBpcyBhIHRlc3QK",
"attachment" : {
"content_type" : "text/plain; charset=ISO-8859-1",
"language" : "en",
"content" : "This is a test",
"content_length" : 16
}
}
]
}
}
您可以链接RemoveProcessor
以从data
删除_source
字段。