elasticsearchx

package
v0.1.4 Latest Latest
Warning

This package is not in the latest version of its module.

Go to latest
Published: Nov 10, 2026 License: Apache-2.0 Imports: 20 Imported by: 0

Documentation

Overview

Package elasticsearchx 提供 Elasticsearch 7、8、9 共用的结果日志和基础操作。 版本适配包负责连接创建。 v8/v9 使用官方 NewBase 和共用的 transport v8;启动验活只核对服务端主版本, 不保证所有旧次版本均兼容。

Config 中只有 Name 和 Addresses 必填,其余字段均可省略。 认证参数按服务端要求选择:APIKey 与 Username/Password 不能同时设置, Password 非空时必须设置 Username。CACert 在需要信任额外 CA 时提供。 创建入口不接收外部 ctx;StartupTimeout 控制内部验活总期限,零值默认 5 秒。 验活 context 在创建返回时释放,后续操作仍使用各自传入的 ctx。 Client.Close() 显式关闭并等待 SDK 收尾,不设置关闭期限;调用前先停止业务请求。 未设置的 DialTimeout 默认 5 秒,SlowThreshold 默认 200 毫秒; 连接池零值保留默认设置,其中每节点最多保留 10 条空闲连接,其余继承默认 Transport。 地址必须包含非空主机名;Transport 清除继承的 TLS 专用拨号器,统一执行拨号与证书验证。 TLS 最低版本为 1.2,默认 Transport 已设置更严格的版本下限时保留它。 不启用 SDK 自动重试;Go HTTP Transport 自身仍遵循标准库的安全重发规则。 v7 适配层包装 EOF 以规避 SDK 重试缺陷,调用方可用 errors.Is(err, io.EOF) 判断。 不启用节点发现;Close 后拒绝新的操作,在途操作应由应用先行停止。 v8/v9 的 SDK 后台恢复任务由 Close 收尾;v7 没有对应关闭接口, 已安排的恢复定时器仍会触发,但仅更新连接状态,不主动发起探测请求。 请求结果日志默认关闭,OptLogRequests(true) 显式开启;OptLogDetails 默认关闭详情日志。 两个开关均开启且 ctx 选中的 Logger 至少启用 Info、Warn、Error 之一时才复制响应正文。 未配置 logit 或这些级别均关闭时跳过日志正文采集,业务读取和解析保持不变。 启动验活不输出请求结果日志或登记下游耗时,失败时仍返回错误。 JSON 响应只解析首个值,忽略后续内容且不额外确认 EOF;已观察到的读取错误仍返回。

Search 返回扁平结果,Total 为 nil 表示未统计总数;非 nil 时 Relation 为 eq 表示 准确数量,gte 表示下限。 超时或分片失败时,Search 同时返回已有结果和 *PartialSearchError; 错误包含 TimedOut 和 FailedShards,可通过 errors.As 识别,再决定是否接受部分结果。 若同时发生 Body 关闭失败,结果仍保留,错误链包含两类错误;识别部分结果错误不代表没有其他错误。 Count 无法携带分片状态,分片失败时返回零值及错误,避免接受部分计数。 Search 拒绝非数组的 hits.hits;Get 要求成功响应含 found: true,存在的 _source 必须为对象。 文档存在但索引禁用 _source 时,Get 返回 (nil, nil);文档 404 仍返回 ErrNotFound。 Index 校验成功响应,仅副本失败时仍返回成功,不应据此重试;副本恢复由 ES 负责。 开启请求日志时记 Warn 和 failed_shards;Body 关闭等独立错误仍正常返回并记 Error。 未分配副本不算失败,ingest pipeline 丢弃文档产生的 noop 仍按成功处理。 Took(服务端耗时)和 TerminatedEarly(提前终止标记)暂以注释保留, 需要时同步恢复解析、映射和测试;使用 terminate_after 时按需启用 TerminatedEarly。 Hits、Aggregations 和 Shards.Failures 保留原始 JSON,业务解析时应使用明确的字段类型 或 json.Decoder.UseNumber 保持整数精度。 DecodeSources[T](result.Hits) 按命中顺序解码 _source,零命中返回非 nil 空切片; _source 缺失、null 或解码失败时返回错误且不保留部分结果。 一次解码整个命中数组,类型匹配和自定义解码行为遵循 encoding/json,不额外限制 source 类型。 缺失或 null 的 source 错误包含命中下标;解码失败直接保留原始错误链,不重新解析定位。 业务必填字段由调用方校验;此函数不处理 Search 的部分结果错误或命中元数据。 CreateIndex 创建具体索引,返回的两个确认标记均须由调用方检查;未确认不能直接重试。 完整创建结果在 Body 关闭失败时仍保留。DeleteIndex 只删除具体索引并要求确认, 索引缺失仍返回 HTTPError。Analyze 使用索引上的命名分析器处理单段文本,返回 tokens 数组。 三者均拒绝通配符和索引列表。HTTPError 的 Reason、RootCause、CausedBy 可显式用于诊断, Error() 文本和概要日志仍只包含状态与类型。

