加载中

约定

本节详细介绍了类型化客户端的构建约定。

类型化客户端位于 go-elasticsearch 存储库中的 typedapi 包内。

整个客户端在包的根目录中进行了索引汇总,以便实例化后方便访问。

每个端点都位于 typedapi 内自己的包中,包含该端点的客户端以及(如果适用)Request 结构。

请求基于从 elasticsearch-specification 存储库生成并汇总在 typedapi 内的 types 包中的一组结构。

在适当的时候,名称可能会以 `_` 作为后缀

  • 以避免与受保护的关键字(rangeiftype 等)发生冲突。
  • 以反映 API 中存在前导下划线,例如 \_index vs Index_\_source vs Source_

所有可用的端点都在单独的包中生成并汇集到客户端中。core 命名空间在客户端根目录处重复,以便于访问。

每个端点都遵循工厂模式,每次都返回一个指向新实例的指针。

res, err := es.Search().Index("index_name").AllowPartialSearchResults(true).Do(context.Background())

如果所使用的特定端点需要参数,这些参数将作为与 API 相同的顺序的参数存在。

es.Create("index_name", "doc_id").Do(context.Background())

否则,您可以在构建器中找到它们。

es.Search().Index("index_name").Do(context.Background())

或者,每个端点都可以直接从其包中实例化。

transport, err := elastictransport.New(elastictransport.Config{})
res, err = search.New(transport).Do(context.Background())

Do 方法接受一个可选的 context,通过传输运行请求,并返回结果以及错误。

对于空体的端点,例如 core.Exists,还有一个附加方法 IsSuccess。与 Do 方法一样,它接受一个可选的 context,在需要时耗尽并关闭正文,并返回一个布尔值和一个错误。

if exists, err := es.Core.Exists("index_name", "doc_id").IsSuccess(context.Background()); exists {
    // The document exists!
} else if err != nil {
    // An error occurred.
}

请求围绕尽可能贴近 Elasticsearch API 的结构进行建模,并使用标准的 json/encoding 进行序列化。相应的请求可以在其端点所在的同一个包中找到,并附带一个构建器,允许您通过遵循类型来深入了解 API。

types.Query{
    Term: map[string]types.TermQuery{
        "name": {Value: "Foo"},
    },
}

虽然不是初始发布的一部分,但响应将在稍后添加。

请求和响应依赖于从 types 包中的 elasticsearch-specification 生成的一组结构。每个类型都带有 json 标签。

Elasticsearch API 有多个枚举实例,每个实例都在 types/enums 中的一个包内。枚举被声明为一种类型,枚举的每个成员都是一个带有其值的导出变量。枚举类型序列化为相关的 API 值,例如可以在搜索 API 中找到的 refresh 选项。

refresh.True => "true"
refresh.False => "false"
refresh.Waitfor => "wait_for"

为了捕捉 API 的表达能力,联合字段表示为接口的类型别名。

© . This site is unofficial and not affiliated with Elasticsearch BV.