沙师弟,师父的充电器掉了

Easy-Es 2.1.0-easysearch 版本发布

01 | 版本更新概述

经过极限科技与 Dromara 开源社区下 Easy-Es 项目的紧密合作与共同努力,我们很荣幸地联合推出 Easy-Es 2.1.0-easysearch 版本!

作为双方携手打造的第一个合作成果,本版本已正式发布:

本次更新的核心内容是将 Easy-Es 框架底层增加兼容极限科技自主研发的 Easysearch 搜索引擎,这标志着国产搜索引擎与国内优秀开源项目深度融合的重要里程碑,是极限科技与 Dromara 社区携手共建国产技术生态的创新实践。

02 | 迁移至 Easysearch 的背景与优势

随着国内对自主可控技术需求的日益增长,特别是在基础设施软件领域,企业对于信创合规的要求不断提升。极限科技自主研发的 Easysearch 搜索引擎具备以下显著优势:

  • 国产化自主可控:完全自主研发,符合信创要求,无许可证风险,为企业提供安全可靠的技术保障
  • 轻量级架构:相比传统搜索引擎,资源占用更少,启动更快速,显著降低企业运维成本
  • 卓越性能表现:查询性能优异,能够满足大部分业务场景需求,用户体验流畅
  • 良好兼容性:与 Elasticsearch 的 API 接口基本兼容,迁移成本较低,保护用户现有投资

基于以上优势,双方决定共同将 Easy-Es 框架底层迁移至 Easysearch,这不仅为用户提供更多选择,更是双方携手推动国产搜索引擎生态建设的重要举措。

03 | Easy-Es 框架优势

Easy-Es 框架在搜索开发领域具备以下核心优势:

  1. 极简代码开发:相比原生 API 可减少 50%-80% 的代码量,大幅提升开发效率。
// 使用 Easy-Es 仅需一行代码完成查询
List<Document> documents = documentMapper.selectList(
    EsWrappers.lambdaQuery(Document.class).eq(Document::getTitle, "测试")
);
  1. 自动索引管理: 框架提供全自动智能索引托管功能,开发者无需关心索引的创建、更新及数据迁移等复杂操作,索引全生命周期由框架自动管理,过程零停机。

  2. SQL 语法兼容: 支持使用 MySQL 语法完成搜索查询操作,无需学习复杂的 DSL 语句。支持 and、or、like、in 等常用 SQL 语法。

  3. Lambda 表达式支持: 采用 Lambda 风格编程,提供类型安全的字段访问,避免手动输入字段名可能产生的错误,提升代码可读性和开发效率。

  4. 无缝 Spring Boot 集成: 与 Spring Boot 生态深度集成,提供开箱即用的自动配置,无需复杂的手动配置,支持 Spring Boot Actuator 监控,完美融入企业级应用架构。

  5. 丰富的查询功能: 支持复杂的嵌套查询、聚合查询、范围查询、高亮显示等高级搜索功能,同时保持 API 的简洁易用,满足各种业务场景需求。

  6. 分布式架构支持: 完美适配 Easysearch 的分布式特性,支持集群模式部署,具备高可用性和横向扩展能力,满足企业级大规模数据处理需求。

  7. 成熟稳定的国产 ORM 框架: 作为 Dromara 开源社区下的顶级开源项目,Easy-Es 已在国内众多企业和项目中得到广泛应用和验证,拥有活跃的中文社区和完善的文档支持,为企业级应用提供了可靠的技术保障。

04 | 快速上手示例

1. 添加依赖

根据您使用的构建工具,选择对应的配置方式:

Maven 项目

pom.xml 配置

<properties>
    <maven.compiler.source>11</maven.compiler.source>
    <maven.compiler.target>11</maven.compiler.target>
    <spring-boot.version>2.7.0</spring-boot.version>
    <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
</properties>

<dependencyManagement>
    <dependencies>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-dependencies</artifactId>
            <version>${spring-boot.version}</version>
            <type>pom</type>
            <scope>import</scope>
        </dependency>
    </dependencies>
</dependencyManagement>

<dependencies>
    <dependency>
        <groupId>org.dromara.easy-es</groupId>
        <artifactId>easy-es-boot-starter</artifactId>
        <version>2.1.0-easysearch</version>
    </dependency>
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-web</artifactId>
    </dependency>
</dependencies>

<build>
    <plugins>
        <plugin>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-maven-plugin</artifactId>
            <version>${spring-boot.version}</version>
            <executions>
                <execution>
                    <goals>
                        <goal>repackage</goal>
                    </goals>
                </execution>
            </executions>
        </plugin>
    </plugins>
</build>

Maven 启动命令

# 运行应用
mvn spring-boot:run

# 编译打包
mvn clean package

Gradle 项目

build.gradle 配置

plugins {
    id 'java'
    id 'org.springframework.boot' version '2.7.0'
    id 'io.spring.dependency-management' version '1.0.11.RELEASE'
}

group = 'org.easysearch'
version = '1.0-SNAPSHOT'
sourceCompatibility = '11'

repositories {
    mavenLocal()
    mavenCentral()
}

dependencies {
    implementation 'org.dromara.easy-es:easy-es-boot-starter:2.1.0-easysearch'
    implementation 'org.springframework.boot:spring-boot-starter-web'
}

Gradle 启动命令

# 运行应用
./gradlew bootRun

# 编译打包
./gradlew clean build

2. 配置文件设置

application.yml(根据实际 Easysearch 部署情况修改):

easy-es:
  enable: true
  # Easysearch 服务地址
  address: localhost:9200
  # 协议:http 或 https
  schema: https
  # Easysearch 用户名
  username: admin
  # Easysearch 密码
  password: your_password_here
  # 连接保持时间(毫秒)
  keep-alive-millis: 18000

  global-config:
    # 开启彩蛋模式(启动时显示 ASCII 艺术图案)
    i-kun-mode: true
    # 索引处理模式:smoothly 表示平滑模式(零停机更新索引)
    process-index-mode: smoothly
    # 异步处理索引时是否阻塞
    async-process-index-blocking: true
    # 是否打印 DSL 语句(开发调试时可设为 true)
    print-dsl: false
    db-config:
      # 下划线转驼峰
      map-underscore-to-camel-case: true
      # 索引前缀
      index-prefix: dev_
      # 主键类型:customize 表示自定义
      id-type: customize
      # 字段更新策略:not_empty 表示非空时才更新
      field-strategy: not_empty
      # 刷新策略:immediate 表示立即刷新
      refresh-policy: immediate
      # 开启追踪总命中数
      enable-track-total-hits: true

3. 实体类定义

package org.dromara.easyes.sample.entity;

import lombok.Data;
import lombok.experimental.Accessors;
import org.dromara.easyes.annotation.HighLight;
import org.dromara.easyes.annotation.IndexField;
import org.dromara.easyes.annotation.IndexId;
import org.dromara.easyes.annotation.IndexName;
import org.dromara.easyes.annotation.Settings;
import org.dromara.easyes.annotation.rely.Analyzer;
import org.dromara.easyes.annotation.rely.FieldStrategy;
import org.dromara.easyes.annotation.rely.FieldType;
import org.dromara.easyes.annotation.rely.IdType;

import java.time.LocalDateTime;

/**
 * es 数据模型
 */
@Data
@Accessors(chain = true)
@Settings(shardsNum = 3, replicasNum = 2)
@IndexName(value = "easyes_document", keepGlobalPrefix = true)
public class Document {
    /**
     * es 中的唯一 id
     */
    @IndexId(type = IdType.CUSTOMIZE)
    private String id;

    /**
     * 文档标题,默认为 keyword 类型,可进行精确查询
     */
    private String title;

    /**
     * 文档内容,指定为 TEXT 类型,使用 IK 分词器
     * 支持高亮显示,高亮结果映射到 highlightContent 字段
     */
    @HighLight(mappingField = "highlightContent")
    @IndexField(fieldType = FieldType.TEXT, analyzer = Analyzer.IK_SMART)
    private String content;

    /**
     * 创建者,字段策略为非空时才更新
     */
    @IndexField(strategy = FieldStrategy.NOT_EMPTY)
    private String creator;

    /**
     * 创建时间
     */
    @IndexField(fieldType = FieldType.DATE, dateFormat = "yyyy-MM-dd HH:mm:ss")
    private LocalDateTime gmtCreate;

    /**
     * 高亮返回值被映射的字段
     */
    private String highlightContent;

    /**
     * 文档点赞数
     */
    private Integer starNum;

    /**
     * 地理位置经纬度坐标,例如: "40.13933715136454,116.63441990026217"
     */
    @IndexField(fieldType = FieldType.GEO_POINT)
    private String location;
}

4. Mapper 接口

package org.dromara.easyes.sample.mapper;

import org.dromara.easyes.core.kernel.BaseEsMapper;
import org.dromara.easyes.sample.entity.Document;

/**
 * Mapper 接口,继承 BaseEsMapper 即可获得所有 CRUD 方法
 */
public interface DocumentMapper extends BaseEsMapper<Document> {
}

5. 启动类配置

package org.dromara.easyes.sample;

import org.dromara.easyes.spring.annotation.EsMapperScan;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;

/**
 * 启动类
 */
@SpringBootApplication
@EsMapperScan("org.dromara.easyes.sample.mapper")
public class EasyEsApplication {
    public static void main(String[] args) {
        SpringApplication.run(EasyEsApplication.class, args);
    }
}

6. 业务使用示例

package org.dromara.easyes.sample.controller;

import org.dromara.easyes.core.conditions.select.LambdaEsQueryWrapper;
import org.dromara.easyes.sample.entity.Document;
import org.dromara.easyes.sample.mapper.DocumentMapper;
import org.easysearch.action.search.SearchResponse;
import org.easysearch.search.aggregations.Aggregations;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.RestController;