ReloadSearchAnalyzers 重载单个具体索引的搜索分析器,成功后仅清理 request cache。 调用前须将同义词文件更新到所有数据节点,过滤器设置 updateable: true 且仅用于搜索分析器。 两次请求共用 ctx,分别记录日志和耗时,不重试或回滚。 reload 完整响应中存在成功节点时,即使分片或关闭失败也尽力清理缓存,并保留两阶段错误。 未取得有效响应或失败时没有成功节点则直接返回;清理前发现 ctx 已取消时停止,并合并取消错误。 返回的 ReloadSearchAnalyzersResult 保留 Shards、ReloadDetails 和 CacheShards; CacheShards 为 nil 表示没有有效的缓存清理响应。 分片失败、关闭失败或后续缓存清理失败时保留已经完整解析的结果,调用方仍须处理错误。 nil 错误不保证存在可重载的分析器,应检查 ReloadDetails 中是否包含预期分析器。 client 为已创建的客户端,products 为实际索引名(不使用别名或数据流):

result, err := client.ReloadSearchAnalyzers(ctx, "products")
if err != nil {
    // 可检查已完成阶段的结果,诊断部分失败;不要将整个调用视为没有生效。
    return err
}
for _, detail := range result.ReloadDetails {
    _ = detail.Index
    _ = detail.ReloadedAnalyzers
    _ = detail.ReloadedNodeIDs
}
return nil

下例还需导入 errors、time、github.com/bpcoder16/pixiu/infra/elasticsearchx/v8:

client, err := v8.New(elasticsearchx.Config{
    Name:                "catalog",                                    // 必填:实例名称
    Addresses:           []string{"https://search.example.com:9200"},   // 必填:至少一个节点地址
    APIKey:              apiKey,                                       // 可选:按服务端要求配置认证
    CACert:              caPEM,                                        // 可选:额外信任的 PEM CA 证书
    MaxIdleConns:        100,                                          // 可选:所有节点合计的空闲连接上限
    MaxIdleConnsPerHost: 20,                                           // 可选:每节点空闲连接上限
    MaxConnsPerHost:     50,                                           // 可选:每节点总连接上限
    IdleConnTimeout:     90 * time.Second,                             // 可选:空闲连接保留时间
},
    elasticsearchx.OptLogRequests(true), // 可选:显式开启请求结果日志
    elasticsearchx.OptLogDetails(true), // 可选:采集请求体和必要响应信息
)
if err != nil {
    return err
}
defer client.Close() // 应用停止请求后、日志关闭前调用
result, err := client.Search(ctx, "products", queryDSL)
if err != nil {
    // 本例拒绝所有错误,包括超时或分片失败产生的 PartialSearchError。
    return err
}
if result.Total != nil {
    _ = result.Total.Value
    _ = result.Total.Relation
}
type productSource struct {
    ID int64 `json:"id"`
}
products, err := elasticsearchx.DecodeSources[productSource](result.Hits)
if err != nil {
    return err
}
for _, product := range products {
    _ = product.ID
}
_ = result.Aggregations
return nil

Bulk 支持 index、create、update、delete,可在同一索引的一次请求内混用。 所有动作均通过构造函数创建并要求显式 ID;零值 BulkAction 不可用。 NewBulkIndex 新增或整篇覆盖,NewBulkCreate 仅新增(ID 已存在时失败), NewBulkDelete 删除文档(文档已不存在也视为完成)。 NewBulkUpdate 仅部分更新,文档不存在时失败; NewBulkUpsert 在文档存在时部分更新,不存在时插入同一份内容; NewBulkUpsertWithInitial 在文档存在时部分更新,不存在时插入独立的初始文档。 BulkAction 的字段均为内部实现;三个 update 构造函数均编码为官方 update 动作。 构造函数只组装动作,必要参数在 Bulk 发送前校验;缺少初始文档不会退化为普通更新。 index/delete 可调用 WithExternalVersion 设置外部版本,该方法返回动作副本,原动作不变; 文档不做深拷贝,create/update 不接受外部版本。 例如,client 为已创建的客户端:

result, err := client.Bulk(ctx, "products", []elasticsearchx.BulkAction{
    elasticsearchx.NewBulkIndex("1", map[string]any{
        "name":  "新版商品",
        "stock": 10,
    }).WithExternalVersion(12, elasticsearchx.VersionExternalGTE),
    elasticsearchx.NewBulkCreate("2", map[string]any{
        "name":  "新商品",
        "stock": 5,
    }),
    elasticsearchx.NewBulkUpdate("1", map[string]any{"stock": 8}),
    elasticsearchx.NewBulkUpsert("4", map[string]any{
        "name":  "补货商品",
        "stock": 6,
    }),
    elasticsearchx.NewBulkUpsertWithInitial(
        "5",
        map[string]any{"stock": 3},
        map[string]any{
            "name":  "初始商品",
            "stock": 3,
        },
    ),
    elasticsearchx.NewBulkDelete("3"),
})
if err != nil {
    var bulkErr *elasticsearchx.BulkError
    if errors.As(err, &bulkErr) {
        // 部分失败仍保留成功数与按输入顺序排列的失败项,不应整批盲目重试。
        _ = result.Succeeded
        _ = result.Failures
    }
    return err
}
return nil

Succeeded 表示成功完成的动作数,也包含 delete 返回 404 且无 error 的情况,不依赖 result 字段。 动作失败返回 BulkError,并保留 result.Failures;仅副本失败不影响成功数或返回错误。 failure.Position 是原始批次中从 0 开始的下标,可通过 actions[failure.Position] 定位原动作。 result.FailedShards 按成功动作累加副本失败数,不对物理分片去重,仅用于观测,不应据此重试。 开启请求日志时,副本异常记 Warn 和 failed_shards;若还有动作或关闭错误则仍记 Error。 create 的重复 ID、update 的文档缺失,以及 delete 的索引缺失仍计为失败。

命名与默认实例由版本适配包创建,公共包负责查询和统一关闭: v7/v8/v9.NewNamed 按 Config.Name 登记,NewDefault 同时设置默认引用。 elasticsearchx.Default() 与 elasticsearchx.Named(cfg.Name) 返回同一实例。 三个版本共用名称空间和一个默认实例;New 和 NewNamed 不设置默认引用。 名称重复或默认实例已存在时返回错误,初始化失败可重试;未知名称、默认未初始化 或 CloseAll 开始后查询会 panic。启动阶段须串行完成所有初始化后才开始业务, 运行期不再新增共享客户端,初始化不能与 CloseAll 并发,关闭后不得重新初始化。

以下样例结合 lifecycle 管理默认与命名客户端,另需导入 errors、logit、lifecycle、v8。 ctx 是业务操作 context,logger 是已创建并通过 logit.SetDefault 设置的日志实例:

