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 ¶
- Variables
- func CloseAll() error
- func DecodeSources[T any](hits json.RawMessage) ([]T, error)
- func NewTransport(cfg Config) (*http.Transport, error)
- type AnalyzeResult
- type BulkAction
- func NewBulkCreate(id string, document any) BulkAction
- func NewBulkDelete(id string) BulkAction
- func NewBulkIndex(id string, document any) BulkAction
- func NewBulkUpdate(id string, patch any) BulkAction
- func NewBulkUpsert(id string, document any) BulkAction
- func NewBulkUpsertWithInitial(id string, patch, initialDocument any) BulkAction
- type BulkError
- type BulkFailure
- type BulkResult
- type Client
- func (c *Client) Analyze(ctx context.Context, index, analyzer, text string) (AnalyzeResult, error)
- func (c *Client) Bulk(ctx context.Context, index string, actions []BulkAction) (BulkResult, error)
- func (c *Client) Close() error
- func (c *Client) Count(ctx context.Context, index string, dsl any) (int64, error)
- func (c *Client) CreateIndex(ctx context.Context, index string, definition any) (CreateIndexResult, error)
- func (c *Client) DeleteIndex(ctx context.Context, index string) error
- func (c *Client) Get(ctx context.Context, index, id string) (json.RawMessage, error)
- func (c *Client) Index(ctx context.Context, index, id string, document any) error
- func (c *Client) ReloadSearchAnalyzers(ctx context.Context, index string) (ReloadSearchAnalyzersResult, error)
- func (c *Client) Search(ctx context.Context, index string, dsl any) (SearchResult, error)
- type Config
- type CreateIndexResult
- type ErrorCause
- type HTTPError
- type Option
- type PartialSearchError
- type Performer
- type ReloadDetail
- type ReloadSearchAnalyzersResult
- type SearchResult
- type ShardsInfo
- type Total
- type VersionType
Constants ¶
This section is empty.
Variables ¶
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 返回的错误。
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 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 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 RegisterDefault ¶
RegisterDefault 供版本适配包调用:构造默认客户端并同时按 name 登记。 业务使用 v7/v8/v9.NewDefault;构造与生命周期约束与 RegisterNamed 相同。
func RegisterNamed ¶
RegisterNamed 供版本适配包调用:检查名称后构造并登记客户端。 业务使用 v7/v8/v9.NewNamed;build 须返回新建且独占的实例,失败时自行清理资源。 启动阶段串行初始化,全部创建返回后才开始业务;初始化完成后不得再调用。
func (*Client) Bulk ¶
func (c *Client) Bulk(ctx context.Context, index string, actions []BulkAction) (BulkResult, error)
Bulk 执行一批动作;部分成功时同时返回结果和 BulkError。
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 ¶
DeleteIndex 删除单个具体索引并要求确认;索引不存在仍返回 HTTPError。
func (*Client) ReloadSearchAnalyzers ¶
func (c *Client) ReloadSearchAnalyzers(ctx context.Context, index string) (ReloadSearchAnalyzersResult, error)
ReloadSearchAnalyzers 重载单个具体索引的搜索分析器,成功后清理该索引的 request cache。 调用方须预先更新所有数据节点的同义词文件,过滤器须设置 updateable: true 且仅用于搜索分析器。 index 须为实际索引名;不解析别名或数据流。两个请求共用 ctx,不重试或回滚。 完整响应中存在成功节点时,即使分片或关闭失败也尽力清理缓存,并保留两阶段错误;ctx 取消后停止。 nil 错误只表示两次请求成功,是否重载了预期分析器应检查 ReloadDetails。
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 状态。
type Option ¶
type Option func(*Client)
Option 在客户端创建时配置日志行为。
func OptLogDetails ¶
OptLogDetails 控制是否采集请求体和响应详情,默认关闭;需同时开启请求日志开关, 且 ctx 选中的 Logger 至少启用 Info、Warn、Error 之一才采集,最终仍按实际级别过滤。 所有操作在解析和收尾完成后输出日志,响应体只包含实际读取的内容。
func OptLogRequests ¶
OptLogRequests 控制是否输出请求结果日志,默认关闭;设为 true 开启,关闭时仍记录请求级耗时。
type PartialSearchError ¶
PartialSearchError 表示搜索响应已完整解析,但超时或分片失败使结果可能不完整。 Search 同时返回已有结果;可通过 errors.As 识别,组合错误中的其他失败仍须处理。
func (*PartialSearchError) Error ¶
func (e *PartialSearchError) Error() string
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 VersionType ¶
type VersionType string
VersionType 指定 index/delete 动作的外部版本比较方式。
const ( VersionExternal VersionType = "external" VersionExternalGTE VersionType = "external_gte" )
Source Files
¶
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 的统一日志与操作。 |