import javax.annotation.Resource;
import java.time.LocalDateTime;
import java.util.List;

@RestController
public class SampleController {

    @Resource
    private DocumentMapper documentMapper;

    /**
     * 初始化插入数据
     */
    @GetMapping("/insert")
    public Integer insert() {
        int count = 0;
        // 插入 5 条测试数据
        for (int i = 1; i <= 5; i++) {
            Document document = new Document();
            document.setId(String.valueOf(i));
            document.setTitle("测试" + i);
            document.setContent("测试内容" + i);
            document.setCreator("创建者" + i);
            document.setGmtCreate(LocalDateTime.now());
            document.setStarNum(i * 10);
            count += documentMapper.insert(document);
        }
        return count;
    }

    /**
     * 根据标题精确查询
     */
    @GetMapping("/listDocumentByTitle")
    public List<Document> listDocumentByTitle(@RequestParam String title) {
        LambdaEsQueryWrapper<Document> wrapper = new LambdaEsQueryWrapper<>();
        wrapper.eq(Document::getTitle, title);
        return documentMapper.selectList(wrapper);
    }

    /**
     * 高亮搜索
     */
    @GetMapping("/highlightSearch")
    public List<Document> highlightSearch(@RequestParam String content) {
        LambdaEsQueryWrapper<Document> wrapper = new LambdaEsQueryWrapper<>();
        wrapper.match(Document::getContent, content);
        return documentMapper.selectList(wrapper);
    }

    /**
     * 查询所有数据
     */
    @GetMapping("/selectAll")
    public List<Document> selectAll() {
        LambdaEsQueryWrapper<Document> wrapper = new LambdaEsQueryWrapper<>();
        return documentMapper.selectList(wrapper);
    }

    /**
     * 聚合查询 - 按创建时间和点赞数分组统计
     */
    @GetMapping("/aggByDateAndStar")
    public Aggregations aggByDateAndStar() {
        LambdaEsQueryWrapper<Document> wrapper = new LambdaEsQueryWrapper<>();
        wrapper.groupBy(Document::getGmtCreate)
                .max(Document::getStarNum)
                .min(Document::getStarNum);
        SearchResponse response = documentMapper.search(wrapper);
        return response.getAggregations();
    }

    /**
     * 使用 SQL 语句查询文档
     */
    @GetMapping("/queryBySQL")
    public String queryBySQL(@RequestParam(required = false) String title) {
        String sql;
        if (title != null && !title.isEmpty()) {
            sql = String.format("SELECT * FROM dev_easyes_document WHERE title = '%s'", title);
        } else {
            sql = "SELECT * FROM dev_easyes_document LIMIT 10";
        }
        return documentMapper.executeSQL(sql);
    }
}

7. 快速测试

启动应用后,可以通过以下接口测试:

# 1. 插入测试数据
curl http://localhost:8080/insert

# 2. 查询所有数据
curl http://localhost:8080/selectAll

# 3. 根据标题精确查询
curl "http://localhost:8080/listDocumentByTitle?title=测试1"

# 4. 高亮搜索
curl "http://localhost:8080/highlightSearch?content=测试"

# 5. SQL 查询
curl "http://localhost:8080/queryBySQL?title=测试1"

# 6. 聚合查询
curl http://localhost:8080/aggByDateAndStar

05 | 相关链接

06 | 特别致谢

在此,极限科技要特别感谢 Easy-Es 项目的核心开发者“老汉”和各位贡献者和维护者们。正是因为有了你们的辛勤付出、专业精神以及对开源事业的热忱奉献,Easy-Es 项目才能在国内外获得如此广泛的认可和应用。

也感谢你们对国产技术生态建设的信任与支持。此次 Easy-Es 与 Easysearch 的深度整合,正是双方通力合作、互利共赢的最佳体现。

我们相信,在 Easy-Es 项目团队的持续推动下,国产开源软件必将迎来更加辉煌的明天。极限科技将继续致力于提供优质的国产技术解决方案,与 Easy-Es 项目团队携手共进,为中国开源生态的发展贡献更多力量!


关于 Easy-Es

Easy-Es(简称 EE)是一款基于 Elasticsearch(简称 ES)官方提供的 ElasticsearchClient 打造的 ORM 开发框架,在 ElasticsearchClient 的基础上,只做增强不做改变,为简化开发、提高效率而生,您如果有用过 Mybatis-Plus(简称 MP),那么您基本可以零学习成本直接上手 EE,EE 是 MP 的 ES 平替版,在有些方面甚至比 MP 更简单,同时也融入了更多 ES 独有的功能,助力您快速实现各种场景的开发。

官网https://www.easy-es.cn

Easy-Es for Easysearch 是一款简化 Easysearch 国产化搜索引擎操作的开源框架,全自动智能索引托管。同时也是国内首家专门针对 Easysearch 客户端简化的工具。它简化 CRUD 及其它高阶操作,可以更好的帮助开发者减轻开发负担。底层采用 Easysearch Java Client,保证其原生性能及拓展性。

项目地址https://gitee.com/dromara/easy-es/tree/easy-es4easySearch

关于极限科技

极限科技(全称:极限数据(北京)科技有限公司)是一家专注于实时搜索与数据分析的软件公司。

旗下品牌:极限实验室(INFINI Labs)致力于打造极致易用的数据探索与分析体验,为用户提供安全、稳定、高性能的国产搜索解决方案。

官网https://infinilabs.cn

作者:张磊,极限科技(INFINI Labs)搜索引擎研发负责人,对 Elasticsearch 和 Lucene 源码比较熟悉,目前主要负责公司的 Easysearch 产品的研发以及客户服务工作。

继续阅读 »

01 | 版本更新概述

经过极限科技与 Dromara 开源社区下 Easy-Es 项目的紧密合作与共同努力,我们很荣幸地联合推出 Easy-Es 2.1.0-easysearch 版本!

作为双方携手打造的第一个合作成果,本版本已正式发布:

本次更新的核心内容是将 Easy-Es 框架底层增加兼容极限科技自主研发的 Easysearch 搜索引擎,这标志着国产搜索引擎与国内优秀开源项目深度融合的重要里程碑,是极限科技与 Dromara 社区携手共建国产技术生态的创新实践。

02 | 迁移至 Easysearch 的背景与优势

随着国内对自主可控技术需求的日益增长,特别是在基础设施软件领域,企业对于信创合规的要求不断提升。极限科技自主研发的 Easysearch 搜索引擎具备以下显著优势:

  • 国产化自主可控:完全自主研发,符合信创要求,无许可证风险,为企业提供安全可靠的技术保障
  • 轻量级架构:相比传统搜索引擎,资源占用更少,启动更快速,显著降低企业运维成本
  • 卓越性能表现:查询性能优异,能够满足大部分业务场景需求,用户体验流畅
  • 良好兼容性:与 Elasticsearch 的 API 接口基本兼容,迁移成本较低,保护用户现有投资

基于以上优势,双方决定共同将 Easy-Es 框架底层迁移至 Easysearch,这不仅为用户提供更多选择,更是双方携手推动国产搜索引擎生态建设的重要举措。

03 | Easy-Es 框架优势

Easy-Es 框架在搜索开发领域具备以下核心优势:

  1. 极简代码开发:相比原生 API 可减少 50%-80% 的代码量,大幅提升开发效率。
// 使用 Easy-Es 仅需一行代码完成查询
List<Document> documents = documentMapper.selectList(
    EsWrappers.lambdaQuery(Document.class).eq(Document::getTitle, "测试")
);
  1. 自动索引管理: 框架提供全自动智能索引托管功能,开发者无需关心索引的创建、更新及数据迁移等复杂操作,索引全生命周期由框架自动管理,过程零停机。

  2. SQL 语法兼容: 支持使用 MySQL 语法完成搜索查询操作,无需学习复杂的 DSL 语句。支持 and、or、like、in 等常用 SQL 语法。

  3. Lambda 表达式支持: 采用 Lambda 风格编程,提供类型安全的字段访问,避免手动输入字段名可能产生的错误,提升代码可读性和开发效率。

  4. 无缝 Spring Boot 集成: 与 Spring Boot 生态深度集成,提供开箱即用的自动配置,无需复杂的手动配置,支持 Spring Boot Actuator 监控,完美融入企业级应用架构。

  5. 丰富的查询功能: 支持复杂的嵌套查询、聚合查询、范围查询、高亮显示等高级搜索功能,同时保持 API 的简洁易用,满足各种业务场景需求。

  6. 分布式架构支持: 完美适配 Easysearch 的分布式特性,支持集群模式部署,具备高可用性和横向扩展能力,满足企业级大规模数据处理需求。

  7. 成熟稳定的国产 ORM 框架: 作为 Dromara 开源社区下的顶级开源项目,Easy-Es 已在国内众多企业和项目中得到广泛应用和验证,拥有活跃的中文社区和完善的文档支持,为企业级应用提供了可靠的技术保障。

04 | 快速上手示例

1. 添加依赖

根据您使用的构建工具,选择对应的配置方式:

Maven 项目

pom.xml 配置

<properties>
    <maven.compiler.source>11</maven.compiler.source>
    <maven.compiler.target>11</maven.compiler.target>
    <spring-boot.version>2.7.0</spring-boot.version>
    <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
</properties>

<dependencyManagement>
    <dependencies>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-dependencies</artifactId>
            <version>${spring-boot.version}</version>
            <type>pom</type>
            <scope>import</scope>
        </dependency>
    </dependencies>
</dependencyManagement>

<dependencies>
    <dependency>
        <groupId>org.dromara.easy-es</groupId>
        <artifactId>easy-es-boot-starter</artifactId>
        <version>2.1.0-easysearch</version>
    </dependency>
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-web</artifactId>
    </dependency>
</dependencies>