var stack lifecycle.Stack
// Stack 逆序关闭:日志最先登记,最后关闭。
if err := stack.Register(func() error {
    return logit.Close(logger)
}); err != nil {
    return err
}
if err := stack.Register(elasticsearchx.CloseAll); err != nil {
    return errors.Join(err, stack.Close())
}
_, err := v8.NewDefault(elasticsearchx.Config{
    Name:      "catalog", // 必填:默认实例也需提供名称
    Addresses: []string{"https://search.example.com:9200"}, // 必填
    APIKey:    apiKey, // 可选:按服务端要求配置
})
if err != nil {
    return errors.Join(err, stack.Close())
}
_, err = v8.NewNamed(elasticsearchx.Config{
    Name:      "audit",
    Addresses: []string{"https://audit-search.example.com:9200"},
    APIKey:    apiKey,
})
if err != nil {
    return errors.Join(err, stack.Close())
}
_, err = elasticsearchx.Default().Count(ctx, "products", queryDSL)
if err != nil {
    return errors.Join(err, stack.Close())
}
_, err = elasticsearchx.Named("audit").Count(ctx, "events", queryDSL)
if err != nil {
    return errors.Join(err, stack.Close())
}
// 应用退出前,先停止并等待所有使用客户端的任务,再关闭 Stack。
return stack.Close()

共享实例只登记一次 CloseAll,不再单独登记默认或命名实例的 Close。 CloseAll 调用各实例的 Close,汇总关闭错误,重复调用复用首次结果。 独立 New 创建的实例不归 CloseAll 管理,仍需自行关闭 Client.Close()。

OptLogRequests(true) 开启请求结果日志,OptLogRequests(false) 关闭结果及详情日志。 单独设置 OptLogDetails(true) 不会开启请求结果日志。 详情采集只由这两个开关决定,日志级别在最终输出时判断。 详情仅增加 request_body、response_proto、response_body、response_status_text, 不记录 Header;Body 不主动脱敏或截断。请求详情复用已编码的请求体, 响应详情随操作解析采集;解析失败时可能只包含已读取部分。 Client 仅公开封装好的基础操作,不直接接入官方 esapi; 各操作在完成解析和 Body 关闭后,按最终结果统一输出一次日志。 成功及文档不存在为 Info,慢操作和 HTTP 4xx 为 Warn; 网络、HTTP 5xx、解析、收尾及 Search 部分结果错误为 Error。error_type 保留服务端错误类型, 其余情况使用 document_not_found、bulk_error、partial_search_error、transport_error 或 response_error。 ctx 已调用 logit.WithStart 时,每次实际业务请求还记录 elasticsearch_<Name>_<序号> 下游耗时,独立于日志开关和级别过滤;业务可调用 logit.InfoDuration 汇总, 例如 Name 为 catalog 时输出 elasticsearch_catalog_1_duration_ms。 耗时包含请求执行、响应解析和 Body 关闭,不包含请求编码及日志写入。 本地参数错误、空 Bulk 和关闭后拒绝的操作不计时;耗时前缀在客户端创建时计算。

Index

Constants

This section is empty.

Variables

View Source
var ErrNotFound = errors.New("elasticsearchx: document not found")

ErrNotFound 表示 Get 查询的文档不存在。

Functions

func CloseAll

func CloseAll() error

CloseAll 关闭全部已登记的命名及默认客户端,每个实例只关闭一次。 调用各实例的 Close 并汇总错误;重复调用返回同一次关闭结果。 应用须先完成全部初始化,再停止使用客户端的任务,最后调用 CloseAll。

func DecodeSources added in v0.1.3

func DecodeSources[T any](hits json.RawMessage) ([]T, error)

