繁体   English   中英

如何使用NEST客户端在一系列附件中使用附件处理器并删除处理器?

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM