要不要也来分享分享一下啊

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

1. 用 OpenSearch 进行集中日志记录(需要梯子)
https://mycloudjourney.medium. ... 62cd5
2. Canva团队是怎么做图片搜索的(需要梯子)
https://www.canva.dev/blog/eng ... arch/
3. FAISS 和 ES 的掰头(需要梯子)
https://medium.com/%40krasniuk ... 1dc29
编辑:斯蒂文
更多资讯:http://news.searchkit.cn
 
继续阅读 »
1. 用 OpenSearch 进行集中日志记录(需要梯子)
https://mycloudjourney.medium. ... 62cd5
2. Canva团队是怎么做图片搜索的(需要梯子)
https://www.canva.dev/blog/eng ... arch/
3. FAISS 和 ES 的掰头(需要梯子)
https://medium.com/%40krasniuk ... 1dc29
编辑:斯蒂文
更多资讯:http://news.searchkit.cn
  收起阅读 »

搜索客社区日报 第1981期 (2025-02-10)

1、使用Elasticsearch进行基于图的检索增强生成
https://mp.weixin.qq.com/s/Xdxpt69aVuSr_DrXappcRQ

2、一文读懂Deepseek:开启智能时代新征程
https://blog.csdn.net/qq_61962 ... 62821

3、如何使用 Filebeat 8 连接 Easysearch
https://mp.weixin.qq.com/s/SOBF9MR2yK9W8-pGEt-zGA

4、Elasticsearch:使用阿里 infererence API 及 semantic text 进行向量搜索
https://mp.weixin.qq.com/s/OL8ISx-7ARdvcBpZqLTA5Q

5、本地测试 DeepSeek R1 用于 RAG 与 Ollama 和 Kibana
https://mp.weixin.qq.com/s/Rs4_1IjNDIm5dmF4jd4aOw

编辑:Muse
更多资讯:http://news.searchkit.cn
继续阅读 »
1、使用Elasticsearch进行基于图的检索增强生成
https://mp.weixin.qq.com/s/Xdxpt69aVuSr_DrXappcRQ

2、一文读懂Deepseek:开启智能时代新征程
https://blog.csdn.net/qq_61962 ... 62821

3、如何使用 Filebeat 8 连接 Easysearch
https://mp.weixin.qq.com/s/SOBF9MR2yK9W8-pGEt-zGA

4、Elasticsearch:使用阿里 infererence API 及 semantic text 进行向量搜索
https://mp.weixin.qq.com/s/OL8ISx-7ARdvcBpZqLTA5Q

5、本地测试 DeepSeek R1 用于 RAG 与 Ollama 和 Kibana
https://mp.weixin.qq.com/s/Rs4_1IjNDIm5dmF4jd4aOw

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

Easysearch 证书:Windows 上创建自签名证书的 7 种方法

背景

最近 INFINI Labs 社区有 Easysearch 开发者反馈,其开发环境为 Windows 系统,安装部署 Easysearch 时初始化证书遇到麻烦,如果没有证书就无法开启 Easysearch TLS 传输加密来保护数据的网络传输安全。本文将介绍在 Windows 上创建自签名证书的 7 种不同方法。

使用在线工具 certificatetools.com

在允许生成自签名证书的在线服务中,CertificateTools 是最先进的。只需查看所有可用选项即可:

就这么简单!

使用 Let’s Encrypt

首先,安装 Certbot,这是 Let’s Encrypt 官方推荐的工具,用于自动化获取和续期 SSL/TLS 证书。

1. 安装 Certbot

2. 获取证书

  • 打开 命令提示符 或 PowerShell 以管理员身份运行。
  • 输入以下命令获取证书(替换 example.com 为你的域名):
certbot certonly --standalone --preferred-challenges http -d example.com
  • Certbot 会自动通过 HTTP 验证域名并生成证书。证书会存储在:
C:\Certbot\live\example.com\

里面有以下文件:

  • cert.pem:证书。
  • privkey.pem:私钥。
  • fullchain.pem:完整证书链。

3. 导入证书

  • 打开 Windows 证书管理器 (mmc),选择 个人 文件夹。
  • 右键点击 个人 文件夹,选择 导入,导入 cert.pem 和 privkey.pem。

4. 验证证书

  • 在证书管理器中,确认证书已成功导入并配置。

5. 续期证书

  • 使用以下命令手动续期证书:
certbot renew

使用 OpenSSL

OpenSSL 是一个跨平台的工具,适用于各种操作系统,包括 Windows。在 Windows 上,你需要首先安装 OpenSSL。

步骤:

  1. OpenSSL 官方网站 下载并安装 OpenSSL。
  2. 打开 命令提示符 或 PowerShell,并导航到 OpenSSL 的安装目录。
  3. 运行以下命令生成自签名证书:
openssl req -new -x509 -keyout mycert.pem -out mycert.pem -days 365

-new:创建一个新的证书请求。
-x509:生成一个自签名证书。
-keyout 和 -out:指定证书和私钥文件的保存路径。
-days 365:证书有效期为 365 天。

  1. 系统会提示你输入一些证书的详细信息,如国家、组织名等。

验证:

检查生成的 mycert.pem 文件是否存在,并通过命令 openssl x509 -in mycert.pem -text 查看证书的内容。

使用 PowerShell

PowerShell 提供了一个简单的命令 New-SelfSignedCertificate 来创建自签名证书。以下是具体的操作步骤:

步骤:

  1. 按下 Windows + X,选择 Windows PowerShell (管理员)。
  2. 在 PowerShell 窗口中输入以下命令:
New-SelfSignedCertificate -DnsName "example.com" -CertStoreLocation "cert:\LocalMachine\My"

-DnsName "example.com":指定证书的 DNS 名称,可以更改为你需要的域名或主机名。
-CertStoreLocation "cert:\LocalMachine\My":将证书存储到本地计算机的证书存储区。

  1. 执行后,证书将被创建,并存储在 Windows 证书管理器中。

验证:

  1. 打开 运行 (Windows + R),输入 mmc,点击确定。
  2. 在 MMC 中,选择 文件 > 添加/删除管理单元,选择 证书,然后选择 计算机帐户。
  3. 查看 个人 文件夹,你将看到刚才创建的证书。

使用 IIS

IIS(Internet Information Services)是一种 Web 服务器软件,可以通过它为你的服务器生成自签名证书。

步骤:

  1. 打开 IIS 管理器,选择你的服务器名称。
  2. 在主界面中,双击 服务器证书 选项。
  3. 在右侧操作面板中,点击 创建自签名证书。
  4. 输入证书的名称(如:example.com),然后选择证书的存储位置。
  5. 点击确定,证书将被创建并存储在 IIS 中。

验证:

在 服务器证书 部分,你将看到已创建的证书。

使用 MMC 管理工具

Windows 提供了 MMC 管理工具,可以通过图形界面创建自签名证书。

步骤:

  1. 按 Windows + R 打开运行窗口,输入 mmc 并按下回车。
  2. 在 MMC 中,选择 文件 > 添加/删除管理单元,点击 证书 并选择 计算机帐户。
  3. 选择 本地计算机 > 确定。
  4. 在左侧的证书树中,右键点击 个人 文件夹,选择 所有任务 > 请求新证书。
  5. 跟随向导填写证书的详细信息并选择 自签名证书 选项,完成后证书将被创建。

验证:

在 MMC 中查看证书是否已经生成,并且可以在 个人 文件夹中找到它。

使用 XCA 工具

XCA 是一个开源工具,支持生成和管理证书。它为用户提供了一个图形化界面,适合那些不熟悉命令行操作的用户。