DecodeSources 按命中顺序将 SearchResult.Hits 中每个 _source 解码为 T。 输入必须为 JSON 数组,每个 _source 必须存在且非 null;空数组返回非 nil 空切片。 类型匹配与自定义解码行为沿用 encoding/json,不额外限制 _source 的 JSON 类型。 失败时返回 nil 和错误,不保留部分结果;缺失或 null 的 source 标明从 0 开始的命中位置。 解码错误保留原始错误链;保留整数精度时应使用明确的整数类型或 json.Number, map[string]any 等动态字段中的数字仍默认解码为 float64。 本函数只解码,不判断结果完整性或业务必填字段;调用方须先处理 Search 返回的错误。

func NewTransport

func NewTransport(cfg Config) (*http.Transport, error)

NewTransport 验证配置并创建由该客户端独占的 HTTP 连接池。

Types

type AnalyzeResult

type AnalyzeResult struct {
	Tokens json.RawMessage
}

AnalyzeResult 保留普通分析响应的 tokens 数组,允许合法空数组。

type BulkAction

type BulkAction struct {
	// contains filtered or unexported fields
}

BulkAction 表示一个批量动作,通过 NewBulkIndex、NewBulkCreate、NewBulkDelete 或三个 update 构造函数创建;零值不可用,所有动作均要求显式 ID。 index/delete 可通过 WithExternalVersion 设置外部版本。 构造函数只组装动作,必要参数由 Bulk 在发送前统一校验。

func NewBulkCreate

func NewBulkCreate(id string, document any) BulkAction

NewBulkCreate 构造仅新增动作;文档 ID 已存在时失败。

func NewBulkDelete

func NewBulkDelete(id string) BulkAction

NewBulkDelete 构造删除动作;文档已不存在也视为完成。

func NewBulkIndex

func NewBulkIndex(id string, document any) BulkAction

NewBulkIndex 构造文档写入动作;文档不存在时新增,存在时整篇覆盖。

func NewBulkUpdate

func NewBulkUpdate(id string, patch any) BulkAction

NewBulkUpdate 构造部分更新动作;文档不存在时失败。

func NewBulkUpsert

func NewBulkUpsert(id string, document any) BulkAction

NewBulkUpsert 构造部分更新动作;文档不存在时插入同一份 document。

func NewBulkUpsertWithInitial

func NewBulkUpsertWithInitial(id string, patch, initialDocument any) BulkAction

NewBulkUpsertWithInitial 构造部分更新动作;存在时更新 patch,不存在时插入 initialDocument。 patch 和 initialDocument 均须提供,缺失时由 Bulk 返回错误。

func (BulkAction) WithExternalVersion

func (a BulkAction) WithExternalVersion(version int64, versionType VersionType) BulkAction

WithExternalVersion 返回设置外部版本后的动作副本,不修改原动作,也不深拷贝文档。 仅适用于 index/delete;版本号须非负,versionType 须为 VersionExternal 或 VersionExternalGTE。 参数由 Bulk 在发送前统一校验。

type BulkError

type BulkError struct{ Failed int }

BulkError 表示 HTTP 成功但至少一个批量动作失败。

func (*BulkError) Error

func (e *BulkError) Error() string

type BulkFailure

type BulkFailure struct {
	// Position 是原始 actions 中从 0 开始的下标,重复 ID 也能定位具体动作。
	Position int
	ID       string
	Status   int
	Type     string
	Reason   string
}

BulkFailure 保留失败项供调用方判断是否重试或忽略。

type BulkResult

type BulkResult struct {
	Succeeded int
	Failures  []BulkFailure
	// FailedShards 按成功动作累加副本失败数,不对物理分片去重;仅用于观测,不应据此重试。
	FailedShards int
}

BulkResult 汇总服务端逐项操作结果;Succeeded 包含删除时文档已不存在的动作。 仅副本失败不改变动作的成功结果,也不进入 Failures。

type Client

type Client struct {
	// contains filtered or unexported fields
}

Client 提供跨版本的基础操作,请求执行由内部方法统一处理。

func Attach

func Attach(cfg Config, major int, performer Performer, closeClient func(context.Context) error, transport *http.Transport, opts ...Option) (*Client, error)

