ElasticSearch& NEST 6.x:将复杂对象映射到String

时间:2018-05-30 21:55:08

标签: elasticsearch nest elasticsearch-6

我试图在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")
                        )
                    )
                )
            )

1 个答案:

答案 0 :(得分:0)

您需要告诉NEST如何序列化VersionNo,以便将该类型的实例序列化为字符串。最简单的方法是

  1. 添加nuget包NEST.JsonNetSerializer
  2. Hook up the JsonNetSerializer in NEST.JsonNetSerializer package以便Json.NET是NEST用于您的文档的序列化程序
  3. 为知道如何将VersionNo序列化为字符串值的VersionNo写一个custom JsonConverter,以及如何将字符串值读入VersionNo
  4. 或者,你可以在VersionNo上定义一个字符串 property ,它将值作为被覆盖的ToString()方法连接起来。除了MajorMinorBuildRevision属性之外,还可以在Elasticsearch中映射此属性。使用这种方法,您可以搜索任何属性,因为每个属性都将被编入索引。