步骤:

  1. XCA 官方网站 下载并安装 XCA。
  2. 启动 XCA,点击 文件 > 新建数据库 来创建一个新的证书数据库。
  3. 在 证书 选项卡中,点击 新建证书。
  4. 在证书的设置中,选择 自签名证书,然后填写证书的详细信息。
  5. 点击 保存 来生成证书。

验证:

生成的证书可以在 XCA 的 证书 列表中查看,并导出为文件或在需要的地方使用。

总结

在 Windows 上创建自签名证书对于开发者和管理员来说是一项常见任务。自签名证书通常用于测试环境、开发、或者是没有商业证书的情况下使用。本文所述在 Windows 上创建自签名证书的 7 种方法都有详细步骤和验证方式,希望能给你带来帮助。


参考资料

  1. 7 ways to create self-signed certificates on Windows

  2. 如何使用 XCA 创建证书
继续阅读 »

背景

最近 INFINI Labs 社区有 Easysearch 开发者反馈,其开发环境为 Windows 系统,安装部署 Easysearch 时初始化证书遇到麻烦,如果没有证书就无法开启 Easysearch TLS 传输加密来保护数据的网络传输安全。本文将介绍在 Windows 上创建自签名证书的 7 种不同方法。

使用在线工具 certificatetools.com

在允许生成自签名证书的在线服务中,CertificateTools 是最先进的。只需查看所有可用选项即可:

就这么简单!

使用 Let’s Encrypt

首先,安装 Certbot,这是 Let’s Encrypt 官方推荐的工具,用于自动化获取和续期 SSL/TLS 证书。

1. 安装 Certbot

2. 获取证书

  • 打开 命令提示符 或 PowerShell 以管理员身份运行。
  • 输入以下命令获取证书(替换 example.com 为你的域名):
certbot certonly --standalone --preferred-challenges http -d example.com
  • Certbot 会自动通过 HTTP 验证域名并生成证书。证书会存储在:
C:\Certbot\live\example.com\

里面有以下文件:

  • cert.pem:证书。
  • privkey.pem:私钥。
  • fullchain.pem:完整证书链。

3. 导入证书

  • 打开 Windows 证书管理器 (mmc),选择 个人 文件夹。
  • 右键点击 个人 文件夹,选择 导入,导入 cert.pem 和 privkey.pem。

4. 验证证书

  • 在证书管理器中,确认证书已成功导入并配置。

5. 续期证书

  • 使用以下命令手动续期证书:
certbot renew

使用 OpenSSL

OpenSSL 是一个跨平台的工具,适用于各种操作系统,包括 Windows。在 Windows 上,你需要首先安装 OpenSSL。

步骤:

  1. OpenSSL 官方网站 下载并安装 OpenSSL。
  2. 打开 命令提示符 或 PowerShell,并导航到 OpenSSL 的安装目录。
  3. 运行以下命令生成自签名证书:
openssl req -new -x509 -keyout mycert.pem -out mycert.pem -days 365

-new:创建一个新的证书请求。
-x509:生成一个自签名证书。
-keyout 和 -out:指定证书和私钥文件的保存路径。
-days 365:证书有效期为 365 天。

  1. 系统会提示你输入一些证书的详细信息,如国家、组织名等。

验证:

检查生成的 mycert.pem 文件是否存在,并通过命令 openssl x509 -in mycert.pem -text 查看证书的内容。

使用 PowerShell

PowerShell 提供了一个简单的命令 New-SelfSignedCertificate 来创建自签名证书。以下是具体的操作步骤:

步骤:

  1. 按下 Windows + X,选择 Windows PowerShell (管理员)。
  2. 在 PowerShell 窗口中输入以下命令:
New-SelfSignedCertificate -DnsName "example.com" -CertStoreLocation "cert:\LocalMachine\My"

-DnsName "example.com":指定证书的 DNS 名称,可以更改为你需要的域名或主机名。
-CertStoreLocation "cert:\LocalMachine\My":将证书存储到本地计算机的证书存储区。

  1. 执行后,证书将被创建,并存储在 Windows 证书管理器中。

验证:

  1. 打开 运行 (Windows + R),输入 mmc,点击确定。
  2. 在 MMC 中,选择 文件 > 添加/删除管理单元,选择 证书,然后选择 计算机帐户。
  3. 查看 个人 文件夹,你将看到刚才创建的证书。

使用 IIS

IIS(Internet Information Services)是一种 Web 服务器软件,可以通过它为你的服务器生成自签名证书。

步骤:

  1. 打开 IIS 管理器,选择你的服务器名称。
  2. 在主界面中,双击 服务器证书 选项。
  3. 在右侧操作面板中,点击 创建自签名证书。
  4. 输入证书的名称(如:example.com),然后选择证书的存储位置。
  5. 点击确定,证书将被创建并存储在 IIS 中。

验证:

在 服务器证书 部分,你将看到已创建的证书。

使用 MMC 管理工具

Windows 提供了 MMC 管理工具,可以通过图形界面创建自签名证书。

步骤:

  1. 按 Windows + R 打开运行窗口,输入 mmc 并按下回车。
  2. 在 MMC 中,选择 文件 > 添加/删除管理单元,点击 证书 并选择 计算机帐户。
  3. 选择 本地计算机 > 确定。
  4. 在左侧的证书树中,右键点击 个人 文件夹,选择 所有任务 > 请求新证书。
  5. 跟随向导填写证书的详细信息并选择 自签名证书 选项,完成后证书将被创建。

验证:

在 MMC 中查看证书是否已经生成,并且可以在 个人 文件夹中找到它。

使用 XCA 工具

XCA 是一个开源工具,支持生成和管理证书。它为用户提供了一个图形化界面,适合那些不熟悉命令行操作的用户。

步骤:

  1. XCA 官方网站 下载并安装 XCA。
  2. 启动 XCA,点击 文件 > 新建数据库 来创建一个新的证书数据库。
  3. 在 证书 选项卡中,点击 新建证书。
  4. 在证书的设置中,选择 自签名证书,然后填写证书的详细信息。
  5. 点击 保存 来生成证书。

验证:

生成的证书可以在 XCA 的 证书 列表中查看,并导出为文件或在需要的地方使用。

总结

在 Windows 上创建自签名证书对于开发者和管理员来说是一项常见任务。自签名证书通常用于测试环境、开发、或者是没有商业证书的情况下使用。本文所述在 Windows 上创建自签名证书的 7 种方法都有详细步骤和验证方式,希望能给你带来帮助。


参考资料

  1. 7 ways to create self-signed certificates on Windows

  2. 如何使用 XCA 创建证书
收起阅读 »

Spring Boot 集成 Easysearch 完整指南

Easysearch 的很多用户都有这样的需要,之前是用的 ES,现在要迁移到 Easysearch,但是业务方使用的是 Spring Boot 集成的客户端,问是否能平滑迁移。

Easysearch 是完全兼容 Spring Boot 的,完全不用修改,本指南将探讨如何将 Spring Boot 和 ES 的 high-level 客户端 与 Easysearch 进行集成,涵盖从基础设置到实现 CRUD 操作和测试的所有内容。

服务器设置

首先,需要修改 Easysearch 节点的 easysearch.yml 文件,打开并配置这 2 个配置项:

elasticsearch.api_compatibility: true

#根据客户端版本配置版本号,我这里配置成 7.17.18
elasticsearch.api_compatibility_version: "7.17.18"

项目设置

然后,让我们设置 Maven 依赖。以下是 pom.xml 中的基本配置:

<properties>
    <java.version>11</java.version>
    <spring-data-elasticsearch.version>4.4.18</spring-data-elasticsearch.version>
    <elasticsearch.version>7.17.18</elasticsearch.version>
</properties>

