Elasticsearch.Nest 教程系列 9-2 转换:Relation names inference | 关系名推断

  • 本系列博文是“伪”官方文档翻译(更加本土化),并非完全将官方文档进行翻译,而是在查阅、测试原始文档并转换为自己真知灼见后的“准”翻译。有不同见解 / 说明不周的地方,还请海涵、不吝拍砖 :)

  • 官方文档见此:https://www.elastic.co/guide/en/elasticsearch/client/net-api/current/introduction.html

  • 本系列对应的版本环境:ElasticSearch@7.3.1,NEST@7.3.1,IDE 和开发平台默认为 VS2019,.NET CORE 2.1


当你使用子父级关系的时候,需要将子父级文档索引(添加)到同一个索引中,在 ES 5.x 的时候,你可以通过 / 中的 来进行指定,但从 ES7 开始,已经没有 type 一说(type=_doc),这个时候,你需要用 RelationName 来进行代替。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
var settings = new ConnectionSettings()
.DefaultMappingFor<CommitActivity>(m => m
.IndexName("projects-and-commits")
.RelationName("commits")
)
.DefaultMappingFor<Project>(m => m
.IndexName("projects-and-commits")
.RelationName("projects")
);

var resolver = new RelationNameResolver(settings);
var relation = resolver.Resolve<Project>();
relation.Should().Be("projects");

relation = resolver.Resolve<CommitActivity>();
relation.Should().Be("commits");
  • RelationName 通过 DefaultTypeNameInferrer 使用一个 string 来表示转换后的 CLR 类型。

  • 显式的配置 TypeName 不会影响原始 CLR 类型。