gpt4 book ai didi

elasticsearch - 使用Nest 7.0.0-alpha1在Elasticsearch中无法正确映射抽象对象

转载 作者:行者123 更新时间:2023-12-02 23:15:35 25 4
gpt4 key购买 nike

我正在使用NEST(.NET 4.8)导入数据,但是在使映射在NEST 7.0.0-alpha1中正常工作时遇到了问题。

我具有以下类结构:

class LinkActor
{
public Actor Actor { get; set; }
}

abstract class Actor
{
public string Description { get; set; }
}

class Person : Actor
{
public string Name { get; set; }
}

我以这种方式连接到Elasticsearch:
var connectionSettings = new ConnectionSettings(new Uri(connection));
connectionSettings.DefaultIndex(indexName);
var client = new ElasticClient(connectionSettings);

实际数据如下所示:
var personActor = new Person
{
Description = "Description",
Name = "Name"
};

var linkActor = new LinkActor
{
Actor = personActor
};

数据索引如下:
result = client.IndexDocument(linkActor);

使用NEST 6.6我在Elasticsearch 6.5.2中获得以下数据:
"actor": {
"name": "Name",
"description": "Description"
}

但是,当使用NEST 7.0.0-alpha1时,我在Elasticsearch 7.0.0中获得以下数据:
 "actor": {
"description": "Description"
}

因此,缺少来自具体类的数据。我显然缺少/不了解某些新的映射功能,但是我对AutoMap的尝试失败了:
client.Map<(attempt with each of the above classes)>(m => m.AutoMap());

是否仍然可以在NEST 7.0.0-alpha1中映射来自具体类的数据?

最佳答案

我找到了使用NEST.JsonNetSerializer的解决方法(记住要安装它),这使我可以直接传递JObject:

使用池连接到Elasticsearch,以便您可以添加JsonNetSerializer.Default:

var pool = new SingleNodeConnectionPool(new Uri(connection));
var connectionSettings = new ConnectionSettings(pool, JsonNetSerializer.Default);
connectionSettings.DefaultIndex(indexName);
var client = new ElasticClient(connectionSettings);

从上方将linkActor对象转换为JObject(为清楚起见,省略了JsonSerializerSettings,将它们添加以获得CamelCasing):
var linkActorSerialized = JsonConvert.SerializeObject(linkActor);
var linkActorJObject = JObject.Parse(linkActorSerialized);
result = client.IndexDocument(linkActorJObject);

这样可以得到预期的结果:
"actor": {
"name": "Name",
"description": "Description"
}

这是一种解决方法,希望有人能够解释问题中的映射。

关于elasticsearch - 使用Nest 7.0.0-alpha1在Elasticsearch中无法正确映射抽象对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55849350/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com