<dependencies>
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-web</artifactId>
    </dependency>

    <dependency>
        <groupId>org.springframework.data</groupId>
        <artifactId>spring-data-elasticsearch</artifactId>
        <version>${spring-data-elasticsearch.version}</version>
    </dependency>
    <dependency>
        <groupId>org.elasticsearch</groupId>
        <artifactId>elasticsearch</artifactId>
        <version>${elasticsearch.version}</version>
    </dependency>
    <dependency>
        <groupId>org.elasticsearch.client</groupId>
        <artifactId>elasticsearch-rest-high-level-client</artifactId>
        <version>${elasticsearch.version}</version>
    </dependency>
    <dependency>
        <groupId>org.projectlombok</groupId>
        <artifactId>lombok</artifactId>
        <optional>true</optional>
    </dependency>
</dependencies>

客户端连接配置

完全和连接 Elasticsearch 的方式一样,不用修改:

配置 src/main/resources/application.yml 文件

spring:
  elasticsearch:
    rest:
      uris: https://localhost:9202
      username: admin
      password: xxxxxxxxxxx
    ssl:
      verification-mode: none

连接配置类

@Configuration
public class ElasticsearchConfig extends AbstractElasticsearchConfiguration {
    @Value("${spring.elasticsearch.rest.uris}")
    private String elasticsearchUrl;

    @Value("${spring.elasticsearch.rest.username}")
    private String username;

    @Value("${spring.elasticsearch.rest.password}")
    private String password;

    @Override
    @Bean
    public RestHighLevelClient elasticsearchClient() {
        final CredentialsProvider credentialsProvider = new BasicCredentialsProvider();
        credentialsProvider.setCredentials(AuthScope.ANY,
                new UsernamePasswordCredentials(username, password));

        SSLContext sslContext = SSLContexts.custom()
                .loadTrustMaterial(null, (x509Certificates, s) -> true)
                .build();

        RestClientBuilder builder = RestClient.builder(HttpHost.create(elasticsearchUrl))
                .setHttpClientConfigCallback(httpClientBuilder -> httpClientBuilder
                        .setDefaultCredentialsProvider(credentialsProvider)
                        .setSSLContext(sslContext)
                        .setSSLHostnameVerifier(NoopHostnameVerifier.INSTANCE));

        return new RestHighLevelClient(builder);
    }
}

领域模型

使用 Spring 的 Elasticsearch 注解定义领域模型:

@Data
@Document(indexName = "products")
public class Product {
    @Id
    private String id;

    @Field(type = FieldType.Text, name = "name")
    private String name;

    @Field(type = FieldType.Double, name = "price")
    private Double price;
}

仓库层

创建继承 ElasticsearchRepository 的仓库接口:

@Repository
@EnableElasticsearchRepositories
public interface ProductRepository extends ElasticsearchRepository<Product, String> {
}

服务层

实现服务层来处理业务逻辑:

@Service
public class ProductService {
    private final ProductRepository productRepository;

    @Autowired
    public ProductService(ProductRepository productRepository) {
        this.productRepository = productRepository;
    }

    public Product saveProduct(Product product) {
        return productRepository.save(product);
    }

    public Product findProductById(String id) {
        return productRepository.findById(id).orElse(null);
    }
}

测试

编写集成测试类:

@SpringBootTest
public class ProductServiceIntegrationTest {
    @Autowired
    private ElasticsearchOperations elasticsearchOperations;

    @Autowired
    private ProductService productService;

    private static final String INDEX_NAME = "products";

    @BeforeEach
    public void setUp() {
        IndexOperations indexOperations = elasticsearchOperations.indexOps(IndexCoordinates.of(INDEX_NAME));
        if (indexOperations.exists()) {
            indexOperations.delete();
        }

        // 定义 mapping
        Document mapping = Document.create()
                .append("properties", Document.create()
                        .append("name", Document.create()
                                .append("type", "text")
                                .append("analyzer", "standard"))
                        .append("price", Document.create()
                                .append("type", "double")));

        // 创建索引并应用 mapping
        indexOperations.create(Collections.EMPTY_MAP, mapping);
    }

    @Test
    public void testSaveAndFindProduct() {
         List<Product> products = Arrays.asList(
                new Product("Test Product 1", 99.99),
                new Product("Test Product 2", 199.99),
                new Product("Test Product 3", 299.99)
        );

        List<IndexQuery> queries = products.stream()
            .map(product -> new IndexQueryBuilder()
                .withObject(product)
                .withIndex(INDEX_NAME)
                .build())
            .collect(Collectors.toList());

        List<IndexedObjectInformation> indexedInfos = elasticsearchOperations.bulkIndex(
            queries,
            IndexCoordinates.of(INDEX_NAME)
        );

        // 验证结果
        List<String> ids = indexedInfos.stream()
            .map(IndexedObjectInformation::getId)
            .collect(Collectors.toList());

        assertFalse(ids.isEmpty());
        assertEquals(products.size(), ids.size());
    }
}

结论

本指南展示了 Easysearch 与 Elasticsearch 的高度兼容性:

  1. 配置方式相同,仅需启用 Easysearch 的 API 兼容模式。
  2. 可直接使用现有 Elasticsearch 客户端。
  3. Maven 依赖无需更改。
  4. API、注解和仓库接口完全兼容。
  5. 现有测试代码可直接应用。

这种兼容性使得从 Elasticsearch 迁移到 Easysearch 成为一个简单、低风险的过程。Spring Boot 项目可以几乎无缝地切换到 Easysearch,同时获得其性能和资源利用方面的优势。

关于 Easysearch

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

官网文档:https://infinilabs.cn/docs/latest/easysearch

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

继续阅读 »

Easysearch 的很多用户都有这样的需要,之前是用的 ES,现在要迁移到 Easysearch,但是业务方使用的是 Spring Boot 集成的客户端,问是否能平滑迁移。

Easysearch 是完全兼容 Spring Boot 的,完全不用修改,本指南将探讨如何将 Spring Boot 和 ES 的 high-level 客户端 与 Easysearch 进行集成,涵盖从基础设置到实现 CRUD 操作和测试的所有内容。

服务器设置

首先,需要修改 Easysearch 节点的 easysearch.yml 文件,打开并配置这 2 个配置项:

elasticsearch.api_compatibility: true

#根据客户端版本配置版本号,我这里配置成 7.17.18
elasticsearch.api_compatibility_version: "7.17.18"

项目设置

然后,让我们设置 Maven 依赖。以下是 pom.xml 中的基本配置:

<properties>
    <java.version>11</java.version>
    <spring-data-elasticsearch.version>4.4.18</spring-data-elasticsearch.version>
    <elasticsearch.version>7.17.18</elasticsearch.version>
</properties>

<dependencies>
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-web</artifactId>
    </dependency>

    <dependency>
        <groupId>org.springframework.data</groupId>
        <artifactId>spring-data-elasticsearch</artifactId>
        <version>${spring-data-elasticsearch.version}</version>
    </dependency>
    <dependency>
        <groupId>org.elasticsearch</groupId>
        <artifactId>elasticsearch</artifactId>
        <version>${elasticsearch.version}</version>
    </dependency>
    <dependency>
        <groupId>org.elasticsearch.client</groupId>
        <artifactId>elasticsearch-rest-high-level-client</artifactId>
        <version>${elasticsearch.version}</version>
    </dependency>
    <dependency>
        <groupId>org.projectlombok</groupId>
        <artifactId>lombok</artifactId>
        <optional>true</optional>
    </dependency>
</dependencies>

客户端连接配置

完全和连接 Elasticsearch 的方式一样,不用修改:

配置 src/main/resources/application.yml 文件

spring:
  elasticsearch:
    rest:
      uris: https://localhost:9202
      username: admin
      password: xxxxxxxxxxx
    ssl:
      verification-mode: none

