[英]How to use Elasticsearch Ingest Attachment Processor Plugin in Java
[英]How to use the attachment processor and remove processor within an array of attachments with NEST client?
问题描述
我想使用附件处理器并删除一系列附件中的处理器。 我知道一个事实,即为此目的需要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")
)
)
)
)
);
您的代码缺少ForeachProcessor
; NEST的实现几乎是Elasticsearch JSON示例的直接转换。 使用NEST中可用的Attachment
类型也容易一些 ,提取数据的attachment
对象将反序列化为该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
以从_source
删除data
字段。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.