<build>
    <plugins>
        <plugin>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-maven-plugin</artifactId>
            <version>${spring-boot.version}</version>
            <executions>
                <execution>
                    <goals>
                        <goal>repackage</goal>
                    </goals>
                </execution>
            </executions>
        </plugin>
    </plugins>
</build>

Maven 启动命令

# 运行应用
mvn spring-boot:run

# 编译打包
mvn clean package

Gradle 项目

build.gradle 配置

plugins {
    id 'java'
    id 'org.springframework.boot' version '2.7.0'
    id 'io.spring.dependency-management' version '1.0.11.RELEASE'
}

group = 'org.easysearch'
version = '1.0-SNAPSHOT'
sourceCompatibility = '11'

repositories {
    mavenLocal()
    mavenCentral()
}

dependencies {
    implementation 'org.dromara.easy-es:easy-es-boot-starter:2.1.0-easysearch'
    implementation 'org.springframework.boot:spring-boot-starter-web'
}

Gradle 启动命令

# 运行应用
./gradlew bootRun

# 编译打包
./gradlew clean build

2. 配置文件设置

application.yml(根据实际 Easysearch 部署情况修改):

easy-es:
  enable: true
  # Easysearch 服务地址
  address: localhost:9200
  # 协议:http 或 https
  schema: https
  # Easysearch 用户名
  username: admin
  # Easysearch 密码
  password: your_password_here
  # 连接保持时间(毫秒)
  keep-alive-millis: 18000

  global-config:
    # 开启彩蛋模式(启动时显示 ASCII 艺术图案)
    i-kun-mode: true
    # 索引处理模式:smoothly 表示平滑模式(零停机更新索引)
    process-index-mode: smoothly
    # 异步处理索引时是否阻塞
    async-process-index-blocking: true
    # 是否打印 DSL 语句(开发调试时可设为 true)
    print-dsl: false
    db-config:
      # 下划线转驼峰
      map-underscore-to-camel-case: true
      # 索引前缀
      index-prefix: dev_
      # 主键类型:customize 表示自定义
      id-type: customize
      # 字段更新策略:not_empty 表示非空时才更新
      field-strategy: not_empty
      # 刷新策略:immediate 表示立即刷新
      refresh-policy: immediate
      # 开启追踪总命中数
      enable-track-total-hits: true

3. 实体类定义

package org.dromara.easyes.sample.entity;

import lombok.Data;
import lombok.experimental.Accessors;
import org.dromara.easyes.annotation.HighLight;
import org.dromara.easyes.annotation.IndexField;
import org.dromara.easyes.annotation.IndexId;
import org.dromara.easyes.annotation.IndexName;
import org.dromara.easyes.annotation.Settings;
import org.dromara.easyes.annotation.rely.Analyzer;
import org.dromara.easyes.annotation.rely.FieldStrategy;
import org.dromara.easyes.annotation.rely.FieldType;
import org.dromara.easyes.annotation.rely.IdType;

import java.time.LocalDateTime;

/**
 * es 数据模型
 */
@Data
@Accessors(chain = true)
@Settings(shardsNum = 3, replicasNum = 2)
@IndexName(value = "easyes_document", keepGlobalPrefix = true)
public class Document {
    /**
     * es 中的唯一 id
     */
    @IndexId(type = IdType.CUSTOMIZE)
    private String id;

    /**
     * 文档标题,默认为 keyword 类型,可进行精确查询
     */
    private String title;

    /**
     * 文档内容,指定为 TEXT 类型,使用 IK 分词器
     * 支持高亮显示,高亮结果映射到 highlightContent 字段
     */
    @HighLight(mappingField = "highlightContent")
    @IndexField(fieldType = FieldType.TEXT, analyzer = Analyzer.IK_SMART)
    private String content;

    /**
     * 创建者,字段策略为非空时才更新
     */
    @IndexField(strategy = FieldStrategy.NOT_EMPTY)
    private String creator;

    /**
     * 创建时间
     */
    @IndexField(fieldType = FieldType.DATE, dateFormat = "yyyy-MM-dd HH:mm:ss")
    private LocalDateTime gmtCreate;

    /**
     * 高亮返回值被映射的字段
     */
    private String highlightContent;

    /**
     * 文档点赞数
     */
    private Integer starNum;

    /**
     * 地理位置经纬度坐标,例如: "40.13933715136454,116.63441990026217"
     */
    @IndexField(fieldType = FieldType.GEO_POINT)
    private String location;
}

4. Mapper 接口

package org.dromara.easyes.sample.mapper;

import org.dromara.easyes.core.kernel.BaseEsMapper;
import org.dromara.easyes.sample.entity.Document;

/**
 * Mapper 接口,继承 BaseEsMapper 即可获得所有 CRUD 方法
 */
public interface DocumentMapper extends BaseEsMapper<Document> {
}

5. 启动类配置

package org.dromara.easyes.sample;

import org.dromara.easyes.spring.annotation.EsMapperScan;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;

/**
 * 启动类
 */
@SpringBootApplication
@EsMapperScan("org.dromara.easyes.sample.mapper")
public class EasyEsApplication {
    public static void main(String[] args) {
        SpringApplication.run(EasyEsApplication.class, args);
    }
}

6. 业务使用示例

package org.dromara.easyes.sample.controller;

import org.dromara.easyes.core.conditions.select.LambdaEsQueryWrapper;
import org.dromara.easyes.sample.entity.Document;
import org.dromara.easyes.sample.mapper.DocumentMapper;
import org.easysearch.action.search.SearchResponse;
import org.easysearch.search.aggregations.Aggregations;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.RestController;

import javax.annotation.Resource;
import java.time.LocalDateTime;
import java.util.List;

@RestController
public class SampleController {

    @Resource
    private DocumentMapper documentMapper;

    /**
     * 初始化插入数据
     */
    @GetMapping("/insert")
    public Integer insert() {
        int count = 0;
        // 插入 5 条测试数据
        for (int i = 1; i <= 5; i++) {
            Document document = new Document();
            document.setId(String.valueOf(i));
            document.setTitle("测试" + i);
            document.setContent("测试内容" + i);
            document.setCreator("创建者" + i);
            document.setGmtCreate(LocalDateTime.now());
            document.setStarNum(i * 10);
            count += documentMapper.insert(document);
        }
        return count;
    }

    /**
     * 根据标题精确查询
     */
    @GetMapping("/listDocumentByTitle")
    public List<Document> listDocumentByTitle(@RequestParam String title) {
        LambdaEsQueryWrapper<Document> wrapper = new LambdaEsQueryWrapper<>();
        wrapper.eq(Document::getTitle, title);
        return documentMapper.selectList(wrapper);
    }

    /**
     * 高亮搜索
     */
    @GetMapping("/highlightSearch")
    public List<Document> highlightSearch(@RequestParam String content) {
        LambdaEsQueryWrapper<Document> wrapper = new LambdaEsQueryWrapper<>();
        wrapper.match(Document::getContent, content);
        return documentMapper.selectList(wrapper);
    }

    /**
     * 查询所有数据
     */
    @GetMapping("/selectAll")
    public List<Document> selectAll() {
        LambdaEsQueryWrapper<Document> wrapper = new LambdaEsQueryWrapper<>();
        return documentMapper.selectList(wrapper);
    }

    /**
     * 聚合查询 - 按创建时间和点赞数分组统计
     */
    @GetMapping("/aggByDateAndStar")
    public Aggregations aggByDateAndStar() {
        LambdaEsQueryWrapper<Document> wrapper = new LambdaEsQueryWrapper<>();
        wrapper.groupBy(Document::getGmtCreate)
                .max(Document::getStarNum)
                .min(Document::getStarNum);
        SearchResponse response = documentMapper.search(wrapper);
        return response.getAggregations();
    }

    /**
     * 使用 SQL 语句查询文档
     */
    @GetMapping("/queryBySQL")
    public String queryBySQL(@RequestParam(required = false) String title) {
        String sql;
        if (title != null && !title.isEmpty()) {
            sql = String.format("SELECT * FROM dev_easyes_document WHERE title = '%s'", title);
        } else {
            sql = "SELECT * FROM dev_easyes_document LIMIT 10";
        }
        return documentMapper.executeSQL(sql);
    }
}

7. 快速测试

启动应用后,可以通过以下接口测试:

# 1. 插入测试数据
curl http://localhost:8080/insert

# 2. 查询所有数据
curl http://localhost:8080/selectAll

# 3. 根据标题精确查询
curl "http://localhost:8080/listDocumentByTitle?title=测试1"

# 4. 高亮搜索
curl "http://localhost:8080/highlightSearch?content=测试"

# 5. SQL 查询
curl "http://localhost:8080/queryBySQL?title=测试1"

# 6. 聚合查询
curl http://localhost:8080/aggByDateAndStar

05 | 相关链接

06 | 特别致谢

在此,极限科技要特别感谢 Easy-Es 项目的核心开发者“老汉”和各位贡献者和维护者们。正是因为有了你们的辛勤付出、专业精神以及对开源事业的热忱奉献,Easy-Es 项目才能在国内外获得如此广泛的认可和应用。

也感谢你们对国产技术生态建设的信任与支持。此次 Easy-Es 与 Easysearch 的深度整合,正是双方通力合作、互利共赢的最佳体现。

我们相信,在 Easy-Es 项目团队的持续推动下,国产开源软件必将迎来更加辉煌的明天。极限科技将继续致力于提供优质的国产技术解决方案,与 Easy-Es 项目团队携手共进,为中国开源生态的发展贡献更多力量!


关于 Easy-Es

Easy-Es(简称 EE)是一款基于 Elasticsearch(简称 ES)官方提供的 ElasticsearchClient 打造的 ORM 开发框架,在 ElasticsearchClient 的基础上,只做增强不做改变,为简化开发、提高效率而生,您如果有用过 Mybatis-Plus(简称 MP),那么您基本可以零学习成本直接上手 EE,EE 是 MP 的 ES 平替版,在有些方面甚至比 MP 更简单,同时也融入了更多 ES 独有的功能,助力您快速实现各种场景的开发。