连接配置类

@Configuration
public class ElasticsearchConfig extends AbstractElasticsearchConfiguration {
    @Value("${spring.elasticsearch.rest.uris}")
    private String elasticsearchUrl;

    @Value("${spring.elasticsearch.rest.username}")
    private String username;

    @Value("${spring.elasticsearch.rest.password}")
    private String password;

    @Override
    @Bean
    public RestHighLevelClient elasticsearchClient() {
        final CredentialsProvider credentialsProvider = new BasicCredentialsProvider();
        credentialsProvider.setCredentials(AuthScope.ANY,
                new UsernamePasswordCredentials(username, password));

        SSLContext sslContext = SSLContexts.custom()
                .loadTrustMaterial(null, (x509Certificates, s) -> true)
                .build();

        RestClientBuilder builder = RestClient.builder(HttpHost.create(elasticsearchUrl))
                .setHttpClientConfigCallback(httpClientBuilder -> httpClientBuilder
                        .setDefaultCredentialsProvider(credentialsProvider)
                        .setSSLContext(sslContext)
                        .setSSLHostnameVerifier(NoopHostnameVerifier.INSTANCE));

        return new RestHighLevelClient(builder);
    }
}

领域模型

使用 Spring 的 Elasticsearch 注解定义领域模型:

@Data
@Document(indexName = "products")
public class Product {
    @Id
    private String id;

    @Field(type = FieldType.Text, name = "name")
    private String name;

    @Field(type = FieldType.Double, name = "price")
    private Double price;
}

仓库层

创建继承 ElasticsearchRepository 的仓库接口:

@Repository
@EnableElasticsearchRepositories
public interface ProductRepository extends ElasticsearchRepository<Product, String> {
}

服务层

实现服务层来处理业务逻辑:

@Service
public class ProductService {
    private final ProductRepository productRepository;

    @Autowired
    public ProductService(ProductRepository productRepository) {
        this.productRepository = productRepository;
    }

    public Product saveProduct(Product product) {
        return productRepository.save(product);
    }

    public Product findProductById(String id) {
        return productRepository.findById(id).orElse(null);
    }
}

测试

编写集成测试类:

@SpringBootTest
public class ProductServiceIntegrationTest {
    @Autowired
    private ElasticsearchOperations elasticsearchOperations;

    @Autowired
    private ProductService productService;

    private static final String INDEX_NAME = "products";

    @BeforeEach
    public void setUp() {
        IndexOperations indexOperations = elasticsearchOperations.indexOps(IndexCoordinates.of(INDEX_NAME));
        if (indexOperations.exists()) {
            indexOperations.delete();
        }

        // 定义 mapping
        Document mapping = Document.create()
                .append("properties", Document.create()
                        .append("name", Document.create()
                                .append("type", "text")
                                .append("analyzer", "standard"))
                        .append("price", Document.create()
                                .append("type", "double")));

        // 创建索引并应用 mapping
        indexOperations.create(Collections.EMPTY_MAP, mapping);
    }

    @Test
    public void testSaveAndFindProduct() {
         List<Product> products = Arrays.asList(
                new Product("Test Product 1", 99.99),
                new Product("Test Product 2", 199.99),
                new Product("Test Product 3", 299.99)
        );

        List<IndexQuery> queries = products.stream()
            .map(product -> new IndexQueryBuilder()
                .withObject(product)
                .withIndex(INDEX_NAME)
                .build())
            .collect(Collectors.toList());

        List<IndexedObjectInformation> indexedInfos = elasticsearchOperations.bulkIndex(
            queries,
            IndexCoordinates.of(INDEX_NAME)
        );

        // 验证结果
        List<String> ids = indexedInfos.stream()
            .map(IndexedObjectInformation::getId)
            .collect(Collectors.toList());

        assertFalse(ids.isEmpty());
        assertEquals(products.size(), ids.size());
    }
}

结论

本指南展示了 Easysearch 与 Elasticsearch 的高度兼容性:

  1. 配置方式相同,仅需启用 Easysearch 的 API 兼容模式。
  2. 可直接使用现有 Elasticsearch 客户端。
  3. Maven 依赖无需更改。
  4. API、注解和仓库接口完全兼容。
  5. 现有测试代码可直接应用。

这种兼容性使得从 Elasticsearch 迁移到 Easysearch 成为一个简单、低风险的过程。Spring Boot 项目可以几乎无缝地切换到 Easysearch,同时获得其性能和资源利用方面的优势。

关于 Easysearch

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

官网文档:https://infinilabs.cn/docs/latest/easysearch

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

收起阅读 »

Easysearch 集群通过 API 进行用户密码重置

在日常使用 Easysearch 中,难免会遇到集群密码需要重置的情况(如密码遗失、安全审计要求等)。

通过查看 Easysearch 用户接口文档,创建用户使用如下接口:

PUT _security/user/<username>
{
  "password": "adminpass",
  "roles": ["maintenance_staff", "weapons"],
  "external_roles": ["captains", "starfleet"],
  "attributes": {
    "attribute1": "value1",
    "attribute2": "value2"
  }
}

同样可以通过该接口对用户进行密码重置:

PUT _security/user/<username>
{
  "password": "adminpass111",
  "roles": ["maintenance_staff", "weapons"],
  "external_roles": ["captains", "starfleet"],
  "attributes": {
    "attribute1": "value1",
    "attribute2": "value2"
}

API 接口创建的用户

创建一个测试用户 test,并进行访问验证。

通过接口重置用户 test 密码,并进行访问验证。

配置文件创建的用户

在配置文件 user.yml 中添加测试用户(test1、test2)配置:

## Test users
test1:
  hash: "$2y$12$ZNfKKCeeRQXOWX27W50tbu0Tq4NT4ADdCQOBoZzokI1zR8ZEUWm4W" # test1
  reserved: true
  roles:
    - "readall_and_monitor"

test2:
  hash: "$2y$12$m4/eSiDlzRII87vNeKwzteEHGpgpbdMr5tRvOfve/xIbEYdC4bU7a" # test2
  reserved: false
  roles:
    - "readall_and_monitor"

其中 hash 字段是将用户密码哈希出来的值,可通过 bin/hash_password.sh -p "<明文密码>" 生成。

进行用户访问验证。

对 test1、test2 用户进行密码重置。

用户 test1 重置失败,用户 test2 重置成功。用户 test1 重置失败是因为配置了 reserved: true,将用户 test1 指定为内置用户,使用用户 admin 会因为权限无法进行密码重置,那就需要使用有更高权限的管理证书进行密码重置。默认在 Easysearch 集群执行初始化脚本 bin/initialize.sh 时,会在 config 目录下生成证书文件,其中 admin.crtadmin.key 为管理证书。

test1 用户密码重置成功,进行访问验证。

关于 Easysearch

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

官网文档:https://infinilabs.cn/docs/latest/easysearch

继续阅读 »

在日常使用 Easysearch 中,难免会遇到集群密码需要重置的情况(如密码遗失、安全审计要求等)。

通过查看 Easysearch 用户接口文档,创建用户使用如下接口:

PUT _security/user/<username>
{
  "password": "adminpass",
  "roles": ["maintenance_staff", "weapons"],
  "external_roles": ["captains", "starfleet"],
  "attributes": {
    "attribute1": "value1",
    "attribute2": "value2"
  }
}

同样可以通过该接口对用户进行密码重置:

PUT _security/user/<username>
{
  "password": "adminpass111",
  "roles": ["maintenance_staff", "weapons"],
  "external_roles": ["captains", "starfleet"],
  "attributes": {
    "attribute1": "value1",
    "attribute2": "value2"
}

API 接口创建的用户

创建一个测试用户 test,并进行访问验证。

通过接口重置用户 test 密码,并进行访问验证。

配置文件创建的用户

在配置文件 user.yml 中添加测试用户(test1、test2)配置:

## Test users
test1:
  hash: "$2y$12$ZNfKKCeeRQXOWX27W50tbu0Tq4NT4ADdCQOBoZzokI1zR8ZEUWm4W" # test1
  reserved: true
  roles:
    - "readall_and_monitor"

test2:
  hash: "$2y$12$m4/eSiDlzRII87vNeKwzteEHGpgpbdMr5tRvOfve/xIbEYdC4bU7a" # test2
  reserved: false
  roles:
    - "readall_and_monitor"

其中 hash 字段是将用户密码哈希出来的值,可通过 bin/hash_password.sh -p "<明文密码>" 生成。

进行用户访问验证。

对 test1、test2 用户进行密码重置。

用户 test1 重置失败,用户 test2 重置成功。用户 test1 重置失败是因为配置了 reserved: true,将用户 test1 指定为内置用户,使用用户 admin 会因为权限无法进行密码重置,那就需要使用有更高权限的管理证书进行密码重置。默认在 Easysearch 集群执行初始化脚本 bin/initialize.sh 时,会在 config 目录下生成证书文件,其中 admin.crtadmin.key 为管理证书。

test1 用户密码重置成功,进行访问验证。

关于 Easysearch

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

官网文档:https://infinilabs.cn/docs/latest/easysearch

收起阅读 »

如何使用 Filebeat 8 连接 Easysearch

在日志场景,还是有很多小伙伴在使用 Filebeat 采集日志的。今天我来实战下使用 Filebeat 8 连接 Easysearch 。本次使用 Easysearch-1.9.0 版本和 Filebeat-8.17.0 版本做演示,也适用 Filebeat-oss-8.17.0 版本。

Easysearch 不开启兼容参数的情况

Easysearch 默认情况下未开启 Elastic 兼容功能。此时直接用 Filebeat 去连接 Easysearch 会失败,报错 "could not connect to a compatible version of Elasticsearch" ,直译过来就是“无法连接到兼容的 Elasticsearch 版本”。

Easysearch 开启 elasticsearch.api_compatibility 参数

在 Easysearch-1.9.0 中关于 Elasticsearch 的兼容性参数有两个,我们先开第一个。

elasticsearch.api_compatibility: true
#elasticsearch.api_compatibility_version: "8.9.0"

启动 Filebeat 连接。

这次 Filebeat 检测到了一个兼容的版本 7.10.2,并导入了一个叫 filebeat 的索引生命周期管理策略,但最终因为无法导入模板而失败了。

索引生命周期查看。

关闭 Filebeat 的导入模板功能尝试连接,修改配置 filebeat.yml 关闭模板导入。

setup.template.enabled: false

启动 Filebeat 连接 Easysearch。

这次 Filebeat 成功连接上了 Easysearch,并成功将采集数据写入。

Easysearch 同时开启两个兼容性参数

在 Easysearch-1.9.0 中关于 Elasticsearch 的兼容性参数有两个,这次我们二个同时打开。

elasticsearch.api_compatibility: true
elasticsearch.api_compatibility_version: "8.9.0"

清理测试数据后,启动 Filebeat 连接。

跟打开第一个兼容参数很像,只是 Filebeat 检测到的版本变成了 8.9.0。

我们关闭 Filebeat 的模板导入功能,再次连接——成功

数据也成功写入。

注意事项

Easysearch 的第一个兼容参数 elasticsearch.api_compatibility 必须开启,否则 Filebeat 检测到的还是 1.9.0 版本无法正常连接。

如果 Easysearch 使用的是 1.9.0 之前的版本,可以使用网关代理 Easysearch 的方法

总结

Easysearch-1.9.0 必须开启第一个兼容参数,此时检测到的版本是 7.10.2。也可同时开启两个兼容性参数,此时检测到的版本是 8.9.0。

Filebeat 必须关闭模板导入功能。

好了,还有其他问题的小伙伴,欢迎加我微信沟通。

继续阅读 »

在日志场景,还是有很多小伙伴在使用 Filebeat 采集日志的。今天我来实战下使用 Filebeat 8 连接 Easysearch 。本次使用 Easysearch-1.9.0 版本和 Filebeat-8.17.0 版本做演示,也适用 Filebeat-oss-8.17.0 版本。

Easysearch 不开启兼容参数的情况

Easysearch 默认情况下未开启 Elastic 兼容功能。此时直接用 Filebeat 去连接 Easysearch 会失败,报错 "could not connect to a compatible version of Elasticsearch" ,直译过来就是“无法连接到兼容的 Elasticsearch 版本”。

Easysearch 开启 elasticsearch.api_compatibility 参数

在 Easysearch-1.9.0 中关于 Elasticsearch 的兼容性参数有两个,我们先开第一个。

elasticsearch.api_compatibility: true
#elasticsearch.api_compatibility_version: "8.9.0"

启动 Filebeat 连接。

这次 Filebeat 检测到了一个兼容的版本 7.10.2,并导入了一个叫 filebeat 的索引生命周期管理策略,但最终因为无法导入模板而失败了。

索引生命周期查看。

关闭 Filebeat 的导入模板功能尝试连接,修改配置 filebeat.yml 关闭模板导入。

setup.template.enabled: false

启动 Filebeat 连接 Easysearch。

这次 Filebeat 成功连接上了 Easysearch,并成功将采集数据写入。

Easysearch 同时开启两个兼容性参数

在 Easysearch-1.9.0 中关于 Elasticsearch 的兼容性参数有两个,这次我们二个同时打开。

elasticsearch.api_compatibility: true
elasticsearch.api_compatibility_version: "8.9.0"

清理测试数据后,启动 Filebeat 连接。

跟打开第一个兼容参数很像,只是 Filebeat 检测到的版本变成了 8.9.0。

我们关闭 Filebeat 的模板导入功能,再次连接——成功

数据也成功写入。

注意事项

Easysearch 的第一个兼容参数 elasticsearch.api_compatibility 必须开启,否则 Filebeat 检测到的还是 1.9.0 版本无法正常连接。

如果 Easysearch 使用的是 1.9.0 之前的版本,可以使用网关代理 Easysearch 的方法

总结

Easysearch-1.9.0 必须开启第一个兼容参数,此时检测到的版本是 7.10.2。也可同时开启两个兼容性参数,此时检测到的版本是 8.9.0。

Filebeat 必须关闭模板导入功能。

好了,还有其他问题的小伙伴,欢迎加我微信沟通。

收起阅读 »

如何使用 Logstash 8 连接 Easysearch

背景

很多小伙伴都在使用 Logstash ,随着各家安全扫描、安全策略的加固,不少小伙伴已经开始使用 Logstash 8 了。在使用 Logstash 8 连接 Easysearch 的时候可能会遇到问题,比如下图。

提示连接的不是兼容版本的 Elasticsearch 。

解决方法有两种

两种方法对 Logstash 和 Logstash-oss 两种版本都适用。

一、用 INFINI Gateway 代理 Easysearch

使用此方法, Logstash 连接的是 INFINI Gateway ,由 INFINI Gateway “通过” Logstash 8 的检查。

优点是对 Easysearch 版本无要求。

默认的网关配置要稍作修改。

  1. 修改 router.rules 部分
router:
  - name: my_router
    default_flow: default_flow
    tracing_flow: logging_flow
    rules:
      - method:
          - "GET"
        pattern:
          - "/"
        flow:
          - overwrite_flow
      - method:
          - "GET"
        pattern:
          - "/_license"
        flow:
          - overwrite_license_flow
      - method:
          - "*"
        pattern:
          - "/_bulk"
          - "/{any_index}/_bulk"
        flow:
          - async_bulk_flow
  1. flow 下增加 overwrite_flow 和 overwrite_license_flow
 - name: overwrite_flow
    filter:
      - elasticsearch:
          elasticsearch: prod
          max_connection_per_node: 1000
      - set_context:
          context:
            _ctx.response.body_json.version.number: '"8.14.3"'
            _ctx.response.body_json.version.build_flavor: '"default"'
            _ctx.response.body_json.tagline: '"You Know, for Search"'
            _ctx.response.body_json.minimum_wire_compatibility_version: '"7.17.0"'
            _ctx.response.body_json.minimum_index_compatibility_version: '"7.0.0"'
      - set_response_header:
          headers:
            - X-elastic-product -> Elasticsearch
  - name: overwrite_license_flow
    filter:
      - echo:
          message: '{"license": "ok"}'
      - set_context:
          context:
            _ctx.response.code: 200
            _ctx.response.body_json.license.status: '"active"'
            _ctx.response.body_json.license.type: '"basic"'
            _ctx.response.body_json.license.issuer: '"elasticsearch"'
            _ctx.response.body_json.license.issue_date: '"2024-09-12T13:10:55.848Z"'
            _ctx.response.body_json.license.start_date_in_millis: "-1"
      - set_response_header:
          headers:
            - X-elastic-product -> Elasticsearch

记住 Logstash 要填写 INFINI Gateway 的地址和端口,并关闭自动导入模板功能。

连接成功后,如下图。

二、使用 Easysearch 1.9.0 及以上版本

Easysearch 1.9.0 已经增加了适配 Logstash8.x 的请求 header,因此使用 Easysearch 1.9.0 的小伙伴,只需打开对应的设置就可以了。

在 easysearch.yml 中,打开下面的 elastic 的兼容参数(默认已注释):

elasticsearch.api_compatibility: true
elasticsearch.api_compatibility_version: "8.9.0"

注意 Logstash 配置中关闭自动导入模板功能。

output {
  elasticsearch {
   hosts => ["http://127.0.0.1:9200"]
   index => "logstash8"
   manage_template => false
}
}

启动 Logstash 连接到 easysearch 后, Logstash 日志会输出检测到版本 8.9.0 。

最新 Easysearch 下载地址:下载

好了,还有其他问题的小伙伴,欢迎加我微信沟通。

继续阅读 »

背景

很多小伙伴都在使用 Logstash ,随着各家安全扫描、安全策略的加固,不少小伙伴已经开始使用 Logstash 8 了。在使用 Logstash 8 连接 Easysearch 的时候可能会遇到问题,比如下图。

提示连接的不是兼容版本的 Elasticsearch 。

解决方法有两种

两种方法对 Logstash 和 Logstash-oss 两种版本都适用。

一、用 INFINI Gateway 代理 Easysearch

使用此方法, Logstash 连接的是 INFINI Gateway ,由 INFINI Gateway “通过” Logstash 8 的检查。

优点是对 Easysearch 版本无要求。

默认的网关配置要稍作修改。

  1. 修改 router.rules 部分
router:
  - name: my_router
    default_flow: default_flow
    tracing_flow: logging_flow
    rules:
      - method:
          - "GET"
        pattern:
          - "/"
        flow:
          - overwrite_flow
      - method:
          - "GET"
        pattern:
          - "/_license"
        flow:
          - overwrite_license_flow
      - method:
          - "*"
        pattern:
          - "/_bulk"
          - "/{any_index}/_bulk"
        flow:
          - async_bulk_flow
  1. flow 下增加 overwrite_flow 和 overwrite_license_flow
 - name: overwrite_flow
    filter:
      - elasticsearch:
          elasticsearch: prod
          max_connection_per_node: 1000
      - set_context:
          context:
            _ctx.response.body_json.version.number: '"8.14.3"'
            _ctx.response.body_json.version.build_flavor: '"default"'
            _ctx.response.body_json.tagline: '"You Know, for Search"'
            _ctx.response.body_json.minimum_wire_compatibility_version: '"7.17.0"'
            _ctx.response.body_json.minimum_index_compatibility_version: '"7.0.0"'
      - set_response_header:
          headers:
            - X-elastic-product -> Elasticsearch
  - name: overwrite_license_flow
    filter:
      - echo:
          message: '{"license": "ok"}'
      - set_context:
          context:
            _ctx.response.code: 200
            _ctx.response.body_json.license.status: '"active"'
            _ctx.response.body_json.license.type: '"basic"'
            _ctx.response.body_json.license.issuer: '"elasticsearch"'
            _ctx.response.body_json.license.issue_date: '"2024-09-12T13:10:55.848Z"'
            _ctx.response.body_json.license.start_date_in_millis: "-1"
      - set_response_header:
          headers:
            - X-elastic-product -> Elasticsearch

记住 Logstash 要填写 INFINI Gateway 的地址和端口,并关闭自动导入模板功能。

连接成功后,如下图。

二、使用 Easysearch 1.9.0 及以上版本

Easysearch 1.9.0 已经增加了适配 Logstash8.x 的请求 header,因此使用 Easysearch 1.9.0 的小伙伴,只需打开对应的设置就可以了。

在 easysearch.yml 中,打开下面的 elastic 的兼容参数(默认已注释):

elasticsearch.api_compatibility: true
elasticsearch.api_compatibility_version: "8.9.0"

注意 Logstash 配置中关闭自动导入模板功能。

output {
  elasticsearch {
   hosts => ["http://127.0.0.1:9200"]
   index => "logstash8"
   manage_template => false
}
}

启动 Logstash 连接到 easysearch 后, Logstash 日志会输出检测到版本 8.9.0 。

最新 Easysearch 下载地址:下载

好了,还有其他问题的小伙伴,欢迎加我微信沟通。

收起阅读 »

搜索客社区日报 第1980期 (2025-01-28)

朋友们新年好啊,年夜饭吃没?

1. deepseek-r1的地址,懂得都懂
https://github.com/deepseek-ai/DeepSeek-R1

2. 用ELK对Nodejs进行日志记录(需要梯子)
https://medium.com/%40arnabgol ... 3915c

3. 搜索记录小技巧 _name(需要梯子)
https://medium.com/%40andre.lu ... 8daa0

编辑:斯蒂文
更多资讯:http://news.searchkit.cn
继续阅读 »
朋友们新年好啊,年夜饭吃没?

1. deepseek-r1的地址,懂得都懂
https://github.com/deepseek-ai/DeepSeek-R1

2. 用ELK对Nodejs进行日志记录(需要梯子)
https://medium.com/%40arnabgol ... 3915c

3. 搜索记录小技巧 _name(需要梯子)
https://medium.com/%40andre.lu ... 8daa0

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

搜索客社区日报 第1979期 (2025-01-27)

1、在 Ubuntu 22.04 上运行 Filebeat 7.10.2
https://infinilabs.cn/blog/202 ... beat/

2、如何使用 Filebeat 8 连接 Easysearch
https://infinilabs.cn/blog/202 ... arch/

3、Easysearch 集群通过 API 进行用户密码重置
https://infinilabs.cn/blog/202 ... word/

4、Easysearch 集群重置 admin 用户密码
https://infinilabs.cn/blog/202 ... word/

5、使用 Elasticsearch 导航检索增强生成图表
https://elasticstack.blog.csdn ... .5502

编辑:Muse
更多资讯:http://news.searchkit.cn
继续阅读 »
1、在 Ubuntu 22.04 上运行 Filebeat 7.10.2
https://infinilabs.cn/blog/202 ... beat/

2、如何使用 Filebeat 8 连接 Easysearch
https://infinilabs.cn/blog/202 ... arch/

3、Easysearch 集群通过 API 进行用户密码重置
https://infinilabs.cn/blog/202 ... word/

4、Easysearch 集群重置 admin 用户密码
https://infinilabs.cn/blog/202 ... word/

5、使用 Elasticsearch 导航检索增强生成图表
https://elasticstack.blog.csdn ... .5502

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

INFINI Labs 产品更新 | Easysearch 增强 Rollup 能力,Console 完善 TopN 指标等

release

INFINI Labs 产品更新发布!此次更新,Easysearch 增强 Rollup 能力,支持更多的聚合方式;Console 完善了 TopN 的指标,支持自定义视图,并内嵌视图模板;Gateway 进行了多处优化以及修复相关 Bug 等等。欢迎下载体验,探索更多可能!

INFINI Easysearch v1.10.1

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

Easysearch 本次更新如下:

功能更新

  • Rollup 增加支持聚合的种类
    • 增加支持 Filter aggregation,某些场景可以用来替代 query
    • 增加针对个别字段自定义 special_metrics 指标的配置项
    • 增加支持 Bucket sort aggregation
  • Rollup 查询 API 提供了 debug 参数,有助于调试

问题修复

  • 修复数据节点和 master 节点角色分离时,Security 索引创建失败问题

优化改进

  • Rollup 查询 增加 response 标识是否有 rollup 数据
  • Rollup response total hits 不再为 0
  • Rollup job 支持 更新操作,通过更新索引文档实现
  • rollup.hours_before 配置项只影响查询时间范围,不影响写入

关于 Rollup 具体如何使用,请查看这篇单独的博客:介绍 Easysearch 的 Rollup

INFINI Console v1.28.1

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

Console 在线体验:

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

Console 本次更新如下:

功能更新

  • 创建集群时支持配置多个主机地址,增强集群的高可用性
  • Insight Data API 支持函数格式查询,方便拓展查询功能
  • 提供 API 来 Dump 查看当前存储的 Badger Key 列表
  • Rollup 支持场景条件适配,要求 Easysearch > 1.9.2
  • TopN 内置指标- 索引指标(agent 采集模式)
  • TopN 内置视图模版
  • TopN 支持自定义数据视图

问题修复

  • 修复 Badger KV 存储内存占用过高的问题

优化改进

  • LDAP 配置支持带特殊符号“点”(.) 验证(#46)

INFINI Gateway v1.28.1

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

Gateway 本次更新如下:

功能更新

  • 支持在批量相关过滤器中使用简单的批量元数据(#59)
  • 在 Elasticsearch 过滤器中后端故障时无缝重试请求(#63)

优化改进

  • 移除 Elasticsearch 过滤器中因模式不匹配导致的不必要节点重新选择(#62)

INFINI Agent v1.28.1

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

Agent 本次更新如下:

问题修复

  • 修复一个空指针判断的问题
  • 同步更新 Framework 修复的一些已知问题

INFINI Loadgen v1.28.1

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

Loadgen 本次更新如下:

问题修复

  • 同步更新 Framework 修复的一些已知问题

INFINI Framework v1.1.1

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

Framework 本次更新如下:

功能更新

  • 为 ORM 模块新增搜索功能,支持结果项映射器(#65)
  • 新增统计 API,用于快速从 Badger DB 中查找前 N 个键(#67)
  • 主动恢复失效节点的可用性(#72)

优化改进

  • 为 HTTP 处理程序添加实用工具,支持解析布尔参数
  • 处理简化的批量元数据,从 URL 路径中解析索引(#59)
  • 改进部分加载文件的消息读取处理(#63)

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

期待反馈

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

下载地址: https://infinilabs.cn/download

邮件hello@infini.ltd

电话(+86) 400-139-9200

Discordhttps://discord.gg/4tKTMkkvVX

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

关于极限科技(INFINI Labs)

INFINI Labs

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

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

官网:https://infinilabs.cn

继续阅读 »

release

INFINI Labs 产品更新发布!此次更新,Easysearch 增强 Rollup 能力,支持更多的聚合方式;Console 完善了 TopN 的指标,支持自定义视图,并内嵌视图模板;Gateway 进行了多处优化以及修复相关 Bug 等等。欢迎下载体验,探索更多可能!

INFINI Easysearch v1.10.1

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

Easysearch 本次更新如下:

功能更新

  • Rollup 增加支持聚合的种类
    • 增加支持 Filter aggregation,某些场景可以用来替代 query
    • 增加针对个别字段自定义 special_metrics 指标的配置项
    • 增加支持 Bucket sort aggregation
  • Rollup 查询 API 提供了 debug 参数,有助于调试

问题修复

  • 修复数据节点和 master 节点角色分离时,Security 索引创建失败问题

优化改进

  • Rollup 查询 增加 response 标识是否有 rollup 数据
  • Rollup response total hits 不再为 0
  • Rollup job 支持 更新操作,通过更新索引文档实现
  • rollup.hours_before 配置项只影响查询时间范围,不影响写入

关于 Rollup 具体如何使用,请查看这篇单独的博客:介绍 Easysearch 的 Rollup

INFINI Console v1.28.1

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

Console 在线体验:

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

Console 本次更新如下:

功能更新

  • 创建集群时支持配置多个主机地址,增强集群的高可用性
  • Insight Data API 支持函数格式查询,方便拓展查询功能
  • 提供 API 来 Dump 查看当前存储的 Badger Key 列表
  • Rollup 支持场景条件适配,要求 Easysearch > 1.9.2
  • TopN 内置指标- 索引指标(agent 采集模式)
  • TopN 内置视图模版
  • TopN 支持自定义数据视图

问题修复

  • 修复 Badger KV 存储内存占用过高的问题

优化改进

  • LDAP 配置支持带特殊符号“点”(.) 验证(#46)

INFINI Gateway v1.28.1

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

Gateway 本次更新如下:

功能更新

  • 支持在批量相关过滤器中使用简单的批量元数据(#59)
  • 在 Elasticsearch 过滤器中后端故障时无缝重试请求(#63)

优化改进

  • 移除 Elasticsearch 过滤器中因模式不匹配导致的不必要节点重新选择(#62)

INFINI Agent v1.28.1

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

Agent 本次更新如下:

问题修复

  • 修复一个空指针判断的问题
  • 同步更新 Framework 修复的一些已知问题

INFINI Loadgen v1.28.1

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

Loadgen 本次更新如下:

问题修复

  • 同步更新 Framework 修复的一些已知问题

INFINI Framework v1.1.1

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

Framework 本次更新如下:

功能更新

  • 为 ORM 模块新增搜索功能,支持结果项映射器(#65)
  • 新增统计 API,用于快速从 Badger DB 中查找前 N 个键(#67)
  • 主动恢复失效节点的可用性(#72)

优化改进

  • 为 HTTP 处理程序添加实用工具,支持解析布尔参数
  • 处理简化的批量元数据,从 URL 路径中解析索引(#59)
  • 改进部分加载文件的消息读取处理(#63)

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

期待反馈

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

下载地址: https://infinilabs.cn/download

邮件hello@infini.ltd

电话(+86) 400-139-9200

Discordhttps://discord.gg/4tKTMkkvVX

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

关于极限科技(INFINI Labs)

INFINI Labs

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

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

官网:https://infinilabs.cn

收起阅读 »

活动回顾 - 第6期 搜索客 Meetup 线上直播活动圆满结束,附 PPT 下载和视频回放

2025 年 01 月 17 日,由搜索客社区和极限科技(INFINI Labs)联合举办的第 6 期线上 Meetup 技术交流直播活动圆满结束。本期 Meetup 直播活动吸引了超过 500+ 人次的技术爱好者观看参与,主要讨论了 Easysearch、Easysearch 搜索引擎性能优化和系统稳定性的相关问题,包括读请求限速、写请求限速、索引管控等。

PPT首页.png

本期 Meetup 活动主题

本期 Meetup 活动由 极限科技(INFINI Labs)高级解决方案架构师 杨帆老师 为大家带来了主题为 《Easysearch 请求限速漫谈》 精彩分享。和大家一起畅谈了为什么要限速,限速的需求来源,以及读写限速的实现方式等。

以下为摘取 PPT 部分内容截图:

1.jpg

2.jpg

3.jpg

4.jpg

活动中杨老师和大家保持互动问答,在线观众积极参与。同时,在整个直播过程中,主持人进行了多轮激动人心的抽奖活动,为参会小伙伴带来了额外的惊喜。

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

本期 Meetup PPT 下载

本期 PPT 下载的链接:https://searchkit.cn/slides/329

本期 Meetup 视频回放

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

Meetup 活动讲师招募

讲师招募

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

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

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

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

关于 搜索客(SearchKit)社区

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

关于极限科技(INFINI Labs)

INFINI Labs

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

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

官网:https://infinilabs.cn

继续阅读 »

2025 年 01 月 17 日,由搜索客社区和极限科技(INFINI Labs)联合举办的第 6 期线上 Meetup 技术交流直播活动圆满结束。本期 Meetup 直播活动吸引了超过 500+ 人次的技术爱好者观看参与,主要讨论了 Easysearch、Easysearch 搜索引擎性能优化和系统稳定性的相关问题,包括读请求限速、写请求限速、索引管控等。

PPT首页.png

本期 Meetup 活动主题

本期 Meetup 活动由 极限科技(INFINI Labs)高级解决方案架构师 杨帆老师 为大家带来了主题为 《Easysearch 请求限速漫谈》 精彩分享。和大家一起畅谈了为什么要限速,限速的需求来源,以及读写限速的实现方式等。

以下为摘取 PPT 部分内容截图:

1.jpg

2.jpg

3.jpg

4.jpg

活动中杨老师和大家保持互动问答,在线观众积极参与。同时,在整个直播过程中,主持人进行了多轮激动人心的抽奖活动,为参会小伙伴带来了额外的惊喜。

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

本期 Meetup PPT 下载

本期 PPT 下载的链接:https://searchkit.cn/slides/329

本期 Meetup 视频回放

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

Meetup 活动讲师招募

讲师招募

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

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

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

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

关于 搜索客(SearchKit)社区

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

关于极限科技(INFINI Labs)

INFINI Labs

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

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

官网:https://infinilabs.cn

收起阅读 »

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

1、Elasticsearch VS Easysearch 性能测试
https://searchkit.cn/article/15360

2、Elasticsearch 性能测试工具全解析
https://mp.weixin.qq.com/s/YnIVpVizzuuIZASZik3DgA

3、Elasticsearch 性能测试工具 Loadgen 之 001——部署及应用详解
https://mp.weixin.qq.com/s/q3XM6AeMQrTEcWgputABRw

4、ES 实战篇 - MySQL 与 Elasticsearch 的一致性问题
https://mp.weixin.qq.com/s/7e6zZ-0ArP23m3cbtmI_oA

5、如何使用 Filebeat 8 连接 Easysearch
https://infinilabs.cn/blog/202 ... arch/


编辑:Fred
更多资讯:http://news.searchkit.cn
继续阅读 »
1、Elasticsearch VS Easysearch 性能测试
https://searchkit.cn/article/15360

2、Elasticsearch 性能测试工具全解析
https://mp.weixin.qq.com/s/YnIVpVizzuuIZASZik3DgA

3、Elasticsearch 性能测试工具 Loadgen 之 001——部署及应用详解
https://mp.weixin.qq.com/s/q3XM6AeMQrTEcWgputABRw

4、ES 实战篇 - MySQL 与 Elasticsearch 的一致性问题
https://mp.weixin.qq.com/s/7e6zZ-0ArP23m3cbtmI_oA

5、如何使用 Filebeat 8 连接 Easysearch
https://infinilabs.cn/blog/202 ... arch/


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

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

1.AI编程双城记上:万字长文剖析下一代技术革命与落地挑战
https://mp.weixin.qq.com/s/1hPg6KZwHQgUOLESdgdIPw
2.数据库即架构
https://mp.weixin.qq.com/s/8NS15_fkuR_gSLG50MNtMQ
3.中国软件重塑的关键一年:这 11 大领域迎来了自己的“ChatGPT时刻”
https://mp.weixin.qq.com/s/ixPvOtN11YPKjKJ2xTPb5A

编辑:Se7en
更多资讯:http://news.searchkit.cn
继续阅读 »
1.AI编程双城记上:万字长文剖析下一代技术革命与落地挑战
https://mp.weixin.qq.com/s/1hPg6KZwHQgUOLESdgdIPw
2.数据库即架构
https://mp.weixin.qq.com/s/8NS15_fkuR_gSLG50MNtMQ
3.中国软件重塑的关键一年:这 11 大领域迎来了自己的“ChatGPT时刻”
https://mp.weixin.qq.com/s/ixPvOtN11YPKjKJ2xTPb5A

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

​【搜索客社区日报】第1976期 (2025-01-22)

1.在 HNSW 中实现“提前终止”以加速近似 KNN 搜索
https://mp.weixin.qq.com/s/LNMQ-xvIigeNQZb8RPWkcg

2.重生之我们在ES顶端相遇第 13 章 - 听说你深度分页时,把ES 搞垮了?
https://mp.weixin.qq.com/s/zT9cBSACGPPJbmsvpJawIQ

3.ES 源码篇 - Elasticsearch 启动与插件加载机制解析
https://mp.weixin.qq.com/s/rziIY44XZswnBW8F0v8Lcg

4.源码篇 - 构建你的 Elasticsearch 8 本地调试环境:步骤与技巧
https://mp.weixin.qq.com/s/goHyId6k6ze9ljB9RbxBDg


编辑:kin122 
更多资讯:http://news.searchkit.cn
继续阅读 »
1.在 HNSW 中实现“提前终止”以加速近似 KNN 搜索
https://mp.weixin.qq.com/s/LNMQ-xvIigeNQZb8RPWkcg

2.重生之我们在ES顶端相遇第 13 章 - 听说你深度分页时,把ES 搞垮了?
https://mp.weixin.qq.com/s/zT9cBSACGPPJbmsvpJawIQ

3.ES 源码篇 - Elasticsearch 启动与插件加载机制解析
https://mp.weixin.qq.com/s/rziIY44XZswnBW8F0v8Lcg

4.源码篇 - 构建你的 Elasticsearch 8 本地调试环境:步骤与技巧
https://mp.weixin.qq.com/s/goHyId6k6ze9ljB9RbxBDg


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

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

 1. 用ES配合docker做个股票监控系统咋样(需要梯子)
https://medium.com/%40rahul.fi ... 3477b
2. 如何保持大ES集群点健康性(需要梯子)
https://medium.com/trendyol-te ... adc06
3. 用winston把日志导入elk(需要梯子)
https://medium.com/%40aamirali ... fc5b2

编辑:斯蒂文
更多资讯:http://news.searchkit.cn
 
继续阅读 »
 1. 用ES配合docker做个股票监控系统咋样(需要梯子)
https://medium.com/%40rahul.fi ... 3477b
2. 如何保持大ES集群点健康性(需要梯子)
https://medium.com/trendyol-te ... adc06
3. 用winston把日志导入elk(需要梯子)
https://medium.com/%40aamirali ... fc5b2

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