elasticsearch - ElasticSearch 和 NEST 6.x:将复杂对象映射到字符串
问题描述
我正在尝试在 elasticsearch 中设置索引并遇到子对象的问题。
鉴于以下情况:
public class VersionNo
{
public string Major { get; set; }
public string Minor { get; set; }
public string Build { get; set; }
public string Revision { get; set; }
public override string ToString()
{
return $"{Major}_{Minor}_{Build}_{Revision}";
}
}
public class Workflow
{
public string Id { get; set; }
public string Name { get; set; }
public VersionNo VersionNo { get; set; }
}
我将如何为 Workflow.VersionNo 构建一个流畅的映射,以便索引以“Major.Minor.Build.Revision”结束?在下面的示例中,我无法弄清楚如何设置“versionNo”以正确组合子字段...
.Mappings(ms => ms
.Map<Workflow>(m => m
.Properties(props => props
.Text(t => t
.Name("name")
)
.Text(t => t
.Name("versionNo")
)
.Text(t => t
.Name("id")
)
)
)
)
解决方案
您需要告诉 NEST 如何序列化VersionNo
,以便将该类型的实例序列化为字符串。最直接的方法是
- 添加 nuget 包NEST.JsonNetSerializer
- 连接
JsonNetSerializer
NEST.JsonNetSerializer 包,以便 Json.NET 成为 NEST 用于您的文档的序列化程序 - 为知道如何序列化为字符串值
JsonConverter
以及如何将字符串值读入VersionNo
VersionNo
VersionNo
或者,您可以只定义一个字符串属性,VersionNo
将值连接起来,就像被覆盖的ToString()
方法一样。除了 、 和 属性之外,该属性还可以在 ElasticsearchMajor
中进行Minor
映射。使用这种方法,您可以搜索任何属性,因为每个属性都会被索引。Build
Revision
推荐阅读
- javascript - 即使仅在页面刷新 OAuth2 一次后如何保持登录谷歌选择器
- javascript - 在数组中查找对象时,Typescript 对象可能未定义
- statistics - 是否有对 2 个变量进行排序的命令?
- ios - 使用 UIPageViewController 为部分翻页设置动画
- webrtc - WebRTC:事件“ontrack”不会触发
- python - 如何在 MacBook Air M1 上安装 python 和工作 ide
- python - dash 和另一个线程之间使用队列进行通信
- java - 使用 JSoup 从网站收集列表条目时被抛出我的 for 循环
- javascript - 使用材质 UI 时出现的 Grid 问题
- prestashop-1.7 - 如何在 Prestashop 中将添加到购物车替换为缺货