Elasticsearch.Nest 教程系列 9-6 转换:Document paths | 文档路径

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

  • 官方文档见此: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


Elasticsearch中的许多API描述了文档的路径。在NEST中,除了生成分别带有 Index,Type 和 Id 类型的构造函数外,还有一个构造函数允许你使用 DocumentPath 类型的实例更简洁地描述文档的路径。

eg:创建一个基于 Project 类的 Document,Id=1

1
IDocumentPath path = new DocumentPath<Project>(1);

你也可以指定 Index 的名字:

1
var path = new DocumentPath<Project>(1).Index("project1");

通过 DocumentPath 静态方法来进行指定:

1
2
//以下方式等效于上方
var path = DocumentPath<Project>.Id(1).Index("projectindex");

通过 CLR 类型实例创建文档类型:

  • DocumentPath 提供了重载方法可以使用 CLR 类型

1
2
3
4
5
6
7
8
9
var project = new Project { Name = "hello-world" };

IDocumentPath path = new DocumentPath<Project>(project);Expect("project").WhenSerializing(path.Index);Expect("hello-world").WhenSerializing(path.Id);

//指定 Index
path = new DocumentPath<Project>(project).Index("project1");

//或者使用静态方法
path = DocumentPath<Project>.Id(project);Expect("project").WhenSerializing(path.Index);

使用 IndexRequest

1
2
3
4
5
6
7
8
9
var project = new Project { Name = "hello-world" };
var request = new IndexRequest<Project>(2) { Document = project };
request = new IndexRequest<Project>(project) { };

//使用其他重载
request = new IndexRequest<Project>(IndexName.From<Project>(), 2)
{
Document = project
};