在 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
设为私有 属性,如果它不会让模型的用户感到困惑的话。
我想通过我的 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
设为私有 属性,如果它不会让模型的用户感到困惑的话。