Q:有两个人掉到陷阱里了,死的人叫死人,活人叫什么?

代理 Elasticsearch 服务:INFINI Gateway VS Nginx

ElasticsearchINFINI Labs 小助手 发表了文章 • 0 个评论 • 215 次浏览 • 1 天前 • 来自相关话题


![](https://infinilabs.cn/img/blog ... er.png)

## INFINI Gateway 简介

[INFINI Gateway](https://infinilabs.cn/products/gateway/) 是一款面向 Elasticsearch 的高性能应用网关,专为提升 Elasticsearch 集群的性能、安全性和可管理性而设计。它作为 Elasticsearch 的前置网关,能够处理所有客户端请求,并将其转发到后端的 Elasticsearch 集群,同时提供丰富的功能来优化请求处理和管理。此外还支持代理 Opensearch、[Easysearch](https://infinilabs.cn/products/easysearch/) 服务。

## Nginx 简介

Nginx 是一个高性能的 HTTP 和反向代理服务器,以其高并发处理能力、低内存消耗和稳定性著称,广泛应用于 Web 服务器、负载均衡和反向代理等场景。在 Elasticsearch 的使用场景里,也有小伙伴使用 Nginx 来代理 Elasticsearch 的服务,利用 Nginx 的负载均衡能力,将请求转发到多个 Elasticsearch 节点。

这两个软件都能代理 Elasticsearch 服务,但是他们有什么区别?我们来一起分析分析。

## 负载均衡

Elasticsearch 是分布式系统,提倡使用 round-robin 方式将请求发送到多个节点。不管是 Nginx 还是 INFINI Gateway 都默认使用 round-boin 方式转发请求,也都支持 weighted round-robin(加权轮询)方式进行请求转发,这点两者相当。

## 节点自动更新

Elasticsearch 集群可能会遇到添加、删除节点的情况,代理程序能否感知 Elasticsearch 节点的变化将变得非常关键。

在 Nginx 中,所有转发节点的 IP 地址都必须写入到配置文件中。如果 Elasticsearch 集群加入了新的节点进行请求处理,则需要 Nginx 编辑配置文件把新节点的 IP 地址加入其中,然后重启或重载 Nginx 服务,才能将请求分发到新的节点。反之如果有节点下线,也要编辑 Nginx 配置文件并重载服务。

INFINI Gateway 是面向 Elasticsearch 设计的应用网关,具有后端节点发现和更新的功能,能够感知 Elasticsearch 集群节点加入、离开的情况。开启节点发现和更新功能后,Gateway 会定期自动更新节点列表,将请求均匀转发到列表中的节点。可参考之前的[博客](https://infinilabs.cn/blog/202 ... teway/)开启节点自动更新。

⚠️ 注意:INFINI Gateway 默认后端节点发现和更新的功能为关闭状态。

## 定向转发请求

使用 Elasticsearch 集群的场景多种多样,如果想对转发的节点做进一步控制,可能需要根据不同条件进行节点筛选:

- IP 地址
- 节点角色
- 节点标签

## Nginx

Nginx 支持根据 IP 地址进行转发的,将需要转发的节点 IP 地址写入配置文件即可。

```plain
upstream es-cluster {
server 192.168.56.102:9200;
server 192.168.56.102:9201;
server 192.168.56.102:9202;
}
```

但不支持按节点角色、节点标签进行筛选,因为 Nginx 中并没有这种概念。

## INFINI Gateway

INFINI Gateway 支持按 IP 地址进行筛选:

- 不开节点发现:只转发到配置文件指定的节点(IP 地址)
- 开启节点发现:转发到所有发现的节点

```plain
flow:
- name: cache_first
filter:
- elasticsearch:
elasticsearch: prod
refresh:
enabled: true
interval: 30s
filter:
hosts:
exclude:
- 192.168.3.201:9200
include:
- 192.168.3.202:9200
- 192.168.3.203:9200
```

此外 Gateway 还支持通过节点角色、节点标签筛选转发节点。

```plain
flow:
- name: cache_first
filter:
- elasticsearch:
elasticsearch: prod
refresh:
enabled: true
interval: 30s
filter:
tags:
exclude:
- temp: cold
include:
- disk: ssd
roles:
exclude:
- master
include:
- data
- ingest
```

多种筛选条件可以同时使用,详细信息请查看官方[文档](https://docs.infinilabs.com/ga ... earch/)。

> 作者:**杨帆**,极限科技(INFINI Labs)高级解决方案架构师、《老杨玩搜索》栏目 B 站 UP 主,拥有十余年金融行业服务工作经验,熟悉 Linux、数据库、网络等领域。目前主要从事 Easysearch、Elasticsearch 等搜索引擎的技术支持工作,服务国内私有化部署的客户。
> 原文:https://infinilabs.cn/blog/202 ... ginx/

【搜索客社区日报】第2020期 (2025-04-11)

社区日报Fred2000 发表了文章 • 0 个评论 • 239 次浏览 • 1 天前 • 来自相关话题

1、Agent 时代的 HTTP 来了?谷歌 A2A 开源协议打破企业间 Agent 壁垒
https://www.infoq.cn/article/y9gcWYGXUhRYqvXqsy1f

2、Easysearch 索引备份之 Clone API
https://blog.csdn.net/yangmf20 ... 88006

3、Elasticsearch 8.X 如何利用嵌入向量提升搜索能力?
https://mp.weixin.qq.com/s/Vv2i3FOSUTAhnTiKJM2h3A

4、ES 集群日增数据统计难?手把手教你精准计算文档数&存储量!
https://cloud.tencent.com/deve ... 09449

5、INFINI Console:助力 Elasticsearch 集群平滑升级,保障业务零中断
https://infinilabs.cn/case/ind ... nsole

编辑:Fred
更多资讯:http://news.searchkit.cn

【搜索客社区日报】第2019期 (2025-04-10)

社区日报Se7en 发表了文章 • 0 个评论 • 318 次浏览 • 1 天前 • 来自相关话题

1.vllm近期更新的一些trick总结
https://mp.weixin.qq.com/s/R_X0qxSiA3X4FqhWzyQM1g
2. MCP,竟然是两位年轻工程师的杰作
https://mp.weixin.qq.com/s/4F9PokMiKTaobeKQaw7Wcg
3.为 Kubernetes 提供智能的 LLM 推理路由:Gateway API Inference Extension 深度解析
https://mp.weixin.qq.com/s/jRxY4GJgnvzk-o3nBmjP4g
4.基于 MCP 实现 AI 应用架构新范式的一线实践(含78页架构图下载)
https://mp.weixin.qq.com/s/r1wKHJDzUgWncZvNko2O2Q

编辑:Se7en
更多资讯:http://news.searchkit.cn

Operator 开发入门系列(一):Hello World!

默认分类INFINI Labs 小助手 发表了文章 • 0 个评论 • 361 次浏览 • 2 天前 • 来自相关话题



![](https://infinilabs.cn//img/blo ... bg.png)

## 背景

我们公司最近计划将产品迁移到 Kubernetes 环境。 为了更好地管理和自动化我们的应用程序,我们决定使用 Kubernetes Operator。 本系列博客将记录我们学习和开发 Operator 的过程,希望能帮助更多的人入门 Operator 开发。

## 目标读者

- 对 Kubernetes 有一定了解的开发人员和运维人员
- 希望使用 Operator 自动化管理应用程序的人员
- 对 Go 语言有基本了解的人员

## 准备工作

在开始之前,你需要准备以下环境:

- **Go 语言环境 (>= 1.23):** Operator 通常使用 Go 语言开发,你需要安装 Go 语言环境。 建议使用 Go 1.21 或更高版本。 可以从 [https://go.dev/dl/](https://go.dev/dl/) 下载安装包。 安装完成后,请配置好 `GOPATH` 和 `PATH` 环境变量。

- **Kubernetes 集群:** 你需要一个可用的 Kubernetes 集群来部署和测试 Operator。 可以使用 Minikube、Kind 或其他的 Kubernetes 发行版。

- **kubectl 命令行工具:** `kubectl` 是 Kubernetes 的命令行工具,用于与 Kubernetes 集群交互。 请确保你已经安装并配置了 `kubectl`, 并且能够连接到你的 Kubernetes 集群。

- **Kubebuilder (>= 3.0):** Kubebuilder 是一个用于快速构建 Kubernetes Operator 的框架。 使用 Kubebuilder 可以简化 Operator 的开发流程,并生成一些必要的代码框架。 可以使用以下命令安装 Kubebuilder:

```bash
cd $HOME/go/bin
curl -L -o kubebuilder "https://go.kubebuilder.io/dl/latest/$(go env GOOS)/$(go env GOARCH)"
chmod +x kubebuilder
```

> 请确保 `$HOME/go/bin` 目录在你的 `PATH` 环境变量中。 可以运行 `kubebuilder version` 命令来验证 Kubebuilder 是否安装成功。

- **Docker (可选):** 如果你需要构建 Operator 的 Docker 镜像,你需要安装 Docker。

> 我的环境是 MacOS(arm64) + Orbstack

## 什么是 Operator?

简单来说,Operator 是 Kubernetes 的扩展,它利用自定义资源(Custom Resources, CRs)来自动化管理应用程序。Operator 允许我们像管理 Kubernetes 内置资源一样管理复杂的应用程序,例如数据库、消息队列等。

## 为什么选择 Operator?

Operator 提供了一种声明式的方式来管理应用程序的生命周期,包括部署、升级、备份、恢复等。它可以简化运维流程,提高自动化程度,并确保应用程序的状态符合预期。

## 我们的第一个 Operator:Hello World

这个 Operator 将监听一个名为 `HelloWorld` 的自定义资源,并在 Kubernetes 中创建一个 Pod,该 Pod 运行一个简单的 "Hello World" 应用程序。

### 1. 初始化 Kubebuilder 项目

首先,我们需要使用 Kubebuilder 创建一个新的项目。 在你的 `GOPATH` 目录下创建一个新的目录,例如 `hello-world-operator`,然后进入该目录,运行以下命令

```bash
kubebuilder init --domain infini.cloud --repo github.com/infinilabs/hello-world-operator
```

这个命令会创建一个新的 Kubebuilder 项目,并生成一些必要的文件和目录。

### 2. 创建自定义资源(Custom Resource Definition, CRD)

接下来,我们需要定义 `HelloWorld` 资源的结构。 运行以下命令

```bash
kubebuilder create api --group example --version v1alpha1 --kind HelloWorld
```

这个命令会创建一个新的 API 定义,包括 `api/v1alpha1/helloworld_types.go` 和 `controllers/helloworld_controller.go` 两个文件。

编辑 `api/v1alpha1/helloworld_types.go` 文件,修改 `HelloWorldSpec` 的定义,添加 `name` 和 `message` 字段:

```go
// HelloWorldSpec defines the desired state of HelloWorld
type HelloWorldSpec struct {
// INSERT ADDITIONAL SPEC FIELDS - desired state of cluster
// Important: Run "make" to regenerate code after modifying this file

// Name is the name of the HelloWorld resource
Name string `json:"name,omitempty"`

// Message is the message to be printed by the pod
Message string `json:"message,omitempty"`
}
```

### 3. 实现 Reconcile 逻辑

编辑 `controllers/helloworld_controller.go` 文件,实现 `Reconcile` 函数, 创建一个 Pod,该 Pod 运行一个 `busybox` 镜像,并输出 `HelloWorld` 资源中定义的 `message`。

```go
package controllers

import (
"context"
"fmt"

corev1 "k8s.io/api/core/v1"
apierrors "k8s.io/apimachinery/pkg/api/errors"
metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
"k8s.io/apimachinery/pkg/runtime"
ctrl "sigs.k8s.io/controller-runtime"
"sigs.k8s.io/controller-runtime/pkg/client"
"sigs.k8s.io/controller-runtime/pkg/log"

examplev1alpha1 "github.com/infinilabs/hello-world-operator/api/v1alpha1"
)

// HelloWorldReconciler reconciles a HelloWorld object
type HelloWorldReconciler struct {
client.Client
Scheme *runtime.Scheme
}

//+kubebuilder:rbac:groups=example.com,resources=helloworlds,verbs=get;list;watch;create;update;patch;delete
//+kubebuilder:rbac:groups=example.com,resources=helloworlds/status,verbs=get;update;patch
//+kubebuilder:rbac:groups=example.com,resources=helloworlds/finalizers,verbs=update
//+kubebuilder:rbac:groups=core,resources=pods,verbs=get;list;watch;create;update;patch;delete

// Reconcile is part of the main kubernetes reconciliation loop which aims to
// move the current state of the cluster closer to the desired state.
// For more details, check Reconcile and its Result here:
// - https://pkg.go.dev/sigs.k8s.io ... ncile
func (r *HelloWorldReconciler) Reconcile(ctx context.Context, req ctrl.Request) (ctrl.Result, error) {
log := log.FromContext(ctx)

// 1. Fetch the HelloWorld instance
helloWorld := &examplev1alpha1.HelloWorld{}
err := r.Get(ctx, req.NamespacedName, helloWorld)
if err != nil {
if apierrors.IsNotFound(err) {
// Object not found, return. Created objects are automatically garbage collected.
// For additional cleanup logic use finalizers.
log.Info("HelloWorld resource not found. Ignoring since object must be deleted")
return ctrl.Result{}, nil
}
// Error reading the object - requeue the request.
log.Error(err, "Failed to get HelloWorld")
return ctrl.Result{}, err
}

// 2. Define the desired Pod
pod := &corev1.Pod{
ObjectMeta: metav1.ObjectMeta{
Name: helloWorld.Name + "-pod",
Namespace: helloWorld.Namespace,
Labels: map[string]string{
"app": helloWorld.Name,
},
},
Spec: corev1.PodSpec{
Containers: []corev1.Container{
{
Name: "hello-world",
Image: "busybox",
Command: []string{"sh", "-c", fmt.Sprintf("echo '%s' && sleep 3600", helloWorld.Spec.Message)},
},
},
},
}

// 3. Set HelloWorld instance as the owner and controller
if err := ctrl.SetControllerReference(helloWorld, pod, r.Scheme); err != nil {
log.Error(err, "Failed to set controller reference")
return ctrl.Result{}, err
}

// 4. Check if the Pod already exists
found := &corev1.Pod{}
err = r.Get(ctx, client.ObjectKey{Name: pod.Name, Namespace: pod.Namespace}, found)
if err != nil && apierrors.IsNotFound(err) {
log.Info("Creating a new Pod", "Pod.Namespace", pod.Namespace, "Pod.Name", pod.Name)
err = r.Create(ctx, pod)
if err != nil {
log.Error(err, "Failed to create new Pod", "Pod.Namespace", pod.Namespace, "Pod.Name", pod.Name)
return ctrl.Result{}, err
}
// Pod created successfully - return and requeue
return ctrl.Result{Requeue: true}, nil
} else if err != nil {
log.Error(err, "Failed to get Pod")
return ctrl.Result{}, err
}

// 5. Pod already exists - don't requeue
log.Info("Skip reconcile: Pod already exists", "Pod.Namespace", found.Namespace, "Pod.Name", found.Name)
return ctrl.Result{}, nil
}

// SetupWithManager sets up the controller with the Manager.
func (r *HelloWorldReconciler) SetupWithManager(mgr ctrl.Manager) error {
return ctrl.NewControllerManagedBy(mgr).
For(&examplev1alpha1.HelloWorld{}).
Owns(&corev1.Pod{}).
Complete(r)
}
```

### 4. 安装 CRD 到 Kubernetes 集群

运行以下命令安装 CRD 到 Kubernetes 集群:

```bash
make install
```

### 5. 运行 Operator

运行以下命令在本地运行 Operator:

```bash
make run
```

### 6. 创建 HelloWorld 资源

创建一个名为 `my-hello-world.yaml` 的文件,内容如下:

```yaml
apiVersion: example.com/v1alpha1
kind: HelloWorld
metadata:
name: my-hello-world
spec:
name: my-hello-world
message: "Hello World from Operator!"
```

使用 `kubectl apply -f my-hello-world.yaml` 创建资源。

### 7. 验证

使用 `kubectl get pods` 命令查看是否创建了名为 `my-hello-world-pod` 的 Pod。 使用 `kubectl logs my-hello-world-pod` 查看 Pod 的日志,确认是否输出了 "Hello World from Operator!"。

## 总结

恭喜你完成了第一个 Operator! 虽然这个 Operator 非常简单,但它展示了 Operator 的基本原理:监听自定义资源,并根据资源的状态来管理 Kubernetes 资源。 在接下来的系列中,我们将深入探讨 Operator 的更多高级特性。

敬请期待下一篇博客!

> 作者:罗厚付,极限科技(INFINI Labs)云上产品设计与研发负责人,拥有多年安全风控及大数据系统架构经验,主导过多个核心产品的设计与落地,日常负责运维超大规模 ES 集群(800+节点/1PB+数据)。
> 原文:https://infinilabs.cn/blog/202 ... rt-1/

Easysearch 自动备份:快照生命周期管理

EasysearchINFINI Labs 小助手 发表了文章 • 0 个评论 • 465 次浏览 • 3 天前 • 来自相关话题



之前介绍了 Easysearch 如何[使用 S3 进行快照备份](http://infinilabs.cn/blog/2025 ... ackup/),毕竟那是手工操作。Easysearch 还提供了[快照生命周期管理](https://docs.infinilabs.com/ea ... m_api/),能够按照策略自动创建、删除快照,极大地方便了用户的日常管理。

快照生命周期管理计划由创建计划、删除计划以及快照配置组成。

- 创建计划和删除计划包含一个 cron 表达式,指定任务的频率和时间。
- 删除计划可以指定快照保留策略,以保留过去 30 天的快照或仅保留最近的 10 个快照。
- 快照配置包括快照的索引和存储库,并支持所有通过 API 创建快照时的参数。此外,还可以指定快照名称中使用的日期的格式和时区。

快照生命周期创建的快照名称格式为 `--` 。

比如, 计划每 2 分钟对索引 .infini_metrics-00001 创建一个快照,并且只保留最近的 2 个快照。

```plain
curl -XPOST -uadmin:admin -H 'Content-Type: application/json' 'https://localhost:9200/_slm/policies/daily-policy' -d '
{
"description": "测试快照策略",
"creation": {
"schedule": {
"cron": {
"expression": "*/2 * * * *",
"timezone": "Asia/Shanghai"
}
},
"time_limit": "1h"
},
"deletion": {
"schedule": {
"cron": {
"expression": "*/1 * * * *",
"timezone": "Asia/Shanghai"
}
},
"condition": {
"max_count": 2
},
"time_limit": "1h"
},
"snapshot_config": {
"date_format": "yyyy-MM-dd-HH:mm",
"date_format_timezone": "Asia/Shanghai",
"indices": ".infini_metrics-00001",
"repository": "easysearch_s3_repo",
"ignore_unavailable": "true",
"include_global_state": "false"
}
}'
```

自动创建的快照如下图,一个 16 点 34 分创建的,另一个 16 点 36 分创建的。

![](https://infinilabs.cn/img/blog ... /1.png)

⚠️ 注意:虽然指定只保留最近两个快照,但因为创建和删除其实是两个独立的任务,所以会短暂出现存在 3 个快照的现象,等删除任务调度一次就会删除多余的快照了。

如果遇到维护需要停止自动备份,也有相应的 API 来启停快照策略。

停止策略

```plain
curl -XPOST -uadmin:admin 'https://localhost:9200/_slm/policies/daily-policy/_start'
```

启动策略

```plain
curl -XPOST -uadmin:admin 'https://localhost:9200/_slm/policies/daily-policy/_stop'
```

查看策略

```plain
curl -XGET -uadmin:admin 'https://localhost:9200/_slm/policies'
```

删除策略

```plain
curl -XDELETE -uadmin:admin 'https://localhost:9200/_slm/policies/daily-policy?pretty'
```

更多详细信息请参考[官方文档](https://docs.infinilabs.com/ea ... m_api/)。

## 关于 Easysearch

![](https://infinilabs.cn/img/blog ... er.png)

INFINI Easysearch 是一个分布式的搜索型数据库,实现非结构化数据检索、全文检索、向量检索、地理位置信息查询、组合索引查询、多语种支持、聚合分析等。Easysearch 可以完美替代 Elasticsearch,同时添加和完善多项企业级功能。Easysearch 助您拥有简洁、高效、易用的搜索体验。

官网文档:<https://docs.infinilabs.com/easysearch/main/>

> 作者:**杨帆**,极限科技(INFINI Labs)高级解决方案架构师、《老杨玩搜索》栏目 B 站 UP 主,拥有十余年金融行业服务工作经验,熟悉 Linux、数据库、网络等领域。目前主要从事 Easysearch、Elasticsearch 等搜索引擎的技术支持工作,服务国内私有化部署的客户。

Easysearch S3 备份实战

EasysearchINFINI Labs 小助手 发表了文章 • 0 个评论 • 470 次浏览 • 3 天前 • 来自相关话题



Easysearch 内置了 S3 插件,这意味着用户可以直接使用该功能而无需额外安装任何插件。通过这一内置支持,用户能够方便快捷地执行 Amazon S3 上的数据快照操作。这种设计不仅简化了配置流程,也提高了工作效率,使得数据备份或迁移等任务变得更加简单易行。对于需要频繁与 S3 存储服务交互的应用场景来说,这是一个非常实用且高效的功能特性。

## Minio

MinIO 是一款高性能的开源对象存储系统,专为存储大量的非结构化数据而设计。它提供了与 Amazon S3 兼容的 API,本次测试我们使用 MinIO 作为存储仓库。

## 建立 Bucket

进入 MinIO 管理界面,创建测试用的 bucket。

![](https://infinilabs.cn/img/blog ... /1.png)

![](https://infinilabs.cn/img/blog ... /2.png)

## 创建 Access key

测试的 Access Key 设置的比较简单。

![](https://infinilabs.cn/img/blog ... /3.png)

## Easysearch

为了能够使用 S3 存储,Easysearch 要进行必要的配置。

## easyearch.yml

修改 easysearch.yml 配置 S3 信息。

```plain
s3.client.default.endpoint: 172.17.0.4:9000
s3.client.default.protocol: http
```

⚠️ 注意:修改了 easysearch.yml 需要重启生效。

## keystore

为了安全,我们把 S3 的 Access key 信息加入 keystore 中。

```plain
bin/easysearch-keystore add s3.client.default.access_key #输入easysearch
bin/easysearch-keystore add s3.client.default.secret_key #输入easysearch
bin/easysearch-keystore list
```

## 注册存储库

在 INFINI Console 的开发工具中,使用命令注册 s3 存储库。

```plain
PUT /_snapshot/easysearch_s3_repo?verify=true&pretty
{
"type": "s3",
"settings": {
"bucket": "easysearch-bucket",
"compress": true
}
}
```

更多参数请查看[文档](https://infinilabs.cn/docs/lat ... zon-s3)。

## 创建快照

在 [INFINI Console](https://infinilabs.cn/products/console/) 的开发工具中,使用命令创建快照。

![](https://infinilabs.cn/img/blog ... /4.png)

![](https://infinilabs.cn/img/blog ... /5.png)

备份执行完成。

## S3 查看快照

我们在 INFINI Console 中通过命令创建了快照,可以在 MinIO 的 bucket 中进行进一步确认是否有相关文件。

![](https://infinilabs.cn/img/blog ... /6.png)

![](https://infinilabs.cn/img/blog ... /7.png)

## 快照还原测试

删除以备份索引 .infini_metrics-0001,删除前先查看下索引情况,文档数 557953。

![](https://infinilabs.cn/img/blog ... /8.png)

删除 .infini_metrics-0001 索引。

![](https://infinilabs.cn/img/blog ... /9.png)

确认 .infini_metrics-0001 索引已被删除。

![](https://infinilabs.cn/img/blog ... 10.png)

进行快照还原。

![](https://infinilabs.cn/img/blog ... 11.png)

验证恢复索引。

![](https://infinilabs.cn/img/blog ... 12.png)

索引 .infini_metrics-0001 已经还原了,文档数也一致。

## 小结

Easysearch 使用 S3 存储备份的步骤如下:

1. S3 服务建立 Bucket、Access Key。
2. Easysearch 编辑 easysearch.yml 添加 S3 服务 endpoint 信息。
3. easysearch-keystore 添加 S3 的 Access key 信息,加密保存。
4. Easysearch 注册 S3 存储仓库。
5. 执行快照备份。

## 关于 Easysearch

![](https://infinilabs.cn/img/blog ... er.png)

INFINI Easysearch 是一个分布式的搜索型数据库,实现非结构化数据检索、全文检索、向量检索、地理位置信息查询、组合索引查询、多语种支持、聚合分析等。Easysearch 可以完美替代 Elasticsearch,同时添加和完善多项企业级功能。Easysearch 助您拥有简洁、高效、易用的搜索体验。

官网文档:<https://docs.infinilabs.com/easysearch/main/>

> 作者:**杨帆**,极限科技(INFINI Labs)高级解决方案架构师、《老杨玩搜索》栏目 B 站 UP 主,拥有十余年金融行业服务工作经验,熟悉 Linux、数据库、网络等领域。目前主要从事 Easysearch、Elasticsearch 等搜索引擎的技术支持工作,服务国内私有化部署的客户。

【搜索客社区日报】第2018期 (2025-04-09)

社区日报kin122 发表了文章 • 0 个评论 • 485 次浏览 • 3 天前 • 来自相关话题

1.Query Rewriting查询改写方案汇总
https://zhuanlan.zhihu.com/p/26631768854

2.RAG结合上下文提升召回成功率|Claude
https://zhuanlan.zhihu.com/p/721306620

3.RAG探索之路的血泪史及曙光
https://zhuanlan.zhihu.com/p/664921095

4.加速 HNSW 图的合并
https://mp.weixin.qq.com/s/5s2xuXKaTmznTo7bijeVqA


编辑:kin122    
更多资讯:http://news.searchkit.cn

【搜索客社区日报】第2017期 (2024-04-08)

社区日报God_lockin 发表了文章 • 0 个评论 • 720 次浏览 • 4 天前 • 来自相关话题

1. 不看微信?拿Kibana把你从slack和telegram里炸出来(需要梯子)
https://faun.pub/how-to-config ... 29bb4
2. 一个月撸150亿的日志,你来你也行(需要梯子)
https://medium.com/%40lunguh/h ... 33ab4
3. 无痛更新ES证书可行不?(需要梯子)
https://medium.com/%40ashishof ... b2a7c
编辑:斯蒂文
更多资讯:http://news.searchkit.cn
 

【搜索客社区日报】第2015期 (2025-04-03)

社区日报Se7en 发表了文章 • 0 个评论 • 1471 次浏览 • 2025-04-03 18:01 • 来自相关话题

1.Nacos 发布 MCP Registry,实现存量应用接口“0改动”升级到 MCP 协议
https://mp.weixin.qq.com/s/bgDd82lj0jBUWifLMNByjw
2.自动化新时代:OWL、CRAB 与 MCP 如何打通“最后一公里”
https://mp.weixin.qq.com/s/jvQRFRlADYJUtDyYQ29qQQ
3.Nvidia 收购 Run:ai 后开源的 KAI-Scheduler vs HAMi:GPU 共享的技术路线分析与协同展望
https://mp.weixin.qq.com/s/6qEdQjjh3YeSnCxGymHnHQ
4.学习如何设计大型系统
https://github.com/donnemartin ... rimer

编辑:Se7en
更多资讯:http://news.searchkit.cn

【搜索客社区日报】第2014期 (2025-04-02)

社区日报kin122 发表了文章 • 0 个评论 • 1645 次浏览 • 2025-04-02 13:40 • 来自相关话题

1.架构性能跃迁!iLogTail超大规模日志采集最佳实践
https://mp.weixin.qq.com/s/YRxn8Ur9Ykl6Q0ZKyuWbxQ

2.深度剖析Elasticsearch倒排索引数据结构
https://mp.weixin.qq.com/s/hDVxDCLD9UQbBk7sqcoPFQ

3.为什么 Apache Doris 是比 Elasticsearch 更好的实时分析替代方案?
https://mp.weixin.qq.com/s/JgjE-hk_MpRyXFHPhhYnyA

4.RAG与微调的实用比较
https://mp.weixin.qq.com/s/VHq_3mCNP3G9rakKPcbJtg

编辑:kin122 
更多资讯:http://news.searchkit.cn

【搜索客社区日报】第2013期 (2024-04-01)

社区日报God_lockin 发表了文章 • 0 个评论 • 1764 次浏览 • 2025-04-01 18:17 • 来自相关话题

INFINI Labs 产品更新 | Coco AI 0.3 发布 – 新增支持 Widget 外部站点集成

资讯动态INFINI Labs 小助手 发表了文章 • 0 个评论 • 1776 次浏览 • 2025-04-01 17:34 • 来自相关话题



![release](https://infinilabs.cn/img/blog/release/banner.png)

INFINI Labs 产品更新发布!此次更新涵盖 Coco AI 、Easysearch 等产品多项重要升级,重点提升 AI 搜索能力、易用性及企业级优化。

- Coco AI v0.3 作为 开源、跨平台的 AI 搜索工具,新增快捷键设置,支持多个聊天会话等功能。
- Coco AI Server 新增连接器 UI 管理支持,允许用户通过请求头传递 websocket 会话 ID。
- INFINI Easysearch v1.12.0 集成 AI 向量搜索,优化 Rollup 能力。
- INFINI Console、Gateway、Agent、Loadgen、Framework 关键问题修复,优化 Security 处理与整体用户体验。

## Coco AI v0.3

Coco AI 是一个完全开源、跨平台的统一 AI 搜索与效率工具,能够连接并搜索多种数据源,包括应用程序、文件、谷歌网盘、Notion、语雀、Hugo 等本地与云端数据。通过接入 DeepSeek 等大模型,Coco AI 实现了智能化的个人知识库管理,注重隐私,支持私有部署,帮助用户快速、智能地访问信息。

Coco AI v0.3.0 [视频演示](https://www.bilibili.com/video/BV17HZ4YoEpu/)。

Coco AI 本次详细更新记录如下:

### Coco AI 客户端 v0.3.0

#### 功能更新

- 新增快捷键设置
![](https://infinilabs.cn/img/blog ... /1.png)
- 支持多个聊天会话

#### 问题修复

- 应用程序搜索移除图标不正常的候选列表

#### 优化改进

- 重构代码,复用前端组件提供 Web Widget 外部引入

### Coco AI 服务端 v0.3.0

#### 功能更新

- 新增连接器 UI 管理支持
![](https://infinilabs.cn/img/blog ... /2.png)
![](https://infinilabs.cn/img/blog ... /3.png)
- 根据数据源的启用状态控制相关文档的可搜索性
![](https://infinilabs.cn/img/blog ... /4.png)
- 允许用户通过请求头传递 websocket 会话 ID
- 新增集成组件管理
![](https://infinilabs.cn/img/blog ... /5.png)
![](https://infinilabs.cn/img/blog ... /6.png)
![](https://infinilabs.cn/img/blog ... /7.png)
![](https://infinilabs.cn/img/blog ... /8.png)
![](https://infinilabs.cn/img/blog ... /9.png)
- 新增搜索框小组件,便于嵌入网站
- 新增集成 CRUD 管理和 CORS 配置支持
- 新增删除附件 API
- 新增动态 JS 封装器用于小组件
- 支持在服务端解析文档图标
- 为小组件集成添加推荐主题功能
- 新增敏感字段过滤支持

#### 问题修复

- 修复提供商信息版本问题
- 修复数据源关键词搜索过滤未按预期工作的问题
- 修复必须条件中未选中数据源条件未被移除的问题

## INFINI Easysearch v1.12.0

INFINI Easysearch 是一个分布式的搜索型数据库,实现非结构化数据检索、全文检索、向量检索、地理位置信息查询、组合索引查询、多语种支持、聚合分析等。Easysearch 可以完美替代 Elasticsearch,同时添加和完善多项企业级功能。Easysearch 助您拥有简洁、高效、易用的搜索体验。

Easysearch 本次更新如下:

### 功能更新

- `AI` 模块持续增强中,已集成 `Ollama embedding API`,支持文本向量化
- `Rollup` 新增 `write_optimization` 配置项,启用后采用自动生成文档 ID 的策略,大幅提升写入速度
- `Rollup` 现在支持针对 `job` 级别配置 `rollover` 的 `max docs`

### 问题修复

- `Rollup` 修复带有内嵌的 pipeline 聚合时不能和原始索引聚合正常合并的问题

### 优化改进

- 优化了 `rollup` 索引字段名长度,减小 `rollup job` 运行时的内存占用

## INFINI Console v1.29.2

INFINI Console 是一款开源的非常轻量级的多集群、跨版本的搜索基础设施统一管控平台。通过对流行的搜索引擎基础设施进行跨版本、多集群的集中纳管, 企业可以快速方便的统一管理企业内部的不同版本的多套搜索集群。

Console 在线体验:

<http://demo.infini.cloud> (用户名/密码:readonly/readonly)。

Console 本次更新如下:

### 问题修复

- 修复开发工具查询长整型数据精度丢失问题
- 回滚 `strict_date_optional_time` 去除修改,影响数据探索时间格式化

### 优化改进

- 优化配置中心配置自动同步时,可根据客户端实例标签进行筛选
- 优化屏幕分辨率适配,增强用户体验

## INFINI Gateway v1.29.2

INFINI Gateway 是一个开源的面向搜索场景的高性能数据网关,所有请求都经过网关处理后再转发到后端的搜索业务集群。基于 INFINI Gateway 可以实现索引级别的限速限流、常见查询的缓存加速、查询请求的审计、查询结果的动态修改等等。

Gateway 本次更新如下:

### 优化改进

- 同步更新 [Framework v1.1.5](https://docs.infinilabs.com/fr ... notes/) 优化了一些已知问题

## INFINI Agent v1.29.2

INFINI Agent 负责采集和上传 Elasticsearch, Easysearch, Opensearch 集群的日志和指标信息,通过 INFINI Console 管理,支持主流操作系统和平台,安装包轻量且无任何外部依赖,可以快速方便地安装。

Agent 本次更新如下:

### 优化改进

- 同步更新 [Framework v1.1.5](https://docs.infinilabs.com/fr ... notes/) 优化了一些已知问题

## INFINI Loadgen v1.29.2

INFINI Loadgen 是一款开源的专为 Easysearch、Elasticsearch、OpenSearch 设计的轻量级性能测试工具。

Loadgen 本次更新如下:

### 优化改进

- 同步更新 [Framework v1.1.5](https://docs.infinilabs.com/fr ... notes/) 优化了一些已知问题

## INFINI Framework v1.1.5

INFINI Framework 是 INFINI Labs 基于 Golang 的产品的核心基础,已开源。该框架以开发者为中心设计,简化了构建高性能、可扩展且可靠的应用程序的过程。

Framework 本次更新如下:

### 重大变更

- 为了 Web 模块,将认证配置 (auth config) 重构为安全配置 (security config)。

### 功能更新

- 通用可插拔的安全特性。
- 向 UI 处理程序添加 CORS 设置。

### 问题修复

- 修复默认设置为绿色 (green) 时集群初始化状态丢失的问题。

### 优化改进

- 重构 Elasticsearch 的错误基类。
- 避免 Redis 启动期间发生 panic。
- 跳过 JSON 序列化时任务上下文中的 Cancel 操作。
- 日志记录中不包含换行符。
- 更新日志信息。
- 向 API 添加更多选项。
- 应首先执行低优先级的过滤器。
- 将权限选项 (permission options) 重构为数组。
- 添加在 InterfaceToInt 中转换浮点数的支持。
- 添加用于访问 API 特性选项的实用工具。
- 移除不必要的锁。
- 更新 API 标签以支持接口。

**更多详情请查看以下详细的 Release Notes 或联系我们的技术支持团队!**

- [**INFINI Easysearch**](https://docs.infinilabs.com/ea ... earch/)
- [**INFINI Console**](https://docs.infinilabs.com/co ... notes/)
- [**INFINI Gateway**](https://docs.infinilabs.com/ga ... notes/)
- [**INFINI Agent**](https://docs.infinilabs.com/ag ... notes/)
- [**INFINI Loadgen**](https://docs.infinilabs.com/lo ... notes/)
- [**INFINI Framework**](https://docs.infinilabs.com/fr ... notes/)
- [**Coco AI App**](https://github.com/infinilabs/ ... dex.md)
- [**Coco AI Server**](https://github.com/infinilabs/ ... dex.md)

## 期待反馈

欢迎下载体验使用,如果您在使用过程中遇到如何疑问或者问题,欢迎前往 INFINI Labs Github(<https://github.com/infinilabs>) 中的对应项目中提交 Feature Request 或提交 Bug。

**下载地址:** <https://infinilabs.cn/download>

**邮件**:**hello@infini.ltd**

**电话**:**(+86) 400-139-9200**

**Discord**:<https://discord.gg/4tKTMkkvVX>

也欢迎大家微信扫码添加小助手(INFINI-Labs),加入用户群一起讨论交流。

![](https://infinilabs.cn/img/blog ... ew.jpg)

## 关于极限科技(INFINI Labs)

![INFINI Labs](https://infinilabs.cn/img/blog ... bs.png)

极限科技,全称极限数据(北京)科技有限公司,是一家专注于实时搜索与数据分析的软件公司。旗下品牌极限实验室(INFINI Labs)致力于打造极致易用的数据探索与分析体验。

极限科技是一支年轻的团队,采用天然分布式的方式来进行远程协作,员工分布在全球各地,希望通过努力成为中国乃至全球企业大数据实时搜索分析产品的首选,为中国技术品牌输出添砖加瓦。

官网:<https://infinilabs.cn>

【搜索客社区日报】第2012期 (2025-03-31)

社区日报Muses 发表了文章 • 0 个评论 • 1970 次浏览 • 2025-03-31 14:38 • 来自相关话题

1、Easysearch VS Opensearch 数据写入与存储性能对比
https://infinilabs.cn/blog/202 ... ison/

2、如何使用 Grafana 连接 Easyearch
https://infinilabs.cn/blog/202 ... arch/

3、不建 Hugo、不用 Hexo,纯 Markdown 文件也能接入 Coco-AI!
https://mp.weixin.qq.com/s/Xvn1CcQqlVOREY0fSI2A4w

4、Manus的技术实现原理浅析与简单复刻
https://mp.weixin.qq.com/s/SSO-w6FF4mBm2zrXY5RzkA

5、深入解读大模型开发工具Dify--底层数据存储
https://blog.csdn.net/weixin_4 ... 37251

编辑:Muse
更多资讯:http://news.searchkit.cn

【搜索客社区日报】第2011期 (2025-03-27)

社区日报Se7en 发表了文章 • 0 个评论 • 2592 次浏览 • 2025-03-27 19:15 • 来自相关话题

1.万字长文,聊聊下一代AI Agent的新范式
https://mp.weixin.qq.com/s/6tp0Dq5vpY8j-mWuwwK87A
2.https://mp.weixin.qq.com/s/ymkLEvBJuKZW5a_bZZbC0A
https://mp.weixin.qq.com/s/ymkLEvBJuKZW5a_bZZbC0A
3.更智能的Kubernetes AI推理路由:Gateway API推理扩展
https://mp.weixin.qq.com/s/rNgcxF2WHqTO86v8YD4-eg
4.全球首款音乐推理模型Mureka O1首秀!爆改周杰伦,AI音乐进入DeepSeek时刻
https://mp.weixin.qq.com/s/5anNt3afJO1KXkE8zcY1TA

编辑:Se7en
更多资讯:http://news.searchkit.cn

活动回顾 - 第8期 搜索客 Meetup 直播活动圆满结束,《Elasticsearch 使用中的双刃剑特性》附 PPT 下载与视频回放

资料分享searchkit 发表了文章 • 0 个评论 • 2761 次浏览 • 2025-03-27 17:52 • 来自相关话题

2025 年 03 月 26 日,由 搜索客社区和极限科技(INFINI Labs) 联合举办的第 8 期线上 Meetup 技术交流直播活动圆满结束。本期 Meetup 直播活动吸引了超过 800+ 技术爱好者观看参与,活动主要共同探讨了 Elasticsearch 的一些“双刃剑”特性以及在实际工作中更好地权衡和应对。

PPT封面.png



本期 Meetup 活动回顾


本期 Meetup 活动的分享嘉宾是 金端老师 ,他是极限科技(INFINI Labs)搜索运维专家,Elastic 官方认证工程师,搜索客社区日报编辑,他在 ES 运维使用方面具有丰富的实战经验,同时在 ES/lucene 技术原理也有比较多的深入研究。他为大家带来了主题为 《Elasticsearch 使用中的双刃剑特性》 精彩分享。

1.png



金端老师主要从 Elasticsearch 的分布式架构及其优化策略、近实时搜索与 NRT 机制、倒排索引的使用场景、聚合分析的性能优化,以及多集群管理与监控工具的使用体验等多个方向进行了特性分析以及优缺点分析,并结合了自身多年的 ES 运维实战经验为大家提出优化建议。

以下为部分 PPT 截图:

2.png



3.png



4.png




在活动的互动环节中,观众们积极提问,金端老师耐心解答了关于 Elasticsearch 的技术细节等问题。下面摘取部分问答:

问 1、8GB 堆内存,单个索引最大 30GB,设置单分片行不?
答: 8GB 内存的节点单个分片最大可设置为 30GB,分片数量建议根据 CPU 资源来定。

问 2、ES 堆内外存大小对单索引分片大小有建议的设置吗?比如说 4GB 堆内存,单索引最大 50GB,建议单索引设置几个分片?
答:对于 4GB JVM 堆内存,单个索引的分片大小建议在 20GB ~ 50GB 之间。索引设置多少分片也需要看能给多少 CPU 资源,堆外缓存大小越高越好,它的数据文件能在对外的缓存里面一直保持在里面,它就能通过内存去查,保障性能。另外监控 GC 情况,如果堆内存压力大,需优化查询方式,或增加节点提升堆内存配置等。

问 3、Elasticsearch 的聚合查询功能非常强大,但聚合查询可能会消耗大量资源,如何优化聚合查询以提高性能?
答:可结合场景优化聚合查询,尽量限制查询范围,例如只查询最近 7 天的数据。另外只查询必要字段,聚合时尽量减少 _source 的返回,使用 size: 0 仅返回聚合结果。还有多层嵌套聚合可能导致查询耗时过长,建议拆分查询或优化业务逻辑。对于确实很消耗资源的聚合查询可使用异步查询去维护等。

问 4、公司有多套 ES 集群,版本不一样,用 Kibana 查看监控运维比较麻烦,还有什么开源工具推荐?
答:推荐使用 [INFNI Console](https://github.com/infinilabs/console) 开源工具统一管理不同版本的 ES 集群,可以便捷地进行监控和维护,并且支持告警和安全审计等功能。

问 5、ES 分片数量和单分片大小应该如何平衡呢?比如我的索引总数据量非常大,我应该为了避免单个分片过大而设置上千个分片呢?
答:在设置 Elasticsearch 分片数量和单分片大小时,需要结合业务实际需求进行权衡,而不是盲目追求某个标准。例如,虽然通常建议单个分片大小控制在 20-50GB 之间,但在实际生产环境中,某些情况下 60-70GB 的分片大小仍能保持良好性能。关键在于避免长尾效应导致查询性能下降,并根据业务特性进行数据拆分,而不是单纯依赖固定的大小标准。如果分片数量过多,可能会增加管理开销;如果单分片过大,则可能影响查询性能。因此,应结合数据量、查询模式和硬件资源,动态调整分片策略以实现最佳性能。

同时,在整个直播过程中,主持人进行了多轮激动人心的抽奖活动,为参会小伙伴带来了额外的惊喜。

最后感谢大家的参与和支持,让我们共同期待下一次 搜索客 Meetup 活动带来更多的精彩内容!

本期 Meetup 的 PPT 下载


本期 PPT 下载的链接:<https://searchkit.cn/slides/332>;

本期 Meetup 视频回放


扫码关注极限实验室视频号查看直播回放,或者扫码关注极限实验室 B 站 账号,可查看本期 Meetup 活动视频。我们也会在视频号、B 站持续更新最新技术视频,欢迎通过点赞、投币,收藏,三连来支持我们。

![](https://searchkit.cn/uploads/a ... 6e.jpg)

扫码不便?B站直达链接:<https://www.bilibili.com/video/BV1TMZMYXEA7>;

Meetup 活动讲师招募


![讲师招募](https://infinilabs.cn/img/blog ... ng.png)

搜索客社区 Meetup 的成功举办,离不开社区小伙伴的热情参与。目前社区讲师招募计划也在持续进行中,我们诚挚邀请各位技术大咖、行业精英踊跃提交演讲议题,与大家分享您的经验。

讲师报名链接:[http://cfp.searchkit.cn](http://cfp.searchkit.cn)
或扫描下方二维码,立刻报名成为讲师!

![](https://searchkit.cn/uploads/a ... fe.png)

Meetup 活动聚焦 AI 与搜索领域的最新动态,以及数据实时搜索分析、向量检索、技术实践与案例分析、日志分析、安全等领域的深度探讨。

我们热切期待您的精彩分享!

关于 搜索客(SearchKit)社区


搜索客社区由 Elasticsearch 中文社区进行全新的品牌升级,以新的 Slogan:“搜索人自己的社区” 为宣言。汇集搜索领域最新动态、精选干货文章、精华讨论、文档资料、翻译与版本发布等,为广大搜索领域从业者提供更为丰富便捷的学习和交流平台。社区官网:[https://searchkit.cn](https://searchkit.cn) 。

关于极限科技(INFINI Labs)


![INFINI Labs](https://infinilabs.cn/img/blog ... bs.png)

极限科技,全称极限数据(北京)科技有限公司,是一家专注于实时搜索与数据分析的软件公司。旗下品牌极限实验室(INFINI Labs)致力于打造极致易用的数据探索与分析体验。

极限科技是一支年轻的团队,采用天然分布式的方式来进行远程协作,员工分布在全球各地,希望通过努力成为中国乃至全球企业大数据实时搜索分析产品的首选,为中国技术品牌输出添砖加瓦。

官网:[https://infinilabs.cn](https://infinilabs.cn)