Ode*_*yar 0 binary elasticsearch nest elasticsearch-net
我想通过我的 C# 代码将一个二进制参数存储在我的 Elasticsearch 服务器中。我尝试在索引类中使用的类型都没有转换为它。
有没有办法明确指示我的程序存储二进制文件,比如从字节数组(当然可以转换为其他类型)?
或者,有没有办法配置不存储的参数(如 Json 属性"stored": false)?对我来说主要问题是复制和索引那个大参数(不理想但足够)
更新:我试图将我的 NEST 版本降级到 1.6.1 以使用该属性
[ElasticProperty(Name = "Data", Type = FieldType.Binary, Store = false)]
public byte[] Data { get; set; }
Run Code Online (Sandbox Code Playgroud)
但是当我使用该属性保存文档时,它仍然坚持映射一个字符串(我通过GET mydb/_mapping在我的 Sense 插件中运行来检查)
Elasticsearch 支持二进制类型,可以使用 NEST 中的属性在 NEST 1.x 中使用以下属性进行设置
public class Document
{
[ElasticProperty(Type = FieldType.Binary, Store = false)]
public string Binary { get; set; }
}
Run Code Online (Sandbox Code Playgroud)
或者
public class Document
{
[Binary(Store= false)]
public string Binary { get; set; }
}
Run Code Online (Sandbox Code Playgroud)
在 NEST 2.x 中
请注意,二进制类型应作为 base 64 编码字符串(1.x docs或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()
)
)
);
Run Code Online (Sandbox Code Playgroud)
这产生
{
"mappings": {
"document": {
"properties": {
"binary": {
"type": "binary"
}
}
}
}
}
Run Code Online (Sandbox Code Playgroud)
然后您将BinaryBytes在模型上进行设置,NEST 将发送Binary请求中的内容。Binary如果模型的用户不会感到困惑,您也可以创建一个私有属性。
| 归档时间: |
|
| 查看次数: |
1222 次 |
| 最近记录: |