gpt4 book ai didi

elasticsearch - 映射到多态列表

转载 作者:行者123 更新时间:2023-11-29 02:55:17 25 4
gpt4 key购买 nike

我是 ElasticSearch 的新手,正尝试在我的带有 Nest 的 C# 应用程序中使用它。我有一个类,它包含一个基类型列表,其中包含从它继承的类:

public class Automobile
{
public string ModelName { get; set; }
public double EngineSize { get; set; }
}

public class Truck : Automobile
{
public double CarryWeight { get; set; }
}

public class Car : Automobile
{
public short SaftyStars { get; set; }
}

public class MotorCycle : Automobile
{
public double DecibleNoise { get; set; }
}

public class AutoDealerShip
{
public string Name { get; set; }
[ElasticProperty(Type = FieldType.nested)]
public IList<Automobile> Models { get; set; }

public AutoDealerShip()
{
Models = new List<Automobile>();
}
}

我正在尝试映射类以便保存实际对象:

ElasticClient.MapFluent<AutoDealerShip>(m => m.MapFromAttributes().
Properties(prop => prop.
NestedObject<Automobile>(n => n.
Name(p => p.
Models.First()).
MapFromAttributes().
Dynamic())));

当尝试索引数据并检索它时:

private static void IndexPolymorphicObject()
{
ElasticClient.DeleteIndex(PersonIndex);

var dealerShip = new AutoDealerShip();
dealerShip.Name = "Mikes dealership";
dealerShip.Models.Add(new Truck());
dealerShip.Models.Add(new Car());
dealerShip.Models.Add(new MotorCycle());
ElasticClient.Index(dealerShip);
ElasticClient.Flush();
}

private static void GetPolyMorphicData()
{
var result = ElasticClient.Search<AutoDealerShip>(srch => srch.
Query(q => q.MatchAll()));
var dealerShip = result.Documents.First();
foreach (var automobile in dealerShip.Models)
{
Console.WriteLine("Automobile of type {0}",automobile.GetType());
}
}

我不断取回 AutoMobile 类型的对象。有没有办法使用 nest 存储多态数据?

谢谢,

伊扎尔

最佳答案

默认情况下,NEST 对您存储的文档的逆变结果有很好的支持

如果你这样做

Index<B>()

Index<C>()

Index<D>()

然后搜索 Search<A>(s=>s.Types(B,C,D))鉴于它们都派生自 A,您将获得一个 IEnumerable 结果,其中包含 B、C 和 D 的实际实例。

要在您自己的文档中加入反/协方差,您必须自己进行连接。

您必须在该属性上注册一个自定义的 jsonconverter,以确保 JSON.net 将 json 反序列化回实际的子类型而不是 supper。

关于elasticsearch - 映射到多态列表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21275789/

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