Attach 由版本适配包调用:绑定官方客户端并在内部启动期限内验证服务端版本。 传入的 transport 由返回的 Client 接管;失败时也会关闭它。

func Default

func Default() *Client

Default 返回显式初始化的默认客户端,与 Named(cfg.Name) 是同一实例。 未初始化或 CloseAll 开始后调用会 panic;New 和 NewNamed 不设置默认实例。

func Named

func Named(name string) *Client

Named 返回已登记的命名客户端;名称不存在或关闭开始后调用会 panic。 7/8/9 版本共用名称空间,初始化完成后可并发查询。

func RegisterDefault

func RegisterDefault(name string, build func() (*Client, error)) (*Client, error)

RegisterDefault 供版本适配包调用:构造默认客户端并同时按 name 登记。 业务使用 v7/v8/v9.NewDefault;构造与生命周期约束与 RegisterNamed 相同。

func RegisterNamed

func RegisterNamed(name string, build func() (*Client, error)) (*Client, error)

RegisterNamed 供版本适配包调用:检查名称后构造并登记客户端。 业务使用 v7/v8/v9.NewNamed;build 须返回新建且独占的实例,失败时自行清理资源。 启动阶段串行初始化,全部创建返回后才开始业务;初始化完成后不得再调用。

func (*Client) Analyze

func (c *Client) Analyze(ctx context.Context, index, analyzer, text string) (AnalyzeResult, error)

Analyze 使用索引上的命名分析器处理一段文本,不启用 explain 模式。

func (*Client) Bulk

func (c *Client) Bulk(ctx context.Context, index string, actions []BulkAction) (BulkResult, error)

Bulk 执行一批动作;部分成功时同时返回结果和 BulkError。

func (*Client) Close

func (c *Client) Close() error

Close 关闭客户端持有的资源;重复调用返回首次结果。停止请求后再调用。 等待 SDK 资源收尾,不继承启动或业务请求的取消,也不额外设置关闭期限。

func (*Client) Count

func (c *Client) Count(ctx context.Context, index string, dsl any) (int64, error)

Count 返回匹配 DSL 的文档数;分片失败时返回零值及错误,不接受部分计数。

func (*Client) CreateIndex

func (c *Client) CreateIndex(ctx context.Context, index string, definition any) (CreateIndexResult, error)

CreateIndex 创建具体索引,definition 提供 settings、mappings 等配置。 nil 错误仅表示响应成功解析,调用方仍须检查两个确认标记。 完整结果在 Body 关闭失败时也保留,供调用方识别已创建的资源并收尾。

func (*Client) DeleteIndex

func (c *Client) DeleteIndex(ctx context.Context, index string) error

DeleteIndex 删除单个具体索引并要求确认;索引不存在仍返回 HTTPError。

func (*Client) Get

func (c *Client) Get(ctx context.Context, index, id string) (json.RawMessage, error)

Get 返回文档的 _source;不存在时返回 ErrNotFound。 文档存在但禁用 _source 时返回 (nil, nil);无效响应返回错误。

func (*Client) Index

func (c *Client) Index(ctx context.Context, index, id string, document any) error

Index 按显式文档 ID 创建或整体覆盖文档。 主分片写入成功时,副本失败不返回错误;开启请求日志时以 Warn 记录失败分片数。

func (*Client) ReloadSearchAnalyzers

func (c *Client) ReloadSearchAnalyzers(ctx context.Context, index string) (ReloadSearchAnalyzersResult, error)

ReloadSearchAnalyzers 重载单个具体索引的搜索分析器,成功后清理该索引的 request cache。 调用方须预先更新所有数据节点的同义词文件,过滤器须设置 updateable: true 且仅用于搜索分析器。 index 须为实际索引名;不解析别名或数据流。两个请求共用 ctx,不重试或回滚。 完整响应中存在成功节点时,即使分片或关闭失败也尽力清理缓存,并保留两阶段错误;ctx 取消后停止。 nil 错误只表示两次请求成功,是否重载了预期分析器应检查 ReloadDetails。

func (*Client) Search

