当不推荐使用Map时,如何使用nest fluentapi定义父/子关系?

zbq4xfa0  于 2021-06-09  发布在  ElasticSearch
关注(0)|答案(1)|浏览(298)

我想使用fluentapi创建父子Map。没有例子,如何在文档上做到这一点。我发现的唯一一个例子是https://discuss.elastic.co/t/help-with-nest-fluentapi-create-parent-child-mapping-on-existing-index/90248 . 但这里使用的是不推荐使用的Map。现在如何使用fluentapi而不是automap(),而不使用不推荐的Map?

pobjuy32

pobjuy321#

看一下父/子关系文档。下面是一个示例,它将遍历Map和索引文档。
下面是一个例子

private static void Main()
{
    var defaultIndex = "my_index";
    var pool = new SingleNodeConnectionPool(new Uri("http://localhost:9200"));

    var settings = new ConnectionSettings(pool)
        .DefaultIndex(defaultIndex);

    var client = new ElasticClient(settings);

    var createIndexResponse = client.Indices.Create(defaultIndex, c => c
        .Map<MyDocument>(m => m
            .RoutingField(r => r.Required())
            // map properties of parent document
            .Properties<MyParent>(p => p
                .Text(t => t
                    .Name(n => n.ParentProperty)
                )
            )
            // map properties of child document
            .Properties<MyChild>(p => p
                .Text(t => t
                    .Name(n => n.ChildProperty)
                )
            )
            // map properties of base document
            .Properties(p => p
                .Join(j => j
                    .Name(p => p.MyJoinField)
                    .Relations(r => r
                        .Join<MyParent, MyChild>()
                    )
                )
            )
        )
    );
}

public abstract class MyDocument
{
    public int Id { get; set; }
    public JoinField MyJoinField { get; set; }
}

public class MyParent : MyDocument
{
    public string ParentProperty { get; set; }
}

public class MyChild : MyDocument
{
    public string ChildProperty { get; set; }
}

相关问题