0

我正在尝试在 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")
                        )
                    )
                )
            )
4

1 回答 1

0

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

  1. 添加 nuget 包NEST.JsonNetSerializer
  2. 连接JsonNetSerializerNEST.JsonNetSerializer 包,以便 Json.NET 成为 NEST 用于您的文档的序列化程序
  3. 为知道如何序列化为字符串JsonConverter以及如何将字符串值读入VersionNoVersionNoVersionNo

或者,您可以只定义一个字符串属性VersionNo将值连接起来,就像被覆盖的ToString()方法一样。除了 、 和 属性之外,该属性还可以在 ElasticsearchMajor中进行Minor映射。使用这种方法,您可以搜索任何属性,因为每个属性都会被索引。BuildRevision

于 2018-05-31T02:10:25.557 回答