func (c *Client) Search(ctx context.Context, index string, dsl any) (SearchResult, error)

Search 在指定索引执行调用方提供的 DSL。 超时或分片失败时同时返回已有结果及 *PartialSearchError,不将部分结果当作完整成功。 此时若 Body 关闭也失败,结果仍保留,返回的错误链同时包含关闭错误。

type Config

type Config struct {
	// Name 必填,是下游日志和耗时前缀中的实例名称,不能是空字符串或纯空白。
	Name string
	// Addresses 必填,至少提供一个主机名非空的 HTTP(S) 节点地址。
	Addresses []string
	// Username 可选,用于基本认证;不能与 APIKey 同时设置。
	Username string
	// Password 可选,用于基本认证;非空时必须设置 Username,不能与 APIKey 同时设置。
	Password string
	// APIKey 可选,用于 API Key 认证;不能与 Username 或 Password 同时设置。
	APIKey string
	// CACert 可选,是追加到系统根证书池的 PEM 证书内容;为空时继承默认 Transport 的信任配置。
	CACert []byte
	// DialTimeout 可选,是建立连接的超时;零值使用 5 秒,请求总时长由 context 控制。
	DialTimeout time.Duration
	// StartupTimeout 可选,是启动验活的总超时;零值使用 5 秒,不影响后续操作。
	StartupTimeout time.Duration
	// MaxIdleConns 可选,是所有节点合计的空闲连接上限;零值继承默认 Transport。
	MaxIdleConns int
	// MaxIdleConnsPerHost 可选,是每节点空闲连接上限;零值使用 10。
	MaxIdleConnsPerHost int
	// MaxConnsPerHost 可选,是每节点总连接上限;零值继承默认 Transport(标准默认不限)。
	MaxConnsPerHost int
	// IdleConnTimeout 可选,是空闲连接保留时间;零值继承默认 Transport。
	IdleConnTimeout time.Duration
	// SlowThreshold 可选,是慢调用日志阈值;零值使用 200 毫秒。
	SlowThreshold time.Duration
}

Config 配置一个可复用的 Elasticsearch 连接。 Name 和 Addresses 必填,其余字段可选;认证配置取决于服务端要求。 所有时长及连接数配置必须非负,零值使用各字段说明中的默认值。

type CreateIndexResult

type CreateIndexResult struct {
	// Index 是响应中的具体索引名,与请求创建的索引名一致。
	Index string
	// Acknowledged 表示索引创建是否在超时前获得集群确认;false 不代表索引未创建。
	Acknowledged bool
	// ShardsAcknowledged 表示每个分片所需数量的副本是否在超时前启动,默认只等待主分片。
	// false 时分片仍可能随后就绪,不应据此重试创建索引。
	ShardsAcknowledged bool
}

CreateIndexResult 是完整解析的创建响应;未确认不等于索引未创建,不应直接重试。

type ErrorCause

type ErrorCause struct {
	Type     string      `json:"type"`
	Reason   string      `json:"reason"`
	CausedBy *ErrorCause `json:"caused_by"`
}

ErrorCause 保留 ES 返回的结构化原因,供调用方显式诊断;不自动进入错误文本或概要日志。

type HTTPError

type HTTPError struct {
	Status    int
	Type      string
	Reason    string
	RootCause []ErrorCause
	CausedBy  *ErrorCause
}

HTTPError 表示 Elasticsearch 返回非成功的 HTTP 状态。

func (*HTTPError) Error

func (e *HTTPError) Error() string

type Option

type Option func(*Client)

Option 在客户端创建时配置日志行为。

func OptLogDetails

func OptLogDetails(enabled bool) Option

OptLogDetails 控制是否采集请求体和响应详情,默认关闭;需同时开启请求日志开关, 且 ctx 选中的 Logger 至少启用 Info、Warn、Error 之一才采集,最终仍按实际级别过滤。 所有操作在解析和收尾完成后输出日志,响应体只包含实际读取的内容。

func OptLogRequests