官网https://www.easy-es.cn

Easy-Es for Easysearch 是一款简化 Easysearch 国产化搜索引擎操作的开源框架,全自动智能索引托管。同时也是国内首家专门针对 Easysearch 客户端简化的工具。它简化 CRUD 及其它高阶操作,可以更好的帮助开发者减轻开发负担。底层采用 Easysearch Java Client,保证其原生性能及拓展性。

项目地址https://gitee.com/dromara/easy-es/tree/easy-es4easySearch

关于极限科技

极限科技(全称:极限数据(北京)科技有限公司)是一家专注于实时搜索与数据分析的软件公司。

旗下品牌:极限实验室(INFINI Labs)致力于打造极致易用的数据探索与分析体验,为用户提供安全、稳定、高性能的国产搜索解决方案。

官网https://infinilabs.cn

作者:张磊,极限科技(INFINI Labs)搜索引擎研发负责人,对 Elasticsearch 和 Lucene 源码比较熟悉,目前主要负责公司的 Easysearch 产品的研发以及客户服务工作。

收起阅读 »

【搜索客社区日报】第2162期 (2025-12-15)

1、AutoOps 实际应用:调查 ECK 上的 Elasticsearch 集群性能
https://elasticstack.blog.csdn ... 66556

2、使用 Elastic Observability 排查你的 Agents 和 Amazon Bedrock AgentCore
https://elasticstack.blog.csdn ... 81416

3、如何通过个性化、分群感知排序来提升电商搜索相关性
https://elasticstack.blog.csdn ... 98807

4、Streams 处理:告别 Grok 的困扰 - 在 Streams 中解析你的日志
https://elasticstack.blog.csdn ... 38851

5、Elasticsearch:使用判断列表评估搜索查询相关性
https://elasticstack.blog.csdn ... 36745

编辑:Muse
更多资讯:http://news.searchkit.cn
继续阅读 »
1、AutoOps 实际应用:调查 ECK 上的 Elasticsearch 集群性能
https://elasticstack.blog.csdn ... 66556

2、使用 Elastic Observability 排查你的 Agents 和 Amazon Bedrock AgentCore
https://elasticstack.blog.csdn ... 81416

3、如何通过个性化、分群感知排序来提升电商搜索相关性
https://elasticstack.blog.csdn ... 98807

4、Streams 处理:告别 Grok 的困扰 - 在 Streams 中解析你的日志
https://elasticstack.blog.csdn ... 38851

5、Elasticsearch:使用判断列表评估搜索查询相关性
https://elasticstack.blog.csdn ... 36745

编辑:Muse
更多资讯:http://news.searchkit.cn 收起阅读 »

APM(一): Skywalking 与 Easyearch 集成

概述

SkyWalking 是一个开源的可观测性平台,用于收集、分析、聚合和可视化服务和云原生基础设施的数据。SkyWalking 提供了一种简单的方法,即使在云之间也能保持对分布式系统的清晰视图。它是一个现代的 APM,专门为云原生、基于容器的分布式系统设计。

SkyWalking 涵盖了云原生世界中所有的可观测性需求,包括:

  • Tracing: SkyWalking 原生数据格式,以及 v1 和 v2 格式的 Zipkin 跟踪都得到支持。
  • Metrics: SkyWalking 支持成熟的指标格式,包括原生计量格式、OTEL 指标格式和 Telegraf 格式。SkyWalking 与服务网格平台(通常为 Istio 和 Envoy)集成,将可观测性构建到数据平面或控制平面。此外,SkyWalking 原生代理可以在指标模式下运行,从而显著提升性能。
  • Logging: 包括从磁盘收集或通过网络收集的日志。原生代理可以自动将追踪上下文与日志绑定,或使用 SkyWalking 通过文本内容绑定追踪和日志。
  • Profiling: Profiling 是一种强大的工具,帮助开发者从代码行角度理解应用程序的性能。SkyWalking 提供了内置于原生语言代理和独立的 eBPF 代理的剖析功能。
  • Event: 事件是一种特殊类型的数据,用于记录系统中的重要时刻,例如版本升级、配置变更等。将事件与指标关联有助于解释指标中的峰值或谷值,将事件与追踪和日志关联有助于排查根本原因。

更详细的信息请大家移步 Skywalking 官方网站。

测试环境

本篇使用的 Skywalking 版本是 10.2.0 ,需要 Java 11/17/21。

Easyearch 使用的版本是 1.14.1,需要开启 Elastic 兼容模式,具体操作参考文档

生成 Java 密钥库文件

使用如下命令将 Easysearch 的 CA 证书(ca.crt)导入到一个新的 Java 密钥库文件(es_keystore.jks)中,以便 SkyWalking 能够信任由该 CA 颁发的所有证书。生产环境中使用请替换命令中的密码。

keytool -import -v -trustcacerts -file ca.crt -keystore es_keystore.jks -keypass changeit -storepass changeit

修改配置文件

SkyWalking 后端服务配置文件为 config/application.yml,这也是与 Easyearch 集成时需要修改的文件。Skywalking 与 Easyearch 集成有两种通信方式:http 或 https。http 方式非常简单,留给大家自行探索。本篇采用 https 方式,这也是 Easysearch 初始化后默认对外服务的协议。

拷贝上面生成的密钥库文件到 Skywalking 的 home 目录下,修改 application.yml 的 storage 部分

storage:
  selector: ${SW_STORAGE:elasticsearch}
  banyandb:
    # Since 10.2.0, the banyandb configuration is separated to an independent configuration file: `bydb.yaml`.
  elasticsearch:
    namespace: ${SW_NAMESPACE:""}
    clusterNodes: ${SW_STORAGE_ES_CLUSTER_NODES:es1.infini.cloud:9200}
    protocol: ${SW_STORAGE_ES_HTTP_PROTOCOL:"https"}
    connectTimeout: ${SW_STORAGE_ES_CONNECT_TIMEOUT:3000}
    socketTimeout: ${SW_STORAGE_ES_SOCKET_TIMEOUT:30000}
    responseTimeout: ${SW_STORAGE_ES_RESPONSE_TIMEOUT:15000}
    numHttpClientThread: ${SW_STORAGE_ES_NUM_HTTP_CLIENT_THREAD:0}
    user: ${SW_ES_USER:"admin"}
    password: ${SW_ES_PASSWORD:"infiniyyds@2025"}
    trustStorePath: ${SW_STORAGE_ES_SSL_JKS_PATH:"../es_keystore.jks"}
    trustStorePass: ${SW_STORAGE_ES_SSL_JKS_PASS:"changeit"}

注意 clusterNodes 配置的是域名,需要在 Skywalking 的主机上用 /etc/hosts 解析成具体的地址,如果有多个 Easysearch 节点,可以用逗号分隔。

启动

确保 Easysearch 启动完毕后,再启动 Skywalking。正常启动完成后,可访问 Skywalking 服务页面,默认端口 8080。

正常连接后,Skywalking 会在 Easysearch 中创建很多 sw 开头的索引。

OK,服务集成就到此完毕,后续我们将探索更多的 APM 内容。

关于 Easysearch

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

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

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

继续阅读 »

概述

SkyWalking 是一个开源的可观测性平台,用于收集、分析、聚合和可视化服务和云原生基础设施的数据。SkyWalking 提供了一种简单的方法,即使在云之间也能保持对分布式系统的清晰视图。它是一个现代的 APM,专门为云原生、基于容器的分布式系统设计。

SkyWalking 涵盖了云原生世界中所有的可观测性需求,包括:

  • Tracing: SkyWalking 原生数据格式,以及 v1 和 v2 格式的 Zipkin 跟踪都得到支持。
  • Metrics: SkyWalking 支持成熟的指标格式,包括原生计量格式、OTEL 指标格式和 Telegraf 格式。SkyWalking 与服务网格平台(通常为 Istio 和 Envoy)集成,将可观测性构建到数据平面或控制平面。此外,SkyWalking 原生代理可以在指标模式下运行,从而显著提升性能。
  • Logging: 包括从磁盘收集或通过网络收集的日志。原生代理可以自动将追踪上下文与日志绑定,或使用 SkyWalking 通过文本内容绑定追踪和日志。
  • Profiling: Profiling 是一种强大的工具,帮助开发者从代码行角度理解应用程序的性能。SkyWalking 提供了内置于原生语言代理和独立的 eBPF 代理的剖析功能。
  • Event: 事件是一种特殊类型的数据,用于记录系统中的重要时刻,例如版本升级、配置变更等。将事件与指标关联有助于解释指标中的峰值或谷值,将事件与追踪和日志关联有助于排查根本原因。

更详细的信息请大家移步 Skywalking 官方网站。

测试环境

本篇使用的 Skywalking 版本是 10.2.0 ,需要 Java 11/17/21。

Easyearch 使用的版本是 1.14.1,需要开启 Elastic 兼容模式,具体操作参考文档

生成 Java 密钥库文件

使用如下命令将 Easysearch 的 CA 证书(ca.crt)导入到一个新的 Java 密钥库文件(es_keystore.jks)中,以便 SkyWalking 能够信任由该 CA 颁发的所有证书。生产环境中使用请替换命令中的密码。

keytool -import -v -trustcacerts -file ca.crt -keystore es_keystore.jks -keypass changeit -storepass changeit

修改配置文件

SkyWalking 后端服务配置文件为 config/application.yml,这也是与 Easyearch 集成时需要修改的文件。Skywalking 与 Easyearch 集成有两种通信方式:http 或 https。http 方式非常简单,留给大家自行探索。本篇采用 https 方式,这也是 Easysearch 初始化后默认对外服务的协议。

