在 NEST (elasticsearch) 中使用二进制类型

Using binary type with NEST (elasticsearch)

我想通过我的 C# 代码将一个二进制参数存储在我的 Elasticsearch 服务器中。 None 我尝试在索引中使用的类型 class 转换为它。

有没有办法显式指示我的程序存储二进制文件,比如从字节数组(当然可以转换为其他类型)?

或者,有没有办法配置参数不被存储(就像 Json 属性 "stored": false)?因为我的主要问题是那个大参数的复制和索引(不理想但足够)

更新:我试图将我的 NEST 版本降级到 1.6.1 以使用该属性

[ElasticProperty(Name = "Data", Type = FieldType.Binary, Store = false)]
public byte[] Data { get; set; }

但是当我用 属性 保存文档时,它仍然坚持要映射一个字符串(我在我的 Sense 插件中通过 运行 GET mydb/_mapping 检查)

Elasticsearch supports binary types 可以使用 NEST 中的属性使用 NEST 1.x

中的以下内容进行设置
public class Document
{
    [ElasticProperty(Type = FieldType.Binary, Store = false)]
    public string Binary { get; set; }
}

public class Document
{
    [Binary(Store= false)]
    public string Binary { get; set; }
}

在 NEST 2.x

请注意,二进制类型应作为 base 64 编码字符串 (1.x docs or 2.x docs) 发送到 Elasticsearch。您可以使用类似 (for 2.x)

的方式处理 POCO 类型中的转换
public class Document
{
    [JsonIgnore]
    public byte[] BinaryBytes { get; set;}

    [Binary]
    [JsonProperty("binary")]
    public string Binary
    {
        get
        {
            return BinaryBytes != null ? Convert.ToBase64String(BinaryBytes) : null;
        }
        protected set
        {
            if (value != null) BinaryBytes = Convert.FromBase64String(value);
        }
    }
}  

client.CreateIndex("index-name", c => c
    .Mappings(m => m
        .Map<Document>(d => d
            .AutoMap()
        )
    )
);

产生

{
  "mappings": {
    "document": {
      "properties": {
        "binary": {
          "type": "binary"
        }
      }
    }
  }
}

然后在模型上设置BinaryBytes,NEST会在请求中发送Binary的内容。您也可以将 Binary 设为私有 属性,如果它不会让模型的用户感到困惑的话。