func OptLogRequests(enabled bool) Option

OptLogRequests 控制是否输出请求结果日志,默认关闭;设为 true 开启,关闭时仍记录请求级耗时。

type PartialSearchError

type PartialSearchError struct {
	TimedOut     bool
	FailedShards int
}

PartialSearchError 表示搜索响应已完整解析,但超时或分片失败使结果可能不完整。 Search 同时返回已有结果;可通过 errors.As 识别,组合错误中的其他失败仍须处理。

func (*PartialSearchError) Error

func (e *PartialSearchError) Error() string

type Performer

type Performer interface {
	Perform(*http.Request) (*http.Response, error)
}

Performer 是三个官方客户端共同实现的底层请求接口。 错误为 nil 时必须返回非 nil 响应及 Body;无响应体时使用 http.NoBody。

type ReloadDetail

type ReloadDetail struct {
	Index             string   `json:"index"`
	ReloadedAnalyzers []string `json:"reloaded_analyzers"`
	ReloadedNodeIDs   []string `json:"reloaded_node_ids"`
}

ReloadDetail 是服务端报告的单个索引重载详情,空分析器数组不代表同义词已更新。

type ReloadSearchAnalyzersResult

type ReloadSearchAnalyzersResult struct {
	// Shards 是 reload 的执行计数,按持有分片的节点统计,不等于物理分片数。
	Shards        ShardsInfo
	ReloadDetails []ReloadDetail
	// CacheShards 为 nil 表示尚未取得有效的缓存清理响应,不保证请求未发送。
	CacheShards *ShardsInfo
}

ReloadSearchAnalyzersResult 保留两阶段已完整解析的结果,发生分片或关闭错误时仍可用于诊断。

type SearchResult

type SearchResult struct {
	Total        *Total // 未统计总数时为 nil,与零命中区分。
	Hits         json.RawMessage
	Aggregations json.RawMessage
	// Took int64 // 服务端耗时,单位毫秒。
	TimedOut bool
	Shards   ShardsInfo
}

SearchResult 是扁平的搜索结果,保留命中与聚合的原始 JSON,避免业务 ID 经 float64 丢失精度。 超时或分片失败时与 PartialSearchError 一起返回,调用方按业务要求处理部分结果。 Took 和 TerminatedEarly 暂不启用,恢复时同步恢复解析、结果映射和测试断言。

type ShardsInfo

type ShardsInfo struct {
	Total      int             `json:"total"`
	Successful int             `json:"successful"`
	Skipped    int             `json:"skipped"`
	Failed     int             `json:"failed"`
	Failures   json.RawMessage `json:"failures"`
}

ShardsInfo 描述搜索分片的执行状态,Failures 保留失败原因的原始 JSON。

type Total

type Total struct {
	Value    uint64 `json:"value"`
	Relation string `json:"relation"`
}

Total 描述搜索命中数量;Relation 为 eq 时数量准确,为 gte 时仅表示下限。

type VersionType

type VersionType string

VersionType 指定 index/delete 动作的外部版本比较方式。

const (
	VersionExternal    VersionType = "external"
	VersionExternalGTE VersionType = "external_gte"
)

Directories

Path Synopsis
Package v7 创建 Elasticsearch 7 官方客户端并接入 elasticsearchx 的统一日志与操作。
Package v7 创建 Elasticsearch 7 官方客户端并接入 elasticsearchx 的统一日志与操作。
Package v8 创建 Elasticsearch 8 官方客户端并接入 elasticsearchx 的统一日志与操作。
Package v8 创建 Elasticsearch 8 官方客户端并接入 elasticsearchx 的统一日志与操作。
Package v9 创建 Elasticsearch 9 官方客户端并接入 elasticsearchx 的统一日志与操作。
Package v9 创建 Elasticsearch 9 官方客户端并接入 elasticsearchx 的统一日志与操作。

Jump to

Keyboard shortcuts

? : This menu
/ : Search site
f or F : Jump to
y or Y : Canonical URL