拷贝上面生成的密钥库文件到 Skywalking 的 home 目录下,修改 application.yml 的 storage 部分

storage:
  selector: ${SW_STORAGE:elasticsearch}
  banyandb:
    # Since 10.2.0, the banyandb configuration is separated to an independent configuration file: `bydb.yaml`.
  elasticsearch:
    namespace: ${SW_NAMESPACE:""}
    clusterNodes: ${SW_STORAGE_ES_CLUSTER_NODES:es1.infini.cloud:9200}
    protocol: ${SW_STORAGE_ES_HTTP_PROTOCOL:"https"}
    connectTimeout: ${SW_STORAGE_ES_CONNECT_TIMEOUT:3000}
    socketTimeout: ${SW_STORAGE_ES_SOCKET_TIMEOUT:30000}
    responseTimeout: ${SW_STORAGE_ES_RESPONSE_TIMEOUT:15000}
    numHttpClientThread: ${SW_STORAGE_ES_NUM_HTTP_CLIENT_THREAD:0}
    user: ${SW_ES_USER:"admin"}
    password: ${SW_ES_PASSWORD:"infiniyyds@2025"}
    trustStorePath: ${SW_STORAGE_ES_SSL_JKS_PATH:"../es_keystore.jks"}
    trustStorePass: ${SW_STORAGE_ES_SSL_JKS_PASS:"changeit"}

注意 clusterNodes 配置的是域名,需要在 Skywalking 的主机上用 /etc/hosts 解析成具体的地址,如果有多个 Easysearch 节点,可以用逗号分隔。

启动

确保 Easysearch 启动完毕后,再启动 Skywalking。正常启动完成后,可访问 Skywalking 服务页面,默认端口 8080。

正常连接后,Skywalking 会在 Easysearch 中创建很多 sw 开头的索引。

OK,服务集成就到此完毕,后续我们将探索更多的 APM 内容。

关于 Easysearch

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

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

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

收起阅读 »

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

1. 分析了300万个泄露了的数据库之后,你需要知道这些(需要梯子)
https://netlas.medium.com/i-an ... 3b09f

2. 拿DS、ollama和ES手搓一个本地RAG吧(需要梯子)
https://somesh-rokz.medium.com ... fa1be

3. 规避掉ES的query错误,我们做对了什么(需要梯子)
https://medium.com/%40stephane ... 550b8

编辑:斯蒂文
更多资讯:http://news.searchkit.cn
继续阅读 »
1. 分析了300万个泄露了的数据库之后,你需要知道这些(需要梯子)
https://netlas.medium.com/i-an ... 3b09f

2. 拿DS、ollama和ES手搓一个本地RAG吧(需要梯子)
https://somesh-rokz.medium.com ... fa1be

3. 规避掉ES的query错误,我们做对了什么(需要梯子)
https://medium.com/%40stephane ... 550b8

编辑:斯蒂文
更多资讯:http://news.searchkit.cn 收起阅读 »

【搜索客社区日报】第2160期 (2025-12-08)

1、使用 LangGraph.js 和 Elasticsearch 构建一个金融 AI 搜索工作流
https://elasticstack.blog.csdn ... 29259

2、先分块再向量化已经过时!先embedding再chunking才是王道
https://mp.weixin.qq.com/s/-CKRG3GmvoDvpN4Mu3KNjQ

3、EDB EPAS通过postgresql连接器同步数据到Elasticsearch
https://mp.weixin.qq.com/s/828gKsVR3nHFsJAv-45m9g

4、从硅谷杀出来一个彻底开源的AI记忆系统,是真的优雅!
https://mp.weixin.qq.com/s/gwKIX2sWxl1hSg_UFmkljg

5、AI出码率70%+的背后:高德团队如何实现AI研发效率的量化与优化
https://mp.weixin.qq.com/s/VXfNZM-jns-VrgLvtQj1Tg

编辑:Muse
更多资讯:http://news.searchkit.cn
继续阅读 »
1、使用 LangGraph.js 和 Elasticsearch 构建一个金融 AI 搜索工作流
https://elasticstack.blog.csdn ... 29259

2、先分块再向量化已经过时!先embedding再chunking才是王道
https://mp.weixin.qq.com/s/-CKRG3GmvoDvpN4Mu3KNjQ

3、EDB EPAS通过postgresql连接器同步数据到Elasticsearch
https://mp.weixin.qq.com/s/828gKsVR3nHFsJAv-45m9g

4、从硅谷杀出来一个彻底开源的AI记忆系统,是真的优雅!
https://mp.weixin.qq.com/s/gwKIX2sWxl1hSg_UFmkljg

5、AI出码率70%+的背后:高德团队如何实现AI研发效率的量化与优化
https://mp.weixin.qq.com/s/VXfNZM-jns-VrgLvtQj1Tg

编辑:Muse
更多资讯:http://news.searchkit.cn 收起阅读 »

【搜索客社区日报】第2159期 (2025-12-05)

1、Easysearch 2.0.0 性能测试
https://infinilabs.cn/blog/202 ... ents/

2、60 亿+ 条 Elasticsearch 数据泄漏事件引起的反思
https://mp.weixin.qq.com/s/qWrF7UiY7PulGBz4v9zcDg

3、Easysearch 跨集群复制(CCR)实战全攻略之 1——本地两集群间复制
https://mp.weixin.qq.com/s/wxB0fH7GHZGspKB9Rp7gtg

4、Easysearch 跨集群复制 CCR 完全实战指南之2 —— 自动跟随神器介绍
https://mp.weixin.qq.com/s/BzwUFL33Rs9qM1a50BfEhQ

编辑:Fred
更多资讯:http://news.searchkit.cn
继续阅读 »
1、Easysearch 2.0.0 性能测试
https://infinilabs.cn/blog/202 ... ents/

2、60 亿+ 条 Elasticsearch 数据泄漏事件引起的反思
https://mp.weixin.qq.com/s/qWrF7UiY7PulGBz4v9zcDg

3、Easysearch 跨集群复制(CCR)实战全攻略之 1——本地两集群间复制
https://mp.weixin.qq.com/s/wxB0fH7GHZGspKB9Rp7gtg

4、Easysearch 跨集群复制 CCR 完全实战指南之2 —— 自动跟随神器介绍
https://mp.weixin.qq.com/s/BzwUFL33Rs9qM1a50BfEhQ

编辑:Fred
更多资讯:http://news.searchkit.cn 收起阅读 »

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

1.Jina AI创业复盘:AI团队的Scaling Law是什么
https://mp.weixin.qq.com/s/tXA ... e%3D1
2.告别 N-gram 调参:解密vLLM里的SuffixDecoding功能
https://mp.weixin.qq.com/s/92cY1er-sbRD38OtRbfwVg
3.Agent RFT 深度解析:如何让 AI 智能体自我进化
https://mp.weixin.qq.com/s/9ylgBXS28l-HO3soY8ytMA

编辑:Se7en
更多资讯:http://news.searchkit.cn
继续阅读 »
1.Jina AI创业复盘:AI团队的Scaling Law是什么
https://mp.weixin.qq.com/s/tXA ... e%3D1
2.告别 N-gram 调参:解密vLLM里的SuffixDecoding功能
https://mp.weixin.qq.com/s/92cY1er-sbRD38OtRbfwVg
3.Agent RFT 深度解析:如何让 AI 智能体自我进化
https://mp.weixin.qq.com/s/9ylgBXS28l-HO3soY8ytMA

编辑:Se7en
更多资讯:http://news.searchkit.cn 收起阅读 »

Easysearch 2.0.0 性能测试

概述

Easysearch 2.0.0 正式版带来了显著的性能提升和优化改进。通过与上一个稳定版本 1.15.6 的全面对比测试,我们使用 esrally 基准测试工具在 append-no-conflicts 场景下进行了深入的性能评估。测试结果表明,2.0.0 版本在索引性能、查询延迟、内存管理等核心指标上都实现了突破性改进。

核心性能提升

1. 索引性能更加稳定

写入效率提升 12.81%

