Manticore Search 是一个专为搜索而设计的多存储数据库,具备强大的全文搜索功能。
作为一个开源数据库(可在 GitHub 上获得),Manticore Search 于 2017 年创建,作为 Sphinx 搜索引擎的延续。我们的开发团队采纳了 Sphinx 的所有最佳特性,并显著改进了其功能,在此过程中修复了数百个错误(详细更改请参见我们的更新日志)。通过几乎完全重写的代码,Manticore Search 现在是一个现代的、快速的、轻量级的数据库,具有完整的功能和卓越的全文搜索能力。
Manticore Search 支持将由您的机器学习模型生成的嵌入添加到每个文档中,然后对它们进行最近邻搜索。这使您能够构建类似搜索、推荐、语义搜索以及基于 NLP 算法的相关性排名等功能,包括图像、视频和声音搜索。
Manticore Search 利用智能查询并行化来降低响应时间,并在需要时充分利用所有 CPU 核心。
基于成本的查询优化器使用关于索引数据的统计数据来评估给定查询的不同执行计划的相对成本。这允许优化器确定检索所需结果的最有效计划,考虑到索引数据的大小、查询的复杂性和可用资源等因素。
Manticore 提供了行式和列式存储选项,以适应各种大小的数据集。传统且默认的行式存储选项适用于所有大小的数据集 - 小型、中型和大型,而列式存储选项则通过 Manticore Columnar Library 提供,适用于更大的数据集。这两种存储选项的关键区别在于,行式存储要求所有属性(不包括全文字段)保留在 RAM 中以获得最佳性能,而列式存储则不需要,从而提供更低的 RAM 消耗,但可能会有稍微慢一些的性能(如 https://db-benchmarks.com/ 上的统计数据所示)。
Manticore Columnar Library 使用分段几何模型索引,利用已学习的索引键和它们在内存中的位置之间的映射。这种映射的简洁性,加上特殊的递归构造算法,使得 PGM-index 是一种在空间上比传统索引高几个数量级的数据结构,同时仍然提供最佳的查询和更新时间性能。所有数值字段的二级索引默认开启。
Manticore 的本地语法是 SQL,它支持通过 HTTP 和 MySQL 协议进行 SQL 操作,允许通过任何编程语言中的流行 MySQL 客户端进行连接。
对于更程序化的数据和模式管理方法,Manticore 提供了与 Elasticsearch 类似的 HTTP JSON 协议。
您可以执行与 Elasticsearch 兼容的插入和替换 JSON 查询,这使得可以使用 Manticore 与 Logstash(版本 < 7.13)、Filebeat 以及 Beats 家族中的其他工具一起使用。
可以轻松地在线或通过配置文件创建、更新和删除表。
Manticore Search 守护进程是用 C++ 开发的,提供快速启动时间和高效的内存利用。低级优化的利用进一步提高了性能。另一个关键组件,称为 Manticore Buddy,是用 PHP 编写的,用于不需要极快速响应时间或极高处理能力的高级功能。尽管对 C++ 代码的贡献可能具有挑战性,但使用 Manticore Buddy 添加新的 SQL/JSON 命令应该是一个简单的过程。
新添加或更新的文档可以立即读取。
我们提供免费的互动课程,让学习变得轻松。
虽然 Manticore 并不完全符合 ACID 标准,但它支持隔离事务进行原子更改,并提供二进制日志记录以安全写入。
数据可以跨服务器和数据中心分布,任何 Manticore Search 节点都可以充当负载均衡器和数据节点。Manticore 使用 Galera 库实现虚拟同步的多主复制,确保所有节点之间的数据一致性,防止数据丢失,并提供卓越的复制性能。
Manticore 配备了外部工具 manticore-backup 和 BACKUP SQL 命令,以简化备份和恢复数据的过程。或者,您可以使用 mysqldump 进行逻辑备份。
indexer
工具和 Manticore 的全面配置语法使得从 MySQL、PostgreSQL、ODBC 兼容数据库、XML 和 CSV 等源同步数据变得容易。
您可以使用 FEDERATED 引擎或通过 ProxySQL 将 Manticore Search 与 MySQL/MariaDB 服务器集成。
您可以使用 Apache Superset 和 Grafana 可视化存储在 Manticore 中的数据。可以使用各种 MySQL 工具(如 HeidiSQL 和 DBForge)以交互方式开发 Manticore 查询。
Manticore 提供了一种特殊的表类型,“percolate” 表,允许您搜索查询而不是数据,使其成为过滤全文数据流的高效工具。只需将查询存储在表中,通过向 Manticore Search 发送每批文档来处理您的数据流,然后只接收与您存储的查询匹配的结果。
Manticore 有多种用例,包括:
数据流过滤
手册的安排反映了您可能使用 Manticore 的最有可能的方式:
手册中的关键部分在菜单中用 1️⃣、2️⃣、3️⃣ 等标记,以方便您的使用,因为它们的相应功能最常用。如果您是 Manticore 的新手,我们强烈建议您不要跳过它们。
如果您想快速了解 Manticore 的一般工作原理,⚡ 快速入门指南是一个很好的起点。
每个查询示例的右上角都有一个小图标 📋:
您可以使用它将示例复制到剪贴板。如果查询是 HTTP 请求,它将作为 CURL 命令复制。如果您按 ⚙️,可以配置主机/端口。
我们热爱搜索,我们尽了最大努力使这本手册中的搜索变得尽可能方便。当然,它是由 Manticore Search 支持的。除了首先需要打开手册才能使用搜索栏之外,还有一种非常简单的方法可以找到东西,那就是打开 mnt.cr/your-search-keyword:
关于 Manticore Search 有几件事你需要了解,这可以帮助你遵循使用它的最佳实践。
Manticore Search 以两种模式工作:
CREATE
/ALTER
/DROP TABLE
及其在非 SQL 客户端中的等效项在线管理您的数据模式您不能将这两种模式结合起来,需要通过在配置文件中指定 data_dir 来决定您想要遵循哪一种模式(这是默认行为)。如果您不确定,我们的建议是遵循 RT 模式,因为即使您需要一个普通表,您也可以使用单独的普通表配置构建它,然后导入到您的主 Manticore 实例中。
实时表可以在 RT 和普通模式下使用。在 RT 模式下,实时表是用 CREATE TABLE
命令定义的,而在普通模式下,它是在配置文件中定义的。普通(离线)表只支持普通模式。普通模式下不能创建普通表,但是在普通模式下创建的现有普通表可以转换为实时表并导入到 RT 模式。
Manticore 提供了多种管理和接口来管理和数据模式,但两个主要的是: