开源新锐:SQL玩转搜索引擎?Manticore颠覆你的认知

关注我的公众号:【编程朝花夕拾】,可获取首发内容。

01 引言

在数据爆炸式增长的时代,高效、实时的搜索能力已成为应用的标配。Elasticsearch、Solr 虽占据主流,但其资源消耗和复杂性常令人却步。

Manticore Search 作为一款轻量、高性能且兼容 SQL 的开源实时搜索引擎,正迅速成为许多场景下的理想替代方案。

02 简介

Manticore Search 是一款高性能、多存储数据库,专为搜索和分析而构建,提供闪电般快速的全文搜索、实时索引以及矢量搜索和列式存储等高级功能,以实现高效的数据分析。它旨在处理小型和大型数据集,为现代应用程序提供无缝的可扩展性和强大的洞察力。

作为一个开源数据库,Manticore Search 创建于 2017 年,作为 Sphinx 搜索引擎的延续。我们的开发团队采用了 Sphinx 的所有最佳功能,并显着改进了其功能,在此过程中修复了数百个错误。Manticore Search 是一个现代、快速、轻量级的数据库,具有卓越的全文搜索功能,建立在其前身的几乎完全重写的基础上。

官网地址:manticoresearch.com/

Github地址:github.com/manticoreso...

核心优势:

  • 实时性: 支持即时插入、更新、删除文档,查询立即可见。
  • 高性能: 优化的 C++ 内核,查询处理效率极高,尤其在简单过滤和聚合场景下表现优异。
  • SQL 优先: 原生支持标准 SQL 语法 (SELECT, INSERT, UPDATE, DELETE, SHOW 等),极大降低学习与集成成本,尤其对熟悉关系型数据库的开发者友好。
  • 分布式: 内置分布式搜索能力,支持数据分片与复制,易于横向扩展。
  • 轻量高效: 资源(CPU、内存)消耗显著低于同类产品,部署运维更简单。
  • 丰富特性: 支持全文搜索、结构化数据查询、聚合、高亮、Faceting、地理位置查询、列式存储等。
  • 开源免费: Apache 2.0 许可,核心功能完全免费且开放。

03 部署

Manticore Search的部署提供多种部署方式:

  • Ubuntu
  • Debian
  • Centos
  • Windows
  • MacOS
  • Docker

详细部署地址:manual.manticoresearch.com/Quick_start...

3.1 安装

我们选用最简单的Docker部署。

sh 复制代码
# 拉取镜像
docker pull manticoresearch/manticore
# 启动镜像
docker run --name manticore -p9306:9306 -p9308:9308 -p9312:9312 -d manticoresearch/manticore

Manticore Search就部署好了。是不是非常简单。

其中每个端口代表不同的功能。

  • 9306:Mysql客户端的端口,也就是可以用Mysql客户端直接连接
  • 9308:这个是http/https的连接的端口,主要由于第三方客户端的连接,如Java。
  • 9312: 集群节点的端口

小编试了几款客户端:navicat、chat2db、dbeaver

其中navicat连上无法打开,chat2db可以执行查询语句,但不是不能正常显示表的名称以及无法使用增删改,dbeaver可以正常展示表名以及查询语句,但是无法执行增删改语句。

3.2 直连Mysql客户端

因为其对SQL的支持,镜像中提供了临时的Mysql客户端,在里面执行语句不会持久化,随着镜像的关闭而关闭。我们可以直观的看看。

sh 复制代码
docker run --name manticore --rm -d manticoresearch/manticore && until docker logs manticore 2>&1 | grep -q "accepting connections"; do sleep 1; done && docker exec -it manticore mysql && docker stop manticore

启动之后直接进入Mysql客户端:

我们按照Github提供的案例,建表并插入语句以及查询测试:

所以这种方式只能用于测试。

04 Java调用

Manticore Search 的 SQL 语法是其一大亮点。并提供了多种客户端,我们以Java为例:

官方地址:github.com/manticoreso...

4.1 Maven依赖

xml 复制代码
<dependency>
  <groupId>com.manticoresearch</groupId>
  <artifactId>manticoresearch</artifactId>
  <version>8.0.0</version>
  <scope>compile</scope>
</dependency>

不同的版本提供的查询方式可能稍有差异,测试的时候要注意。

4.2 最佳实践

最佳实践的SQL查询主要的API:com.manticoresearch.client.api.UtilsApi

java 复制代码
@Test
    void test02() throws ApiException {
        ApiClient apiClient = Configuration.getDefaultApiClient();
        apiClient.setBasePath("http://localhost:9308");

        UtilsApi utilsApi = new UtilsApi(apiClient);

        String sql = """
                select * from movies where year=1954
                """;

        SqlResponse response = utilsApi.sql(sql, true);

        System.out.println(response);
    }

我们可以直接使用Github提供的建表、插入语句。我们这里演示一下查询语句:

查询结果

我们看到查到了两条数据。

4.3 全文索引

全文索引需要使用match关键字,而且还支持来连表查询。

从测试结果可以直接验证。

Manticore Search被视为轻量级的ES,甚至是其的替代方案。其语法也有和ES类似的API。

java 复制代码
@Test
void test01() throws ApiException {
    ApiClient apiClient = Configuration.getDefaultApiClient();
    apiClient.setBasePath("http://localhost:9308");

    SearchQuery searchQuery = new SearchQuery();
    searchQuery.queryString("Samurai");

    SearchApi searchApi = new SearchApi(apiClient);
    SearchRequest searchRequest = new SearchRequest();
    searchRequest.setTable("movies");
    searchRequest.setQuery(searchQuery);
    SearchResponse search = searchApi.search(searchRequest);
    System.out.println(search.getHits());
}

详细语法可以查看:manual.manticoresearch.com/Searching/F...

05 小结

作为ES的竞品,少不了和ES的对比,官方也给了详细的对比结果,具体地址:manticoresearch.com/blog/mantic...

Manticore Search赶快用起来吧!

相关推荐
Q26433650238 小时前
【有源码】基于SpringBoot+Vue的博物馆展览与服务一体化平台-java博物馆数字化展品展示与交互平台设计
java·vue.js·spring boot·spring·毕业设计·javaweb·课程设计
guo_wen_qiang9 小时前
项目使用sentinel遇到的问题
java·sentinel
CarIise9 小时前
IDEA与Maven基础课堂笔记
java·intellij-idea·caffe
小溪学编程9 小时前
C语言篇:枚举类型
java·c语言·前端
云和数据.ChenGuang9 小时前
JAVAEE AI工程师路线图
java·人工智能·java-ee·fastapi·springai·langchain4j
2601_962885729 小时前
如何用 Python 统计 A 股连续涨停(几连板)?
java·linux·python
大圣编蚕9 小时前
Spring AOP 失效排查:从原理到实战的完整指南
java·后端·spring
AINative软件工程9 小时前
LLM 多租户 Prompt Isolation 工程实践:为 100 个租户定制 Prompt,但别让它们互相污染
后端·llm
EatFan9 小时前
MCP 从概念到落地:Java(Spring AI Alibaba)与 .NET 双栈接入实操对比
java·人工智能·后端·spring·.net·java后端·mcp
专业程序开发源9 小时前
springboot全民健身和饮食健康管理系统29158-计算机课程设计、毕业设计
java·spring boot·后端·python·django·php·课程设计