Easysearch 2.0.0 索引性能表现更加稳定:

  • 累计索引 CPU 时间(所有主分片):从 225.1 分钟缩短至 196.3 分钟,减少 28.8 分钟(-12.81%
  • 索引吞吐量
    • 平均吞吐量从 180,868 docs/s 提升至 190,712 docs/s(+5.44%
    • 最大吞吐量从 198,184 docs/s 提升至 220,460 docs/s(+11.24%
    • 最小吞吐量从 164,263 docs/s 提升至 178,961 docs/s(+8.95%

累计索引 CPU 时间的减少,表明 2.0.0 版本在索引操作上更加高效,CPU 利用率更优。这意味着在相同硬件条件下,Easysearch 2.0.0 能够更快地完成数据摄入任务,对于需要处理大规模数据写入的场景具有重要意义。

Indexing Throughput (docs/s) - Higher is Better

v1.15.6
180,868
v2.0.0
190,712

2. Refresh 和 Flush 耗时缩短

Refresh 和 Flush 性能大幅改善

在 Elasticsearch/Easysearch 中,Refresh 和 Flush 操作对写入性能有直接影响。2.0.0 版本在这两个关键操作上实现了重大优化:

Refresh 性能提升 54.46%

  • 累计刷新时间:从 9.14 分钟降至 4.16 分钟
  • 中位刷新时间:减少 61.86%(从 0.133 分钟降至 0.051 分钟)
  • 最大刷新时间:减少 65.62%(从 1.12 分钟降至 0.39 分钟)

Flush 性能提升 40%

  • 累计刷盘时间:从 12.57 分钟降至 7.54 分钟
  • 中位刷盘时间:减少 57.57%
  • 最大刷盘时间:减少 31.93%

Cumulative Refresh Time (min) - Lower is Better

v1.15.6
9.14 min
v2.0.0
4.16 min

Cumulative Flush Time (min) - Lower is Better

v1.15.6
12.57 min
v2.0.0
7.54 min

这些优化使得 Easysearch 2.0.0 能够更高效地将数据持久化到磁盘,同时减少对写入操作的阻塞。

3. 垃圾回收(GC)性能优化

GC 效率显著提升

  • Young GC 次数:从 525 次降至 426 次,减少 18.86%
  • Young GC 时间:从 16.547 秒降至 15.985 秒,减少 3.40%
  • Old GC:两个版本均无 Old GC 发生,内存管理健康

更少的 GC 次数意味着:

  • 应用程序 STW(Stop-The-World)暂停更少
  • 更稳定的查询响应时间
  • 更好的系统吞吐量

查询性能提升

1. 基础查询延迟降低

多类型查询性能全面提升

查询类型 延迟指标 改进幅度
Default 查询 50 分位延迟 -11.40% (19.97ms → 17.69ms)
99 分位延迟 -15.23% (25.66ms → 21.75ms)
Term 查询 50 分位延迟 -19.88% (4049ms → 3244ms)
90 分位延迟 -18.73% (4137ms → 3362ms)
Range 查询 50 分位延迟 -31.71% (42.19ms → 28.81ms)
100 分位延迟 -64.68% (111.42ms → 39.35ms)

Query Latency Improvements (ms) - Lower is Better

Default Query (50th percentile)
v1.15.6
19.97ms
v2.0.0
17.69ms
Term Query (50th percentile)
v1.15.6
4049ms
v2.0.0
3244ms
Range Query (50th percentile)
v1.15.6
42.19ms
v2.0.0
28.81ms

2. 排序查询性能飞跃

时间戳排序查询优化高达 97%

Easysearch 2.0.0 在排序查询场景下实现了令人瞩目的性能突破:

降序排序(desc_sort_timestamp)

  • 50 分位延迟:从 516.07ms 降至 98.89ms(-80.84%
  • 90 分位延迟:从 544.84ms 降至 123.59ms(-77.32%
  • 99 分位延迟:从 603.14ms 降至 139.93ms(-76.80%

升序排序 + After 分页(asc_sort_with_after_timestamp)

  • 50 分位延迟:从 1272.58ms 降至 33.56ms(-97.36%
  • 90 分位延迟:从 1386.92ms 降至 37.25ms(-97.31%
  • 99 分位延迟:从 1474.98ms 降至 38.11ms(-97.42%

Sort Query Latency (ms) - Lower is Better

Desc Sort
v1.15.6
516ms
v2.0.0
99ms
Asc Sort + After
v1.15.6
1272ms
v2.0.0
 33ms

Force Merge 后的排序查询

在强制合并为单段后,排序查询性能更加出色:

降序排序(force-merge-1-seg)

  • 50 分位延迟:从 131,617ms 降至 115.01ms(-99.91%
  • 这一改进相当于从 2 分钟以上降至 0.1 秒!

升序 + After 分页(force-merge-1-seg)

  • 50 分位延迟:从 1387.01ms 降至 132.42ms(-90.45%
  • 90 分位延迟:从 1509.03ms 降至 159.05ms(-89.46%

3. 聚合查询性能提升

hourly_agg 聚合查询优化

  • 50 分位延迟:从 4192.57ms 降至 3866.07ms(-7.79%
  • 90 分位延迟:从 4303.51ms 降至 4053.80ms(-5.80%
  • 99 分位延迟:从 4475.32ms 降至 4269.91ms(-4.59%

4. Scroll 查询性能改进

大数据量遍历场景优化

  • 50 分位延迟:从 6511.65ms 降至 4623.87ms(-28.99%
  • 90 分位延迟:从 6881.70ms 降至 5972.79ms(-13.21%
  • 平均吞吐量:从 24.192 pages/s 提升至 24.485 pages/s(+1.21%

Scroll Query Latency (ms) - Lower is Better

50th Percentile
v1.15.6
6511.65ms
v2.0.0
4623.87ms
90th Percentile
v1.15.6
6881.70ms
v2.0.0
5972.79ms

5. 高百分位延迟大幅改善

极端场景下的稳定性提升

在衡量系统稳定性的高百分位延迟指标上,2.0.0 版本表现卓越:

场景 99.9 分位延迟改进 99.99 分位延迟改进 100 分位延迟改进
index-append -43.40% -65.35% -70.91%
(3364ms → 1904ms) (9618ms → 3333ms) (13427ms → 3906ms)

这意味着即使在最坏的情况下,2.0.0 版本也能提供更加稳定和可预测的性能表现。

范围查询性能提升

200s-in-range 和 400s-in-range 查询优化

  • 200s-in-range

    • 50 分位延迟降低 15.60%
    • 吞吐量提升 1.20%
  • 400s-in-range
    • 50 分位延迟降低 8.44%
    • 吞吐量提升 0.23%

存储优化

磁盘空间使用更高效

  • 存储大小:从 19.51 GB 降至 19.14 GB(-1.93%
  • 段数量:从 43 个增至 50 个(+16.28%)

虽然段数量略有增加,但总存储空间仍然减少,说明数据压缩和存储效率得到了提升。

Merge 策略调整

合并操作的权衡

需要注意的是,2.0.0 版本在 Merge 方面有以下变化:

  • Merge 次数从 184 次增至 192 次(+4.35%)
  • Merge 限流时间从 9.53 分钟增至 11.17 分钟(+17.20%

这是为了平衡写入性能和查询性能所做的策略调整。用户可以根据实际场景需求,通过以下参数进行优化:

{
  "index.merge.scheduler.max_thread_count": "1",
  "index.merge.policy.max_merged_segment": "5gb"
}

技术架构改进

1. 段数据结构优化

通过将段元数据从堆内存迁移到堆外内存,Easysearch 2.0.0 实现了:

  • 更低的 JVM 堆压力
  • 更少的 GC 频率
  • 更稳定的内存使用模式
  • 更好的大数据集支持能力

2. 查询缓存优化

排序查询性能的巨大提升表明 2.0.0 版本可能在以下方面进行了优化:

  • 改进的 Doc Values 访问机制
  • 优化的排序算法
  • 更高效的分页实现
  • 智能的查询结果缓存

3. I/O 优化

Refresh 和 Flush 时间的大幅减少说明:

  • 改进了磁盘 I/O 调度策略
  • 优化了文件系统操作
  • 可能引入了更高效的批量写入机制

适用场景

Easysearch 2.0.0 的性能提升使其在以下场景中表现更加出色:

1. 大规模日志与事件流处理

  • 更高的写入吞吐量(+11.24% 峰值)
  • 更低的索引延迟
  • 适合 APM、日志分析、安全监控等场景

2. 时序数据存储与分析

  • 时间戳排序查询性能提升高达 97%
  • 适合 IoT、监控指标、金融交易数据等场景

3. 全文搜索应用

  • 多类型查询延迟降低 10-30%
  • 高并发场景下更稳定的响应时间
  • 适合电商搜索、内容管理系统等场景

4. 实时分析与 Dashboard

  • 聚合查询性能提升 5-8%
  • 更低的极端延迟,用户体验更好
  • 适合实时报表、业务 BI 等场景

5. 大数据量遍历与导出

  • Scroll 查询延迟降低 29%
  • 适合数据迁移、全量导出等场景

升级建议

兼容性

Easysearch 2.0.0 与 1.15.6 在 API 层面保持兼容,但建议:

  1. 测试环境验证:先在测试环境进行充分验证
  2. 配置审查:检查 Merge 相关配置是否需要调整
  3. 监控指标:升级后密切关注 GC、内存、延迟等指标
  4. 滚动升级:生产环境建议采用滚动升级方式

性能测试环境

本次测试使用 esrally 基准测试工具,测试配置如下:

  • 测试场景:append-no-conflicts
  • 测试时间
    • Baseline (1.15.6): 2025-11-14
    • Contender (2.0.0): 2025-11-21
  • 部署方式:External(独立部署)
  • CPU 绑定:使用 taskset 绑定 Easysearch 进程 0 到 15 cpu
  • JVM 配置-Xms16g -Xmx16g

总结

Easysearch 2.0.0 版本在性能方面取得了全面提升:

  • 索引性能提升 12.81%
  • 查询延迟降低 10-97%(不同场景)
  • 内存使用优化 100%(堆内段数据)
  • GC 频率降低 18.86%
  • Refresh 性能提升 54.46%
  • Flush 性能提升 40%
  • 高百分位延迟改善 43-70%

这些改进使得 Easysearch 2.0.0 成为一个更加高效、稳定和可靠的搜索与分析引擎,特别适合处理大规模数据和实时查询场景。无论是日志分析、时序数据处理,还是全文搜索应用,2.0.0 版本都能提供更优秀的性能表现。

我们强烈建议用户升级到 Easysearch 2.0.0,以获得这些显著的性能提升和更好的使用体验。


关于 Easysearch

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

作者:张磊,极限科技(INFINI Labs)搜索引擎研发负责人,对 Elasticsearch 和 Lucene 源码比较熟悉,目前主要负责公司的 Easysearch 产品的研发以及客户服务工作。
原文:https://infinilabs.cn/blog/2025/easysearch-2.0.0-performance-improvements/

继续阅读 »

概述

Easysearch 2.0.0 正式版带来了显著的性能提升和优化改进。通过与上一个稳定版本 1.15.6 的全面对比测试,我们使用 esrally 基准测试工具在 append-no-conflicts 场景下进行了深入的性能评估。测试结果表明,2.0.0 版本在索引性能、查询延迟、内存管理等核心指标上都实现了突破性改进。

核心性能提升

1. 索引性能更加稳定

写入效率提升 12.81%

Easysearch 2.0.0 索引性能表现更加稳定:

  • 累计索引 CPU 时间(所有主分片):从 225.1 分钟缩短至 196.3 分钟,减少 28.8 分钟(-12.81%
  • 索引吞吐量
    • 平均吞吐量从 180,868 docs/s 提升至 190,712 docs/s(+5.44%
    • 最大吞吐量从 198,184 docs/s 提升至 220,460 docs/s(+11.24%
    • 最小吞吐量从 164,263 docs/s 提升至 178,961 docs/s(+8.95%

累计索引 CPU 时间的减少,表明 2.0.0 版本在索引操作上更加高效,CPU 利用率更优。这意味着在相同硬件条件下,Easysearch 2.0.0 能够更快地完成数据摄入任务,对于需要处理大规模数据写入的场景具有重要意义。

Indexing Throughput (docs/s) - Higher is Better

v1.15.6
180,868
v2.0.0
190,712

2. Refresh 和 Flush 耗时缩短

Refresh 和 Flush 性能大幅改善

在 Elasticsearch/Easysearch 中,Refresh 和 Flush 操作对写入性能有直接影响。2.0.0 版本在这两个关键操作上实现了重大优化:

Refresh 性能提升 54.46%

  • 累计刷新时间:从 9.14 分钟降至 4.16 分钟
  • 中位刷新时间:减少 61.86%(从 0.133 分钟降至 0.051 分钟)
  • 最大刷新时间:减少 65.62%(从 1.12 分钟降至 0.39 分钟)

Flush 性能提升 40%

  • 累计刷盘时间:从 12.57 分钟降至 7.54 分钟
  • 中位刷盘时间:减少 57.57%
  • 最大刷盘时间:减少 31.93%

Cumulative Refresh Time (min) - Lower is Better

v1.15.6
9.14 min
v2.0.0
4.16 min

Cumulative Flush Time (min) - Lower is Better

v1.15.6
12.57 min
v2.0.0
7.54 min

这些优化使得 Easysearch 2.0.0 能够更高效地将数据持久化到磁盘,同时减少对写入操作的阻塞。

3. 垃圾回收(GC)性能优化

GC 效率显著提升

  • Young GC 次数:从 525 次降至 426 次,减少 18.86%
  • Young GC 时间:从 16.547 秒降至 15.985 秒,减少 3.40%
  • Old GC:两个版本均无 Old GC 发生,内存管理健康

更少的 GC 次数意味着:

  • 应用程序 STW(Stop-The-World)暂停更少
  • 更稳定的查询响应时间
  • 更好的系统吞吐量

查询性能提升

1. 基础查询延迟降低

多类型查询性能全面提升

查询类型 延迟指标 改进幅度
Default 查询 50 分位延迟 -11.40% (19.97ms → 17.69ms)
99 分位延迟 -15.23% (25.66ms → 21.75ms)
Term 查询 50 分位延迟 -19.88% (4049ms → 3244ms)
90 分位延迟 -18.73% (4137ms → 3362ms)
Range 查询 50 分位延迟 -31.71% (42.19ms → 28.81ms)
100 分位延迟 -64.68% (111.42ms → 39.35ms)

Query Latency Improvements (ms) - Lower is Better

Default Query (50th percentile)
v1.15.6
19.97ms
v2.0.0
17.69ms
Term Query (50th percentile)
v1.15.6
4049ms
v2.0.0
3244ms
Range Query (50th percentile)
v1.15.6
42.19ms
v2.0.0
28.81ms

2. 排序查询性能飞跃

时间戳排序查询优化高达 97%

Easysearch 2.0.0 在排序查询场景下实现了令人瞩目的性能突破:

降序排序(desc_sort_timestamp)

  • 50 分位延迟:从 516.07ms 降至 98.89ms(-80.84%
  • 90 分位延迟:从 544.84ms 降至 123.59ms(-77.32%
  • 99 分位延迟:从 603.14ms 降至 139.93ms(-76.80%

升序排序 + After 分页(asc_sort_with_after_timestamp)

  • 50 分位延迟:从 1272.58ms 降至 33.56ms(-97.36%
  • 90 分位延迟:从 1386.92ms 降至 37.25ms(-97.31%
  • 99 分位延迟:从 1474.98ms 降至 38.11ms(-97.42%

Sort Query Latency (ms) - Lower is Better

Desc Sort
v1.15.6
516ms
v2.0.0
99ms
Asc Sort + After
v1.15.6
1272ms
v2.0.0
 33ms

Force Merge 后的排序查询

在强制合并为单段后,排序查询性能更加出色:

降序排序(force-merge-1-seg)

  • 50 分位延迟:从 131,617ms 降至 115.01ms(-99.91%
  • 这一改进相当于从 2 分钟以上降至 0.1 秒!

升序 + After 分页(force-merge-1-seg)

  • 50 分位延迟:从 1387.01ms 降至 132.42ms(-90.45%
  • 90 分位延迟:从 1509.03ms 降至 159.05ms(-89.46%

3. 聚合查询性能提升

hourly_agg 聚合查询优化

  • 50 分位延迟:从 4192.57ms 降至 3866.07ms(-7.79%
  • 90 分位延迟:从 4303.51ms 降至 4053.80ms(-5.80%
  • 99 分位延迟:从 4475.32ms 降至 4269.91ms(-4.59%

4. Scroll 查询性能改进

大数据量遍历场景优化

  • 50 分位延迟:从 6511.65ms 降至 4623.87ms(-28.99%
  • 90 分位延迟:从 6881.70ms 降至 5972.79ms(-13.21%
  • 平均吞吐量:从 24.192 pages/s 提升至 24.485 pages/s(+1.21%

Scroll Query Latency (ms) - Lower is Better

50th Percentile
v1.15.6
6511.65ms
v2.0.0
4623.87ms
90th Percentile
v1.15.6
6881.70ms
v2.0.0
5972.79ms

5. 高百分位延迟大幅改善

极端场景下的稳定性提升

在衡量系统稳定性的高百分位延迟指标上,2.0.0 版本表现卓越:

场景 99.9 分位延迟改进 99.99 分位延迟改进 100 分位延迟改进
index-append -43.40% -65.35% -70.91%
(3364ms → 1904ms) (9618ms → 3333ms) (13427ms → 3906ms)

这意味着即使在最坏的情况下,2.0.0 版本也能提供更加稳定和可预测的性能表现。

范围查询性能提升

200s-in-range 和 400s-in-range 查询优化

  • 200s-in-range

    • 50 分位延迟降低 15.60%
    • 吞吐量提升 1.20%
  • 400s-in-range
    • 50 分位延迟降低 8.44%
    • 吞吐量提升 0.23%

存储优化

磁盘空间使用更高效

  • 存储大小:从 19.51 GB 降至 19.14 GB(-1.93%
  • 段数量:从 43 个增至 50 个(+16.28%)

虽然段数量略有增加,但总存储空间仍然减少,说明数据压缩和存储效率得到了提升。

Merge 策略调整

合并操作的权衡

需要注意的是,2.0.0 版本在 Merge 方面有以下变化:

  • Merge 次数从 184 次增至 192 次(+4.35%)
  • Merge 限流时间从 9.53 分钟增至 11.17 分钟(+17.20%

这是为了平衡写入性能和查询性能所做的策略调整。用户可以根据实际场景需求,通过以下参数进行优化:

{
  "index.merge.scheduler.max_thread_count": "1",
  "index.merge.policy.max_merged_segment": "5gb"
}

技术架构改进

1. 段数据结构优化

通过将段元数据从堆内存迁移到堆外内存,Easysearch 2.0.0 实现了:

  • 更低的 JVM 堆压力
  • 更少的 GC 频率
  • 更稳定的内存使用模式
  • 更好的大数据集支持能力

2. 查询缓存优化

排序查询性能的巨大提升表明 2.0.0 版本可能在以下方面进行了优化:

  • 改进的 Doc Values 访问机制
  • 优化的排序算法
  • 更高效的分页实现
  • 智能的查询结果缓存

3. I/O 优化

Refresh 和 Flush 时间的大幅减少说明:

  • 改进了磁盘 I/O 调度策略
  • 优化了文件系统操作
  • 可能引入了更高效的批量写入机制

适用场景

Easysearch 2.0.0 的性能提升使其在以下场景中表现更加出色:

1. 大规模日志与事件流处理

  • 更高的写入吞吐量(+11.24% 峰值)
  • 更低的索引延迟
  • 适合 APM、日志分析、安全监控等场景

2. 时序数据存储与分析

  • 时间戳排序查询性能提升高达 97%
  • 适合 IoT、监控指标、金融交易数据等场景

3. 全文搜索应用

  • 多类型查询延迟降低 10-30%
  • 高并发场景下更稳定的响应时间
  • 适合电商搜索、内容管理系统等场景

4. 实时分析与 Dashboard

  • 聚合查询性能提升 5-8%
  • 更低的极端延迟,用户体验更好
  • 适合实时报表、业务 BI 等场景

5. 大数据量遍历与导出

  • Scroll 查询延迟降低 29%
  • 适合数据迁移、全量导出等场景

升级建议

兼容性

Easysearch 2.0.0 与 1.15.6 在 API 层面保持兼容,但建议:

  1. 测试环境验证:先在测试环境进行充分验证
  2. 配置审查:检查 Merge 相关配置是否需要调整
  3. 监控指标:升级后密切关注 GC、内存、延迟等指标
  4. 滚动升级:生产环境建议采用滚动升级方式

性能测试环境

本次测试使用 esrally 基准测试工具,测试配置如下:

  • 测试场景:append-no-conflicts
  • 测试时间
    • Baseline (1.15.6): 2025-11-14
    • Contender (2.0.0): 2025-11-21
  • 部署方式:External(独立部署)
  • CPU 绑定:使用 taskset 绑定 Easysearch 进程 0 到 15 cpu
  • JVM 配置-Xms16g -Xmx16g

总结

Easysearch 2.0.0 版本在性能方面取得了全面提升:

  • 索引性能提升 12.81%
  • 查询延迟降低 10-97%(不同场景)
  • 内存使用优化 100%(堆内段数据)
  • GC 频率降低 18.86%
  • Refresh 性能提升 54.46%
  • Flush 性能提升 40%
  • 高百分位延迟改善 43-70%

这些改进使得 Easysearch 2.0.0 成为一个更加高效、稳定和可靠的搜索与分析引擎,特别适合处理大规模数据和实时查询场景。无论是日志分析、时序数据处理,还是全文搜索应用,2.0.0 版本都能提供更优秀的性能表现。

我们强烈建议用户升级到 Easysearch 2.0.0,以获得这些显著的性能提升和更好的使用体验。


关于 Easysearch

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

作者:张磊,极限科技(INFINI Labs)搜索引擎研发负责人,对 Elasticsearch 和 Lucene 源码比较熟悉,目前主要负责公司的 Easysearch 产品的研发以及客户服务工作。
原文:https://infinilabs.cn/blog/2025/easysearch-2.0.0-performance-improvements/

收起阅读 »

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

1. 使用 LangChain 和 Elasticsearch 开发一个 agentic RAG 助手
https://elasticstack.blog.csdn ... 74725

2. 混合搜索无需头疼:使用 retrievers 简化混合搜索
https://elasticstack.blog.csdn ... 35155

3. 理解智能体人工智能的知识图谱(搭梯)
https://medium.com/%40shilpath ... 8387b

编辑:kin122 
更多资讯:http://news.searchkit.cn
继续阅读 »
1. 使用 LangChain 和 Elasticsearch 开发一个 agentic RAG 助手
https://elasticstack.blog.csdn ... 74725

2. 混合搜索无需头疼:使用 retrievers 简化混合搜索
https://elasticstack.blog.csdn ... 35155

3. 理解智能体人工智能的知识图谱(搭梯)
https://medium.com/%40shilpath ... 8387b

编辑:kin122 
更多资讯:http://news.searchkit.cn 收起阅读 »

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

1. 用 AI 解锁你搜索服务的潜能(需要梯子)
https://medium.com/pickme-engi ... 46a9d

2. 手搓一个搜索引擎难吗?(需要梯子)
https://karboosx.net/post/4eZx ... works

3. 把ES的数据导到qdrant,现在会了吧(需要梯子)
https://pub.towardsai.net/how- ... ad1b8

编辑:斯蒂文
更多资讯:http://news.searchkit.cn
继续阅读 »
1. 用 AI 解锁你搜索服务的潜能(需要梯子)
https://medium.com/pickme-engi ... 46a9d

2. 手搓一个搜索引擎难吗?(需要梯子)
https://karboosx.net/post/4eZx ... works

3. 把ES的数据导到qdrant,现在会了吧(需要梯子)
https://pub.towardsai.net/how- ... ad1b8

编辑:斯蒂文
更多资讯:http://news.searchkit.cn 收起阅读 »

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

1. Elastic SIEM 这么强的安全实验室还要啥自行车(需要梯子)
https://medium.com/%40securenu ... f92b5

2. 5分钟就给你搜索引擎拉起来了,信不信?(需要梯子)
https://medium.com/%40abel.ncm ... 05a61

3. 日志平台大掰头,这次你站谁?(需要梯子)
https://medium.com/%40rostisla ... 1379b

编辑:斯蒂文
更多资讯:http://news.searchkit.cn
继续阅读 »
1. Elastic SIEM 这么强的安全实验室还要啥自行车(需要梯子)
https://medium.com/%40securenu ... f92b5

2. 5分钟就给你搜索引擎拉起来了,信不信?(需要梯子)
https://medium.com/%40abel.ncm ... 05a61

3. 日志平台大掰头,这次你站谁?(需要梯子)
https://medium.com/%40rostisla ... 1379b

编辑:斯蒂文
更多资讯:http://news.searchkit.cn 收起阅读 »

【搜索客社区日报】第2155期 (2025-12-01)

1、使用 Elastic Agent Builder 和 GPT-OSS 构建一个用于 HR 的 AI agent
https://elasticstack.blog.csdn ... 94401

2、混合搜索无需头疼:使用 retrievers 简化混合搜索
https://elasticstack.blog.csdn ... 35155

3、使用 LangChain 和 Elasticsearch 开发一个 agentic RAG 助手
https://elasticstack.blog.csdn ... 74725

4、Easysearch Python 客户端企业级实战——从 0 到 1 解决兼容性与连接难题
https://mp.weixin.qq.com/s/FnRUYVW_JEKerEAE1cJWlg

5、Structured RAG:解决传统 RAG 的准确性盲区
https://mp.weixin.qq.com/s/VsUgOdKl3PJSmqFhHnhReA

编辑:Muse
更多资讯:http://news.searchkit.cn
继续阅读 »
1、使用 Elastic Agent Builder 和 GPT-OSS 构建一个用于 HR 的 AI agent
https://elasticstack.blog.csdn ... 94401

2、混合搜索无需头疼:使用 retrievers 简化混合搜索
https://elasticstack.blog.csdn ... 35155

3、使用 LangChain 和 Elasticsearch 开发一个 agentic RAG 助手
https://elasticstack.blog.csdn ... 74725

4、Easysearch Python 客户端企业级实战——从 0 到 1 解决兼容性与连接难题
https://mp.weixin.qq.com/s/FnRUYVW_JEKerEAE1cJWlg

5、Structured RAG:解决传统 RAG 的准确性盲区
https://mp.weixin.qq.com/s/VsUgOdKl3PJSmqFhHnhReA

编辑:Muse
更多资讯:http://news.searchkit.cn 收起阅读 »

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

1、和快手聊了之后才知道,传统搜索早变天了
https://mp.weixin.qq.com/s/xe6RYpYXNP2JKehL0kk8vg

2、Coco AI V0.9.0 数据权限管控体验
https://blog.csdn.net/yangmf20 ... 03075

3、浅谈 AI 搜索前端打字机效果的实现方案演进
https://my.oschina.net/vivotech/blog/18821045

4、如何使用证书认证连接 Easysearch
https://blog.csdn.net/yangmf20 ... 59952

5、Easysearch 跨集群复制(CCR)实战全攻略之 1——本地两集群间复制
https://mp.weixin.qq.com/s/wxB0fH7GHZGspKB9Rp7gtg

编辑:Fred
更多资讯:http://news.searchkit.cn
继续阅读 »
1、和快手聊了之后才知道,传统搜索早变天了
https://mp.weixin.qq.com/s/xe6RYpYXNP2JKehL0kk8vg

2、Coco AI V0.9.0 数据权限管控体验
https://blog.csdn.net/yangmf20 ... 03075

3、浅谈 AI 搜索前端打字机效果的实现方案演进
https://my.oschina.net/vivotech/blog/18821045

4、如何使用证书认证连接 Easysearch
https://blog.csdn.net/yangmf20 ... 59952

5、Easysearch 跨集群复制(CCR)实战全攻略之 1——本地两集群间复制
https://mp.weixin.qq.com/s/wxB0fH7GHZGspKB9Rp7gtg

编辑:Fred
更多资讯:http://news.searchkit.cn 收起阅读 »

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

1.伯克利等高校开源kvcached:KV缓存守护进程实现动态GPU共享,大幅提升GPU利用率,成本直降70%
https://mp.weixin.qq.com/s/3XvI8uzD0UUnTUJ03KjKHg
2.OceanBase 年度发布会 Hands-on AI Workshop 回顾
https://mp.weixin.qq.com/s/5ZuqJzngFqxLJBqxItn5Cg
3.Speculators:生产级训练投机解码的标准化方案
https://mp.weixin.qq.com/s/ndmaREajMMWu79dyZeJj1w
4.Ray symmetric-run:让 vLLM 多节点部署更轻盈
https://mp.weixin.qq.com/s/1cZtyTDr97qLZ40VfOQ5xw

编辑:Se7en
更多资讯:http://news.searchkit.cn
继续阅读 »
1.伯克利等高校开源kvcached:KV缓存守护进程实现动态GPU共享,大幅提升GPU利用率,成本直降70%
https://mp.weixin.qq.com/s/3XvI8uzD0UUnTUJ03KjKHg
2.OceanBase 年度发布会 Hands-on AI Workshop 回顾
https://mp.weixin.qq.com/s/5ZuqJzngFqxLJBqxItn5Cg
3.Speculators:生产级训练投机解码的标准化方案
https://mp.weixin.qq.com/s/ndmaREajMMWu79dyZeJj1w
4.Ray symmetric-run:让 vLLM 多节点部署更轻盈
https://mp.weixin.qq.com/s/1cZtyTDr97qLZ40VfOQ5xw

编辑:Se7en
更多资讯:http://news.searchkit.cn 收起阅读 »

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

1. 与 Claude Anthropic 结合的 ES 工具代理(搭梯)
https://medium.com/%40marinell ... f5713

2. Elasticsearch 到本地 LLM0(搭梯)
https://medium.com/%40darkly_s ... f57e7

3. 使用 LLM、MCP 和 Ollama 通过自然语言查询 Elasticsearch
https://david-dudu-zbeda.mediu ... b7b43


编辑:kin122 
更多资讯:http://news.searchkit.cn
继续阅读 »
1. 与 Claude Anthropic 结合的 ES 工具代理(搭梯)
https://medium.com/%40marinell ... f5713

2. Elasticsearch 到本地 LLM0(搭梯)
https://medium.com/%40darkly_s ... f57e7

3. 使用 LLM、MCP 和 Ollama 通过自然语言查询 Elasticsearch
https://david-dudu-zbeda.mediu ... b7b43


编辑:kin122 
更多资讯:http://news.searchkit.cn 收起阅读 »