在 NEST 中发送原始批量索引查询或仅以特定方式序列化文档
Send raw bulk index query in NEST or serialize ONLY the document in a specific way
我需要为用于批量索引查询的 JsonSerializer 启用对象类型处理。但是,当我更改 NEST 的序列化程序设置时,批量查询被序列化为一个整体是错误的。
我使用的序列化器:
public class SearchJsonNetSerializer : JsonNetSerializer
{
public SearchJsonNetSerializer(IConnectionSettingsValues settings)
: base(settings)
{
}
protected override void ModifyJsonSerializerSettings(JsonSerializerSettings settings)
{
settings.Formatting = Formatting.None;
settings.TypeNameHandling = TypeNameHandling.Objects;
}
}
我得到的输出:
{"index":{"$type":"Nest.BulkIndexOperation`1[[TestProject.TestDTO, TestProject]], Nest","_type":"testdto","_id":"146949756709543936"}}
{"$type":"TestProject.TestDTO, TestProject","Id":146949756709543936,"Title":"test","TitleRaw":"test"}
第二行是正确的,但是,NEST 使用序列化程序设置以完全破坏请求的方式序列化初始行。
有没有办法将更改后的序列化仅应用于实际对象?如果没有,有没有办法发送一个原始的、准备好的 json 字符串作为批量查询的请求?我在旧版本中看到过该功能,但在当前版本 - 2.0 中,我找不到实现该功能的方法...
这与https://github.com/elastic/elasticsearch-net/issues/1155
有关
很遗憾,您无法在 JSON.NET
中执行以下操作
[JsonObject(TypeNameHandling = TypeNameHandling.Objects)]
public class MyPoco {}
这将解决手头的问题,只为您的特定类型启用该类型名称处理。遗憾的是,它只能在属性上指定。会在那里提出一个很棒的功能请求。
您有两个选择,要么为您的类型编写自定义序列化程序,要么预序列化它们并使用低级客户端发送它们,但是您还需要手动添加元数据项。
var client = new ElasticClient().LowLevel.Bulk<BulkResponse>("index", "type", new[]
{
"",
});
NEST 确实提供了几种方法来获得真正的协变搜索结果而无需索引 $type
:
https://www.elastic.co/guide/en/elasticsearch/client/net-api/current/covariant-search-results.html
我需要为用于批量索引查询的 JsonSerializer 启用对象类型处理。但是,当我更改 NEST 的序列化程序设置时,批量查询被序列化为一个整体是错误的。
我使用的序列化器:
public class SearchJsonNetSerializer : JsonNetSerializer
{
public SearchJsonNetSerializer(IConnectionSettingsValues settings)
: base(settings)
{
}
protected override void ModifyJsonSerializerSettings(JsonSerializerSettings settings)
{
settings.Formatting = Formatting.None;
settings.TypeNameHandling = TypeNameHandling.Objects;
}
}
我得到的输出:
{"index":{"$type":"Nest.BulkIndexOperation`1[[TestProject.TestDTO, TestProject]], Nest","_type":"testdto","_id":"146949756709543936"}}
{"$type":"TestProject.TestDTO, TestProject","Id":146949756709543936,"Title":"test","TitleRaw":"test"}
第二行是正确的,但是,NEST 使用序列化程序设置以完全破坏请求的方式序列化初始行。
有没有办法将更改后的序列化仅应用于实际对象?如果没有,有没有办法发送一个原始的、准备好的 json 字符串作为批量查询的请求?我在旧版本中看到过该功能,但在当前版本 - 2.0 中,我找不到实现该功能的方法...
这与https://github.com/elastic/elasticsearch-net/issues/1155
有关很遗憾,您无法在 JSON.NET
[JsonObject(TypeNameHandling = TypeNameHandling.Objects)]
public class MyPoco {}
这将解决手头的问题,只为您的特定类型启用该类型名称处理。遗憾的是,它只能在属性上指定。会在那里提出一个很棒的功能请求。
您有两个选择,要么为您的类型编写自定义序列化程序,要么预序列化它们并使用低级客户端发送它们,但是您还需要手动添加元数据项。
var client = new ElasticClient().LowLevel.Bulk<BulkResponse>("index", "type", new[]
{
"",
});
NEST 确实提供了几种方法来获得真正的协变搜索结果而无需索引 $type
:
https://www.elastic.co/guide/en/elasticsearch/client/net-api/current/covariant-search-results.html