更新日志

版本 15.1.0

发布:2025年12月7日

推荐库

  • 推荐的 MCL 版本:9.0.0
  • 推荐的 Buddy 版本:3.40.2

如果您遵循官方安装指南,则无需担心此问题。

重大变更

  • ⚠️ v15.0.0 PR #4003 更新了 MCL 要求至 9.0.0,带来了未压缩的浮点向量存储、KNN 向量的块大小更改以及非缓冲读取。此更新更改了数据格式。旧版本的 MCL 无法读取,但新版本仍可无问题读取您现有的列式表。

新功能和改进

  • 🆕 v15.1.0 PR #3990 通过将总时间拆分为更清晰的部分,改进了磁盘块刷新日志记录。
  • 🆕 v14.7.0 Issue #3860 更新了 Buddy 要求至 3.40.1,改进了自动补全:将归一化的二元分隔符字符转换为空格,过滤掉重复或格式错误的建议组合以提升建议质量。还修复了 Kafka 视图中的无效 JSON 错误,以及自动补全中排序组合在分数映射缺少某些键时不再抛出错误。
  • 🆕 v14.6.0 Issue #615 更新了 Manticore Buddy 要求至版本 3.39.1,修复了 KNN 插件中的无效 JSON 错误,并允许 Buddy 处理程序覆盖 HTTP Content-Type,使 /metrics 现在返回 Prometheus 文本格式(text/plain; version=0.0.4)而非 JSON,修复了抓取失败问题。
  • 🆕 v14.4.0 PR #3942 更新了 Manticore Buddy 要求至 3.38.0,过滤掉零文档建议,改进了 Ds\Map 的字符串键处理,将 Buddy 中的内存使用报告格式从 KB 改为字节以提高精度,并提升了性能、稳定性和可维护性。
  • 🆕 v14.5.0 Issue #3329 在记录查询请求的 JSON 负载时,修剪多余的空白和换行符——跳过前后空格以避免记录格式错误的 JSON。
  • 🆕 v14.3.0 PR #3932 改进了对 LOCK TABLES / UNLOCK TABLES 的处理:写锁现在返回警告而非错误,读锁在 SHOW LOCKS 中正确显示,整体锁逻辑表现一致。
  • 🆕 v14.2.0 Issue #3891 增加了对 JOIN ON 子句中任意过滤表达式的支持(不仅限于等值比较),支持如 ... ON t1.id = t2.t1_id AND t2.value = 5 的查询。

Bug 修复

  • 🪲 v15.0.6 Issue #3601 修复了一个回归问题:使用自定义配置路径安装时,原生 Windows 服务无法启动。
  • 🪲 v15.0.5 Issue #3864 修复了基于 SQL 的源中“连接字段”的处理,使迭代连接命中时正确设置“结束标记”。
  • 🪲 v15.0.4 Issue #4004 修复了一个回归问题:守护进程的 HTTP /sql 响应错误地使用了 Content-Type: text/html 头,而非 application/json
  • 🪲 v15.0.3 Issue #2727 修复了使用 JSON 到属性映射生成的属性进行 GROUP BY / FACET 分组时失败的问题。
  • 🪲 v15.0.2 Issue #3962 更新了 Buddy 要求至 3.40.2,新增了 /sql 端点的模糊搜索支持,并包含其他模糊搜索修复。
  • 🪲 v15.0.1 PR #3922 更新了支持 Logstash 9.2 的文档和测试。
  • 🪲 v14.7.6 PR #4002 修复了 KNN 过采样行为:当不请求重评分时不再计算重评分的 KNN 距离,并将浮点向量访问提示传递到列式存储层。
  • 🪲 v14.7.5 PR #3999 修复了“test_298”模型以解决失败的 KNN 相关测试。
  • 🪲 v14.7.4 Issue #3977 Windows 上的测试有时会生成 .mdmp 崩溃转储 — 已修复,"ubertests" 完成后不再留下 minidumps。
  • 🪲 v14.7.3 Issue #3832 修复了通过 /cli_json 发送包含分号(例如组合 SQL 语句)的多查询请求失败的错误 — 处理前不再将分号替换为空字符。
  • 🪲 v14.7.2 Issue #1613 记录了用于计算短语/邻近/NEAR 操作符排名因素的内部 32 位掩码,以及它如何导致超过第 31 个关键字的词项计数不足。
  • 🪲 v14.7.1 PR #3992 修复了通过代理处理的分布式表的 HTTP UPDATE 和 DELETE 请求缺失错误消息的问题,客户端现在在操作失败时能正确接收错误。
  • 🪲 v14.6.4 Issue #3478 增强了更新验证,检查更新的属性是否与全文字段冲突;如果目标是全文字段,更新将被拒绝。
  • 🪲 v14.6.3 Issue #2352 修复了使用带有 persistent_connections_limit 的分布式表时的内部错误。
  • 🪲 v14.6.2 Issue #3757 修复了表状态计数器误标为 "_sec"(例如 query_time_1min)但实际上报告的是毫秒而非秒的错误。
  • 🪲 v14.6.1 Issue #3979 修复了 SHOW INDEX <name> STATUS 搜索时间统计(search_statsms*)与查询日志计算值不匹配的问题;报告的时间现在反映真实的日志查询时间。
  • 🪲 v14.5.8 Issue #3517 更新了 HTTP 头处理,使 Buddy 集成可以定义或覆盖头部,而不总是强制使用 application/json
  • 🪲 v14.5.7 修正了测试 226 以强制稳定的结果顺序,并修正了 GTest 模型中 JSON 混合数组的处理。
  • 🪲 v14.5.6 通过修正 binlog.cpp 中的类型不匹配,修复了 Windows 构建,确保 DoSaveMeta() 现在能正确编译于 Windows 平台。
  • 🪲 v14.5.5 Issue #805 Issue #807 Issue #3924 修复了 JSON 属性分面中的不一致行为:在 FACET 子句中为 JSON 数组设置别名现在与直接对数组分面行为一致。
  • 🪲 v14.5.4 Issue #3927 通过跳过空 HNSW 索引的搜索,修复了 KNN 向量搜索中的崩溃。
  • 🪲 v14.5.2 Issue #3669 修复了 MATCH() 解析,空组如 () 不再触发错误(例如 camera() 查询现在能正确工作)。
  • 🪲 v14.5.1 PR #3961 更新了 mysqldump 复制模式的备份文档:说明了转储复制表时使用 --skip-lock-tables,并修复了多个损坏的手册链接。
  • 🪲 v14.3.2 Issue #2772 修复了通过 MySQL 客户端 9 执行某些命令时,查询日志中出现 "unexpected $undefined near '$$'" 错误的 bug。
  • 🪲 v14.3.1 PR #3934 更新了 Manticore Buddy 要求从 3.37.0 到 3.37.2,移除了多余的 LOCK/UNLOCK TABLES 检查(现由守护进程处理),并修复了自动补全解析,使带转义引号(如 \"\')的查询能正确处理而非失败。
  • 🪲 v14.2.1 Issue #3602 修复了在 KNN+MATCH 查询中使用自定义排序表达式 knn_dist() 时的崩溃;此类查询现在返回明确错误而非崩溃。
  • 🪲 v14.1.1 文档:修正了小的翻译问题。

版本 14.1.0

发布:2025年11月7日

❤️ 我们衷心感谢 @ricardopintottrdataPR #3792PR #3828 中的工作——解决了关于 HAVING 总计数和 filter with empty name 错误的问题——以及感谢 @jdelStrother 通过 PR #3819 的贡献,改进了在没有 Jieba 支持时对 ParseCJKSegmentation 的处理。

你们的努力使项目更加强大——非常感谢!

推荐的库

  • 推荐的 MCL 版本:8.1.0
  • 推荐的 Buddy 版本:3.37.0

如果你遵循 官方安装指南,则无需担心此问题。

⚠️ 重要

版本 v14.0.0 更新了复制协议。如果你正在运行复制集群,需要:

  • 首先,干净地停止所有节点
  • 然后,使用 Linux 下的工具 manticore_new_cluster,以 --new-cluster 参数启动最后停止的节点。
  • 详细信息请阅读关于 重启集群 的内容。

新功能和改进

Bug 修复

版本 13.13.0

发布于:2025年10月7日

推荐库

  • 推荐的 MCL 版本:8.1.0
  • 推荐的 Buddy 版本:3.35.1

如果您遵循官方安装指南,则无需担心此问题。

⚠️ 重要提示

由于配置文件已更新,在 Linux 升级过程中您可能会看到一个警告,询问是否保留您当前的版本或使用软件包中的新版本。如果您有自定义(非默认)配置,建议保留您的版本,并将 pid_file 路径更新为 /run/manticore/searchd.pid。不过,即使不更改路径,系统仍应正常工作。

新功能和改进

Bug 修复

  • 🪲 v13.11.8 Issue #3791 修复了检查和调用已触发定时器之间的竞态条件。
  • 🪲 v13.11.7 Issue #1045 通过将配置中的过时路径 /var/run/manticore 替换为正确的 /run/manticore,修复了 RHEL 8 在 systemd 更新期间的 systemctl 警告。由于配置文件已更新,升级时可能会看到警告,询问是否保留您当前的版本或使用软件包中的新版本。如果您有自定义(非默认)配置,建议保留您的版本,并将 pid_file 路径更新为 /run/manticore/searchd.pid
  • 🪲 v13.11.6 PR #3766 添加了对 MCL 版本 8.0.6 的支持。
  • 🪲 v13.11.5 PR #3767 改进了中文文档翻译并更新了子模块。
  • 🪲 v13.11.4 PR #3765 修复了别名连接属性的处理。
  • 🪲 v13.11.3 PR #3763 修复了在字符串属性的批量连接中可能发生的崩溃,并解决了过滤器有时在 LEFT JOIN 中不起作用的问题。
  • 🪲 v13.11.2 Issue #3065 修复了在启用 index_field_lengths 的列式表中插入数据时的崩溃。
  • 🪲 v13.11.1 Issue #3751 修复了启用嵌入时删除文档导致的崩溃。

版本 13.11.1

发布于:2025年9月13日

Bug 修复

版本 13.11.0

发布于:2025年9月13日

此次发布的主要亮点是自动嵌入——一项使语义搜索像SQL一样简单的新功能。 无需外部服务或复杂的管道:只需插入文本并使用自然语言进行搜索。

自动嵌入提供的功能

  • 直接从文本自动生成嵌入
  • 理解语义的自然语言查询,而不仅仅是关键词
  • 支持多种模型(OpenAI、Hugging Face、Voyage、Jina)
  • 与SQL和JSON API的无缝集成

推荐的库

  • 推荐的 MCL 版本:8.0.3
  • 推荐的 Buddy 版本:3.35.1

如果您遵循官方安装指南,则无需担心这些。

推荐的 MCL 版本:8.0.1 推荐的 Buddy 版本:3.34.2

新功能和改进

  • 🆕 v13.11.0 PR #3746 在JSON查询中添加了“query”支持,用于嵌入生成。
  • 🆕 v13.10.0 Issue #3709 manticore-server RPM包不再拥有/run目录。
  • 🆕 v13.9.0 PR #3716 在配置中添加了对boolean_simplify的支持。
  • 🆕 v13.8.0 Issue #3253 安装了sysctl配置以增加vm.max_map_count,适用于大型数据集。
  • 🆕 v13.7.0 PR #3681 添加了对alter table <table> modify column <column> api_key=<key>的支持。

Bug修复

  • 🪲 v13.10.5 PR #3737 scroll选项现在能正确返回所有具有大64位ID的文档。
  • 🪲 v13.10.4 PR #3736 修复了使用带过滤树的KNN时的崩溃问题。
  • 🪲 v13.10.3 Issue #3520 /sql端点不再允许SHOW VERSION命令。
  • 🪲 v13.10.2 PR #3637 更新了Windows安装脚本。
  • 🪲 v13.10.1 修复了Linux上的本地时区检测。
  • 🪲 v13.9.2 PR #3726 列式模式下重复ID现在正确返回错误。
  • 🪲 v13.9.1 PR #3333 手册现已自动翻译。
  • 🪲 v13.8.6 PR #3715 修复了当批处理中所有文档被跳过时的嵌入生成问题。
  • 🪲 v13.8.5 PR #3711 添加了Jina和Voyage嵌入模型,以及其他自动嵌入相关的更改。
  • 🪲 v13.8.4 PR #3710 修复了多面查询连接时的崩溃。
  • 🪲 v13.8.3 修复了在_bulk端点多语句事务中删除/更新提交未计为错误的问题。
  • 🪲 v13.8.2 PR #3705 修复了按非列式字符串属性连接时的崩溃,并改进了错误报告。
  • 🪲 v13.8.1 PR #3704 修复了未指定模型时查询嵌入的崩溃;添加了嵌入字符串到主代理通信;添加了测试。
  • 🪲 v13.7.2 PR #Buddy#589 移除了模糊搜索的默认IDF技巧。
  • 🪲 v13.7.1 Issue #3454 修复了大64位ID的滚动解码错误。
  • 🪲 v13.6.9 Issue #3674 修复了JDBC+MySQL驱动/连接池在transaction_read_only设置下的问题。
  • 🪲 v13.6.8 PR #3676 修复了嵌入模型返回空结果集时的崩溃问题。

版本 13.6.7

发布:2025年8月8日

推荐的 MCL 版本:8.0.1 推荐的 Buddy 版本:3.34.2

如果您遵循官方安装指南,则无需担心此问题。

新功能和改进

  • 🆕 v13.6.0 Issue #2226 支持在 PHRASE、PROXIMITY 和 QUORUM 操作符中显式使用 '|'(或)。
  • 🆕 v13.5.0 PR #3591 查询中自动生成嵌入(进行中,尚未准备好用于生产环境)。
  • 🆕 v13.4.0 PR #3585 修正逻辑,优先使用 buddy_path 配置中的 buddy 线程数(如果设置),而不是使用守护进程的值。
  • 🆕 v13.3.0 PR #3577 支持与本地分布式表的连接。
  • 🆕 #3647 添加对 Debian 13 “Trixie”的支持。

Bug 修复

  • 🪲 v13.6.7 Issue #3524 修复了在行存储中保存生成的嵌入时的问题。
  • 🪲 v13.6.6 Issue #3563 修复了 Sequel Ace 和其他集成因“未知 sysvar”错误而失败的问题。
  • 🪲 v13.6.5 Issue #3467 修复了 DBeaver 和其他集成因“未知 sysvar”错误而失败的问题。
  • 🪲 v13.6.4 Issue #3524 修复了多字段嵌入拼接的问题;同时修复了查询中嵌入生成的问题。
  • 🪲 v13.6.3 Issue #3641 修复了 13.6.0 版本中短语丢失除第一个外所有括号内关键字的错误。
  • 🪲 v13.6.2 修复了 transform_phrase 中的内存泄漏。
  • 🪲 v13.6.1 修复了 13.6.0 版本中的内存泄漏。
  • 🪲 v13.5.2 Issue #3651 修复了与全文搜索模糊测试相关的更多问题。
  • 🪲 v13.5.1 Issue #3560 修复了 OPTIMIZE TABLE 在使用 KNN 数据时可能无限挂起的情况。
  • 🪲 v13.4.2 Issue #2544 修复了添加 float_vector 列可能导致索引损坏的问题。
  • 🪲 v13.4.1 Issue #3651 添加了全文解析的模糊测试,并修复了测试中发现的多个问题。
  • 🪲 v13.3.1 Issue #3583 修复了使用复杂布尔过滤器和高亮显示时的崩溃。
  • 🪲 v13.2.7 Issue #3481 修复了 HTTP 更新、分布式表和错误复制集群同时使用时的崩溃。
  • 🪲 v13.2.6 PR #3567 更新了 manticore-backup 依赖到版本 1.9.6。
  • 🪲 v13.2.5 PR #3565 修复了 CI 设置以提升 Docker 镜像兼容性。
  • 🪲 v13.2.4 修复了长词元的处理。一些特殊词元(如正则表达式模式)可能生成过长的词,因此现在在使用前会进行缩短。

版本 13.2.3

发布:2025年7月8日

重大变更

  • ⚠️ PR #3586 停止支持 Debian 10 (Buster)。Debian 10 于 2024年6月30日停止维护。建议用户升级到 Debian 11 (Bullseye) 或 Debian 12 (Bookworm)。
  • ⚠️ v13.0.0 更新了 KNN 库 API,以支持空的 float_vector 值。此更新不改变数据格式,但增加了 Manticore Search / MCL API 版本。
  • ⚠️ v12.0.0 PR #3516 修复了 KNN 索引训练和构建过程中源和目标行 ID 不正确的错误。此更新不更改数据格式,但提高了 Manticore Search / MCL API 版本。
  • ⚠️ v11.0.0 添加了对新的 KNN 向量搜索功能的支持,如量化、重评分和过采样。此版本更改了 KNN 数据格式和 KNN_DIST() SQL 语法。新版本可以读取旧数据,但旧版本无法读取新格式。

新功能和改进

Bug 修复

版本 10.1.0

发布:2025年6月9日

此版本为更新版本,包含新功能、一个重大变更以及众多稳定性改进和错误修复。更改重点在于增强监控能力、改进搜索功能以及修复影响系统稳定性和性能的各种关键问题。

从版本 10.1.0 开始,不再支持 CentOS 7。建议用户升级到受支持的操作系统。

重大变更

新功能和改进

错误修复

版本 9.3.2

发布日期:2025年5月2日

本次发布包含多个错误修复和稳定性改进,更好的表使用跟踪,以及内存和资源管理的增强。

❤️ 特别感谢 @cho-m 修复了与Boost 1.88.0的构建兼容性问题,以及 @benwills 改进了关于stored_only_fields的文档。

  • 🪲 v9.3.2 修复了“显示线程”列显示CPU活动为浮点数而非字符串的问题;同时修正了PyMySQL结果集解析错误,原因是数据类型错误。

  • 🪲 v9.3.1 Issue #3343 修复了优化过程被中断时遗留的tmp.spidx文件问题。

  • 🆕 v9.3.0 PR #3337 新增了每表命令计数器和详细的表使用统计。

  • 🪲 v9.2.39 Issue #3236 修复:通过移除复杂块更新防止表损坏。在串行工作线程中使用等待函数破坏了串行处理,可能导致表损坏。 重新实现了自动刷新。移除了外部轮询队列以避免不必要的表锁。新增“小表”条件:如果文档数低于“小表限制”(8192)且未使用二级索引(SI),则跳过刷新。

  • 🪲 v9.2.38 修复:跳过为使用ALL/ANY字符串列表过滤器创建二级索引(SI),不影响JSON属性。

  • 🪲 v9.2.37 Issue #2898 为系统表添加了反引号支持。

  • 🪲 v9.2.36 修复:在旧代码中为集群操作使用占位符。在解析器中,我们现在清晰区分表名和集群名字段。

  • 🪲 v9.2.35 修复:取消引用单个'时崩溃。

  • 🪲 v9.2.34 Issue #3090 修复:大文档ID处理(之前可能无法找到)。

  • 🪲 v9.2.33 修复:位向量大小使用无符号整数。

  • 🪲 v9.2.32 修复:减少合并期间的峰值内存使用。docid到rowid的查找现在每个文档使用12字节,而非16字节。例如:20亿文档使用24 GB内存,而非36 GB。

  • 🪲 v9.2.31 Issue #3238 修复:大型实时表中 COUNT(*) 值不正确的问题。

  • 🪲 v9.2.30 修复:清零字符串属性时的未定义行为。

  • 🪲 v9.2.29 小修正:改进了警告文本。

  • 🪲 v9.2.28 Issue #3290 改进:增强了 indextool --buildidf

  • 🪲 v9.2.27 Issue #3032 通过 Kafka 集成,现在可以为特定 Kafka 分区创建数据源。

  • 🪲 v9.2.26 Issue #3301 修复:ORDER BYWHEREid 上可能导致 OOM(内存溢出)错误。

  • 🪲 v9.2.25 Issue #3171 修复:在 RT 表上使用带有多个 JSON 属性的 grouper 并且该表有多个磁盘块时导致的段错误崩溃。

  • 🪲 v9.2.24 Issue #3246 修复:WHERE string ANY(...) 查询在 RAM 块刷新后失败。

  • 🪲 v9.2.23 PR #518 小幅自动分片语法改进。

  • 🪲 v9.2.22 Issue #2763 修复:使用 ALTER TABLE 时未加载全局 idf 文件。

  • 🪲 v9.2.21 修复:全局 idf 文件可能很大。我们现在更早释放表以避免持有不必要的资源。

  • 🪲 v9.2.20 PR #3277 改进:更好的分片选项验证。

  • 🪲 v9.2.19 PR #3275 修复:与 Boost 1.88.0 的构建兼容性。

  • 🪲 v9.2.18 Issue #3228 修复:分布式表创建时崩溃(无效指针问题)。

  • 🪲 v9.2.17 PR #3272 修复:多行模糊 FACET 问题。

  • 🪲 v9.2.16 Issue #3063 修复:使用 GEODIST 函数时距离计算的错误。

  • 🪲 v9.2.15 Issue #3027 小幅改进:支持 Elastic 的 query_string 过滤格式。

版本 9.2.14

发布:2025年3月28日

小改动

  • 提交 实现了 --mockstack 标志,用于计算递归操作的栈需求。新的 --mockstack 模式分析并报告递归表达式求值、模式匹配操作、过滤处理所需的栈大小。计算出的栈需求输出到控制台,便于调试和优化。
  • Issue #3058 默认启用 boolean_simplify
  • Issue #3172 添加了新的配置选项:searchd.kibana_version_string,当使用特定版本的 Kibana 或 OpenSearch Dashboards 并期望特定 Elasticsearch 版本时非常有用。
  • Issue #3211 修复了 CALL SUGGEST 以支持 2 字符单词。
  • Issue #490 改进了 模糊搜索:之前在搜索 "def ghi" 时,如果存在另一个匹配文档,有时无法找到 "defghi"。
  • ⚠️ 重大变更 Issue #3165 在部分 HTTP JSON 响应中将 _id 改为 id 以保持一致性。请确保相应更新您的应用程序。
  • ⚠️ 重大变更 Issue #3186 在集群加入时增加了对 server_id 的检查,以确保每个节点具有唯一的 ID。现在,当加入节点的 server_id 与集群中已有节点的 server_id 相同时,JOIN CLUSTER 操作可能会失败并显示重复 server_id 的错误信息。为解决此问题,请确保复制集群中的每个节点具有唯一的 server_id。您可以在配置文件的 "searchd" 部分将默认的 server_id 更改为唯一值,然后再尝试加入集群。此更改更新了复制协议。如果您正在运行复制集群,需要:
    • 首先,干净地停止所有节点
    • 然后,使用 Linux 下的工具 manticore_new_cluster,以 --new-cluster 参数启动最后停止的节点。
    • 详细信息请参阅 重启集群

Bug修复

  • Commit 6fda 修复了等待后调度器丢失导致的崩溃;现在,像 serializer 这样的特定调度器能够正确恢复。
  • Commit c333 修复了右表权重无法在 ORDER BY 子句中使用的错误。
  • Issue #2644 gcc 14.2.0:修复了 lower_bound 调用时 const knn::DocDist_t*& 的错误。❤️ 感谢 @Azq2 的 PR。
  • Issue #3018 修复了自动模式插入时处理大写表名的问题。
  • Issue #3119 修复了解码无效 base64 输入时的崩溃。
  • Issue #3121 修复了两个与 KNN 索引 ALTER 相关的问题:浮点向量现在保持原始维度,KNN 索引生成正确。
  • Issue #3123 修复了在空 JSON 列上构建二级索引时的崩溃。
  • Issue #3138 修复了由重复条目引起的崩溃。
  • Issue #3151 修复了 fuzzy=1 选项无法与 rankerfield_weights 一起使用的问题。
  • Issue #3163 修复了 SET GLOBAL timezone 无效的错误。
  • Issue #3181 修复了使用大于 2^63 的 ID 时文本字段值可能丢失的问题。
  • Issue #3189 修复了 UPDATE 语句现在正确遵守 query_log_min_msec 设置的问题。
  • Issue #3247 修复了保存实时磁盘块时的竞态条件,可能导致 JOIN CLUSTER 失败。

版本 7.4.6

发布:2025年2月28日

主要变更

次要变更

  • Issue #1727 修复了 arm64 和 x86_64 之间的浮点精度差异。
  • Issue #2995 实现了 join 批处理的性能优化。
  • Issue #3039 实现了直方图中 EstimateValues 的性能优化。
  • Issue #3099 增加了对 Boost 1.87.0 的支持。❤️ 感谢 @cho-m 的 PR。
  • Issue #77 优化了创建多值过滤器时的块数据重用;为属性元数据添加了最小/最大值;实现了基于最小/最大值的过滤值预过滤。

Bug修复

  • Commit 73ac 修复了在连接查询中使用左右表属性时表达式的处理;修复了右表的 index_weights 选项。
  • Issue #2915SELECT ... JOIN 查询中使用 avg() 可能导致结果错误;现已修复。
  • Issue #2996 修复了启用 join 批处理时隐式截断导致的错误结果集。
  • Issue #3031 修复了守护进程关闭时活跃块合并导致的崩溃。
  • Issue #3037 修复了 IN(...) 可能产生错误结果的问题。
  • Issue #3038 7.0.0 版本中设置 max_iops / max_iosize 可能降低索引性能;现已修复。
  • Issue #3042 修复了连接查询缓存中的内存泄漏。
  • Issue #3052 修复了连接 JSON 查询中查询选项的处理。
  • Issue #3054 修复了 ATTACH TABLE 命令的问题。
  • Issue #3079 修正了错误信息中的不一致问题。
  • Issue #3087 每个表设置 diskchunk_flush_write_timeout=-1 未能禁用索引刷新;现已修复。
  • Issue #3088 解决了批量替换大ID后出现的重复条目问题。
  • Issue #3126 修复了由单个 NOT 操作符和表达式排序器的全文查询导致的守护进程崩溃。
  • Issue #3128 修复了CJSON库中的潜在漏洞。❤️ 感谢 @tabudz 的PR。

版本 7.0.0

发布:2025年1月30日

主要变更

次要变更

  • ⚠️ 破坏性变更 Issue #1111 修复了实时表中对 global_idf 的支持。需要重新创建表。
  • ⚠️ 破坏性变更 Issue #2103 从内部 cjk 字符集移除了泰文字符。请相应更新您的字符集定义:如果您有 cjk,non_cjk 并且泰文字符对您很重要,请改为 cjk,thai,non_cjk,或使用 cont,non_cjk,其中 cont 是所有连续书写语言(即 cjk + thai)的新标识。使用 ALTER TABLE 修改现有表。
  • ⚠️ 破坏性变更 Issue #2468 CALL SUGGEST / QSUGGEST 现支持分布式表。这增加了主/代理协议版本。如果您在多实例分布式环境中运行 Manticore Search,请确保先升级代理,再升级主节点。
  • ⚠️ 破坏性变更 Issue #2889 PQ SHOW META 的列名由 Name 改为 Variable name
  • ⚠️ 破坏性变更 Issue #879 引入了带有新选项的 每表二进制日志binlog_commonbinlog 用于 create table / alter table。升级到新版本前需干净关闭 Manticore 实例。
  • ⚠️ 破坏性变更 Issue #1789 修正了节点以错误的复制协议版本加入集群时的错误信息。此更改更新了复制协议。如果您运行复制集群,需要:
    • 首先,干净停止所有节点
    • 然后,使用 Linux 下的工具 manticore_new_cluster,以 --new-cluster 参数启动最后停止的节点。
    • 详情请参阅 重启集群
  • ⚠️ 破坏性变更 Issue #2308ALTER CLUSTER ADDDROP 中增加了对多表的支持。此更改也影响复制协议。请参考前一节了解如何处理此更新。
  • Issue #2997 修复了 Macos 上的 dlopen 问题。
  • Commit 4954 更改了带有 KNN 索引的表的 OPTIMIZE TABLE 默认截止点,以提升搜索性能。
  • Commit cfc8FACETGROUP BY 中的 ORDER BY 添加了 COUNT(DISTINCT) 支持。
  • Issue #1103 改进了 日志 中块合并的清晰度。
  • Issue #1130 添加了对 DBeaver 的支持。
  • Issue #1546POLY2D()/GEOPOLY2D() 函数实现了二级索引。
  • Issue #1630 HTTP 请求现在支持 Content-Encoding: gzip
  • Issue #1831 添加了 SHOW LOCKS 命令。
  • Issue #2187 允许 Buddy 请求绕过守护进程的 searchd.max_connections 限制。
  • Issue #2208 增加了通过 JSON HTTP 接口连接表的支持。
  • Issue #2235 通过 Buddy 以原始形式记录成功处理的查询。
  • Issue #2249 为复制表添加了运行 mysqldump 的特殊模式。
  • Issue #2268 改进了 CREATE TABLEALTER TABLE 语句中外部文件的重命名复制操作。
  • Issue #2402 更新了 searchd.max_packet_size 的默认值为 128MB。
  • Issue #2419 在 JSON "match" 中添加了对 IDF boost modifier 的支持。
  • Issue #2430 加强了 binlog 写入同步以防止错误。
  • Issue #2458 在 Windows 包中集成了 zlib 支持。
  • Issue #2479 添加了对 SHOW TABLE INDEXES 命令的支持。
  • Issue #2485 为 Buddy 回复设置了会话元数据。
  • Issue #2490 兼容端点的聚合支持毫秒级分辨率。
  • Issue #2500 当复制启动失败时,修改了集群操作的错误消息。
  • Issue #2584 新增 SHOW STATUS 中的性能指标:最近 1、5 和 15 分钟内每种查询类型的最小/最大/平均/95%/99% 百分位数。
  • Issue #2639 在请求和响应中将所有 index 替换为 table
  • Issue #2643 在 HTTP /sql 端点的聚合结果中添加了 distinct 列。
  • Issue #268 实现了从 Elasticsearch 导入数据类型的自动检测。
  • Issue #2744 为字符串 JSON 字段比较表达式添加了排序规则支持。
  • Issue #2752 支持在选择列表中使用 uuid_short 表达式。
  • Issue #2783 Manticore Search 现在直接运行 Buddy,无需 manticore-buddy 包装器。
  • Issue #2785 区分了缺少表和不支持插入操作的表的错误消息。
  • Issue #2789 OpenSSL 3 现已静态编译进 searchd
  • Issue #2790 添加了 CALL uuid_short 语句,用于生成包含多个 uuid_short 值的序列。
  • Issue #2803 为 JOIN 操作中的右表添加了单独的选项。
  • Issue #2810 改进了 HTTP JSON 聚合性能,使其与 SphinxQL 中的 GROUP BY 相匹配。
  • Issue #2854 支持 Kibana 日期相关请求中的 fixed_interval
  • Issue #2909 实现了 JOIN 查询的批处理,显著提升了某些 JOIN 查询的性能,提升幅度达数百甚至数千倍。
  • Issue #2937 允许在 fullscan 查询中使用连接表的权重。
  • Issue #2953 修复了连接查询的日志记录。
  • Issue #337 在非调试模式下隐藏了 Buddy 异常,不再显示在 searchd 日志中。
  • Issue #2931 当用户为复制监听器设置错误端口时,守护进程关闭并显示错误消息。

Bug 修复

  • Commit 0c6b 修复:当 JOIN 查询中列数超过 32 时返回错误结果。
  • Issue #2335 解决了当条件中使用两个 json 属性时表连接失败的问题。
  • Issue #2338 修正了带有 cutoff 的多查询中 total_relation 计算错误的问题。
  • Issue #2366 修正了在 表连接 中对右表 json.string 的过滤。
  • Issue #2406 允许在任何 POST HTTP JSON 端点(insert/replace/bulk)中使用 null 作为所有值,此时会使用默认值。
  • Issue #2418 通过调整初始 socket 探测的 max_packet_size 网络缓冲区分配,优化了内存消耗。
  • Issue #2420 修正了通过 JSON 接口将无符号整数插入 bigint 属性的问题。
  • Issue #2422 修正了启用 pseudo_sharding 时,二级索引与排除过滤器配合使用的问题。
  • Issue #2423 解决了 manticore_new_cluster 中的一个错误。
  • Issue #2448 解决了在格式错误的 _update 请求时守护进程崩溃的问题。
  • Issue #2452 修正了直方图无法处理带排除的值过滤器的问题。
  • Issue #55 修正了针对分布式表的 knn 查询。
  • Issue #68 增强了列存访问器中对表编码的排除过滤器处理。
  • Commit 0eb1 修正了表达式解析器未遵守重新定义的 thread_stack 的问题。
  • Commit c304 修正了克隆列存 IN 表达式时的崩溃。
  • Commit edad 修正了位图迭代器中的反转问题,该问题导致崩溃。
  • Commit fc30 修正了部分 Manticore 软件包被 unattended-upgrades 自动移除的问题。
  • Issue #1019 改进了对 DbForge MySQL 工具发起查询的处理。
  • Issue #1107 修正了 CREATE TABLEALTER TABLE 中特殊字符的转义。❤️ 感谢 @subnix 的 PR。
  • Issue #116 修正了在冻结索引中更新 blob 属性时的死锁。死锁是由于尝试解冻索引时锁冲突引起的,也可能导致 manticore-backup 失败。
  • Issue #1818 当表被冻结时,OPTIMIZE 现在会抛出错误。
  • Issue #2001 允许函数名用作列名。
  • Issue #2153 修正了查询表设置时遇到未知磁盘块导致守护进程崩溃的问题。
  • Issue #2184 修正了 searchd 在执行 FREEZEFLUSH RAMCHUNK 后停止时挂起的问题。
  • Issue #2228 从保留字中移除了日期/时间相关的标记(及正则表达式)。
  • Issue #2255 修正了 FACET 使用超过 5 个排序字段时的崩溃。
  • Issue #2265 修正了启用 index_field_lengths 时无法恢复 mysqldump 的问题。
  • Issue #2291 修正了执行 ALTER TABLE 命令时的崩溃。
  • Issue #2333 修正了 Windows 包中 MySQL DLL 使索引器正常工作的错误。
  • Issue #2393 修正了 GCC 编译错误。❤️ 感谢 @animetosho 的 PR。
  • Issue #2447 修正了 _update 中的转义问题。
  • Issue #2460 修正了声明多个同名属性或字段时索引器崩溃的问题。
  • Issue #2467 解决了针对“兼容”搜索相关端点的嵌套布尔查询错误转换导致守护进程崩溃的问题。
  • Issue #2493 修正了带修饰符短语中的扩展问题。
  • Issue #2535 解决了使用 ZONEZONESPAN 全文操作符时守护进程崩溃的问题。
  • Issue #2552 修正了带关键词字典的普通表和 RT 表的中缀生成问题。
  • Issue #2571 修复了 FACET 查询中的错误回复;为带有 COUNT(*)FACET 设置默认排序顺序为 DESC
  • Issue #2580 修复了 Windows 启动时守护进程崩溃的问题。
  • Issue #2603 修复了 HTTP 端点 /sql/sql?mode=raw 的查询截断问题;使这些端点的请求一致,无需 query= 头。
  • Issue #2623 修复了自动模式创建表但同时失败的问题。
  • Issue #2627 修复了 HNSW 库以支持加载多个 KNN 索引。
  • Issue #2630 修复了多个条件同时发生时的冻结问题。
  • Issue #2645 修复了使用 OR 与 KNN 搜索时导致的致命错误崩溃。
  • Issue #2647 修复了 indextool --mergeidf *.idf --out global.idf 在创建输出文件后删除该文件的问题。
  • Issue #2658 修复了带有外层选择中 ORDER BY 字符串的子选择导致守护进程崩溃的问题。
  • Issue #2686 修复了更新浮点属性和字符串属性时的崩溃问题。
  • Issue #2704 修复了 lemmatize_xxx_all 分词器中多个停用词增加后续标记 hitpos 的问题。
  • Issue #2708 修复了 ALTER ... ADD COLUMN ... TEXT 时的崩溃。
  • Issue #2737 修复了在至少有一个 RAM 块的冻结表中更新 blob 属性导致后续 SELECT 查询等待表解冻的问题。
  • Issue #2742 修复了带有打包因子的查询跳过查询缓存的问题。
  • Issue #2775 Manticore 现在在 _bulk 请求中遇到未知操作时报告错误,而不是崩溃。
  • Issue #2791 修复了 HTTP _bulk 端点返回插入文档 ID 的问题。
  • Issue #2797 修复了在处理多个表时,某个表为空且另一个表匹配条目数不同导致 grouper 崩溃的问题。
  • Issue #2835 修复了复杂 SELECT 查询中的崩溃。
  • Issue #2872 添加了错误信息,当 IN 表达式中的 ALLANY 参数不是 JSON 属性时提示错误。
  • Issue #2882 修复了在大表中更新 MVA 时守护进程崩溃的问题。
  • Issue #2888 修复了 libstemmer 分词失败时的崩溃。❤️ 感谢 @subnix 的 PR。
  • Issue #2919 修复了右表连接权重在表达式中未正确工作的情况。
  • Issue #2919 修复了右连接表权重在表达式中不起作用的问题。
  • Issue #325 修复了当表已存在时,CREATE TABLE IF NOT EXISTS ... WITH DATA 失败的问题。
  • Issue #351 修复了按 KNN 使用文档 ID 计数时出现的未定义数组键 "id" 错误。
  • Issue #359 修复了 REPLACE INTO cluster_name:table_name 功能。
  • Issue #67 修复了使用 --network=host 运行 Manticore Docker 容器时的致命错误。

版本 6.3.8

发布:2024年11月22日

版本 6.3.8 继续 6.3 系列,仅包含错误修复。

错误修复

  • PR #2777 修复了当查询并发受 threadsmax_threads_per_query 设置限制时可用线程数的计算。

manticore-extra v1.1.20

发布:2024年10月7日

错误修复

  • Issue #64 解决了 unattended-upgrades 工具在基于 Debian 的系统上自动安装软件包更新时,错误地将多个 Manticore 软件包(包括 manticore-galeramanticore-executormanticore-columnar-lib)标记为删除的问题。该问题是由于 dpkg 错误地将虚拟包 manticore-extra 视为冗余。已做出更改,确保 unattended-upgrades 不再尝试删除关键的 Manticore 组件。

版本 6.3.6

发布:2024年8月2日

版本 6.3.6 继续 6.3 系列,仅包含错误修复。

错误修复

  • Issue #2477 修复了 6.3.4 版本引入的崩溃,该崩溃可能在处理表达式和分布式或多表时发生。
  • Issue #2352 修复了因 max_query_time 导致查询多个索引时提前退出引起的守护进程崩溃或内部错误。

版本 6.3.4

发布:2024年7月31日

版本 6.3.4 继续 6.3 系列,仅包含小幅改进和错误修复。

小幅更改

  • Issue #1130 添加了对 DBeaver 的支持。
  • Issue #2146 改进了词形和例外中分隔符的转义。
  • Issue #2315 在 SELECT 列表达式中添加了字符串比较运算符。
  • Issue #2363 添加了对 Elastic 风格批量请求中 null 值的支持。
  • Issue #2374 添加了对 mysqldump 版本 9 的支持。
  • Issue #2375 改进了 HTTP JSON 查询中的错误处理,增加了错误发生节点的 JSON 路径。

Bug 修复

  • Issue #2280 修复了当 disk_chunks > 1 时,通配符查询匹配项多导致的性能下降问题。
  • Issue #2332 修复了空 MVA 数组在 MVA MIN 或 MAX SELECT 列表达式中导致的崩溃。
  • Issue #2339 修复了 Kibana 无限范围请求的错误处理。
  • Issue #2342 修复了当属性不在 SELECT 列表中时,右表的列式属性上的连接过滤器问题。
  • Issue #2343 修复了 Manticore 6.3.2 中重复的 'static' 说明符。
  • Issue #2344 修复了使用 MATCH() 作用于右表时,LEFT JOIN 返回非匹配条目的问题。
  • Issue #2350 修复了带有 hitless_words 的 RT 索引磁盘块保存问题。
  • Issue #2364 现在 'aggs_node_sort' 属性可以在其他属性中任意顺序添加。
  • Issue #2368 修复了 JSON 查询中全文与过滤器顺序错误的问题。
  • Issue #2376 修复了长 UTF-8 请求导致的 JSON 响应错误的 bug。
  • Issue #2684 修复了依赖连接属性的 presort/prefilter 表达式计算错误。
  • Issue #301 修改了指标数据大小的计算方法,改为从 manticore.json 文件读取,而非检查整个数据目录大小。
  • Issue #302 添加了对 Vector.dev 验证请求的处理。

版本 6.3.2

发布:2024年6月26日

版本 6.3.2 继续 6.3 系列,包含多个 bug 修复,其中一些是在 6.3.0 发布后发现的。

重大变更

  • ⚠️Issue #2305 更新了 aggs.range 的值为数值类型。

Bug 修复

  • Commit c51c 修复了存储检查与 rset 合并时的分组问题。
  • Commit 0e85 修复了在 RT 索引中使用 CRC 字典和启用 local_df 时,带通配符查询导致守护进程崩溃的问题。
  • Issue #2200 修复了在没有 GROUP BY 的 JOIN 中使用 count(*) 导致的崩溃。
  • Issue #2201 修复了尝试按全文字段分组时,JOIN 未返回警告的问题。
  • Issue #2230 解决了通过 ALTER TABLE 添加属性时未考虑 KNN 选项的问题。
  • Issue #2231 修复了 6.3.0 版本中无法卸载 manticore-tools Redhat 包的问题。
  • Issue #2242 修正了 JOIN 和多个 FACET 语句返回错误结果的问题。
  • Issue #2250 修复了当表在集群中时,ALTER TABLE 报错的问题。
  • Issue #2252 修复了 SphinxQL 接口传递给 buddy 的原始查询问题。
  • Issue #2267 改进了带磁盘块的 RT 索引中 CALL KEYWORDS 的通配符扩展。
  • Issue #271 修复了错误的 /cli 请求导致的挂起。
  • Issue #274 解决了对 Manticore 的并发请求可能卡住的问题。
  • Issue #275 修复了通过 /cli 执行 drop table if exists t; create table t 导致的挂起。

复制相关

  • Issue #2270/_bulk HTTP 端点中添加了对 cluster:name 格式的支持。

版本 6.3.0

发布:2024年5月23日

主要变更

小改动

重大变更和废弃

  • ⚠️Issue #1436 修正了 IDF 计算问题。local_df 现在为默认值。改进了主从搜索协议(版本已更新)。如果您在分布式环境中运行多个 Manticore Search 实例,请确保先升级代理,再升级主节点。
  • ⚠️Issue #1572 添加了分布式表的复制功能并更新了复制协议。如果您运行复制集群,需要:
    • 首先,干净地停止所有节点
    • 然后,使用 Linux 下的工具 manticore_new_cluster,以 --new-cluster 参数启动最后停止的节点。
    • 详细信息请参阅重启集群
  • ⚠️Issue #1763 HTTP API 端点别名 /json/* 已被废弃。
  • ⚠️Issue #1982 JSON 中将profile 改为 plan,并新增了 JSON 查询分析功能。
  • ⚠️Commit e235 manticore-backup 不再备份 plugin_dir
  • ⚠️Issue #171 将 Buddy 迁移到 Swoole 以提升性能和稳定性。切换到新版本时,请确保所有 Manticore 包均已更新。
  • ⚠️Issue #196 将所有核心插件合并到 Buddy 中,并更改了核心逻辑。
  • ⚠️Issue #2107/search 响应中将文档 ID 视为数字。
  • ⚠️Issue #38 添加了 Swoole,禁用了 ZTS,并移除了 parallel 扩展。
  • ⚠️Issue #1929 在某些情况下,charset_table 中的覆盖未生效。

复制相关变更

  • Commit 3376 修复了大文件 SST 复制错误。
  • Commit 6d36 为复制命令添加了重试机制;修复了网络繁忙且丢包时复制加入失败的问题。
  • Commit 842e 将复制中的 FATAL 消息改为 WARNING 消息。
  • Commit 8c32 修正了无表或空表的复制集群中 gcache.page_size 的计算;同时修复了 Galera 选项的保存和加载。
  • Commit a2af 新增功能,跳过加入集群节点上的更新节点复制命令。
  • Commit c054 修复了更新 blob 属性与替换文档时复制过程中的死锁。
  • Commit e80d 添加了 replication_connect_timeoutreplication_query_timeoutreplication_retry_delayreplication_retry_count 等 searchd 配置选项,用于控制复制期间的网络,类似于 searchd.agent_*,但默认值不同。
  • Issue #1356 修复了复制节点在部分节点丢失且名称解析失败后的重试问题。
  • Issue #1445 修正了 show variables 中复制日志的详细级别。
  • Issue #1482 修复了 Kubernetes 中 pod 重启时加入节点连接集群的复制问题。
  • Issue #1962 修复了空集群中无效节点名导致复制修改长时间等待的问题。

Bug 修复

  • Commit 8a48 修复了 count distinct 中未使用匹配项清理可能导致崩溃的问题。
  • Issue #1569 二进制日志现在以事务粒度写入。
  • Issue #2089 修复了与64位ID相关的一个错误,该错误可能导致通过MySQL插入时出现“Malformed packet”错误,进而导致表损坏和ID重复
  • Issue #2160 修正了日期被插入时错误地当作UTC时间而非本地时区的问题。
  • Issue #2177 修复了在实时表中使用非空的index_token_filter执行搜索时发生的崩溃。
  • Issue #2209 更改了RT列存储中的重复过滤,修复了崩溃和错误的查询结果。
  • Commit 001d 修复了html剥离器在处理连接字段后导致内存损坏的问题。
  • Commit 00eb 避免在刷新后回绕流,防止与mysqldump的通信错误。
  • Commit 0553 如果预读尚未开始,则不等待其完成。
  • Commit 055a 修复了Buddy输出字符串过大时在searchd日志中分多行显示的问题。
  • Commit 0a88 移动了MySQL接口关于失败的header debugv详细级别的警告。
  • Commit 150a 修复了多集群管理操作中的竞态条件;禁止创建同名或同路径的多个集群。
  • Commit 2e40 修复了全文查询中的隐式截断;将MatchExtended拆分为模板部分D。
  • Commit 75f5 修正了index_exact_words在索引和加载表到守护进程时的不一致。
  • Commit 7643 修复了删除无效集群时缺失的错误信息。
  • Commit 7a03 修复了CBO与队列联合;修正了CBO与RT伪分片。
  • Commit 7b4e 在未加载二级索引(SI)库和配置参数时,避免发出误导性的警告信息“WARNING: secondary_indexes set but failed to initialize secondary library”。
  • Commit 8496 修正了quorum中的命中排序。
  • Commit 8973 修复了ModifyTable插件中大写选项的问题。
  • Commit 9935 修复了从包含空json值(表示为NULL)的转储恢复的问题。
  • Commit a28f 通过使用pcon修复了连接节点接收SST时的SST超时。
  • Commit b5a5 修复了选择别名字符串属性时的崩溃。
  • Commit c556 添加了对带有morphology_skip_fields字段的全文查询中,将词项转换为=term的查询转换。
  • Commit cdc3 添加了缺失的配置键(skiplist_cache_size)。
  • Commit cf6e 修复了表达式排序器在处理大型复杂查询时的崩溃。
  • Commit e513 修正了全文CBO与无效索引提示的冲突。
  • Commit eb05 在关闭时中断预读以加快关闭速度。
  • Commit f945 更改了全文查询的堆栈计算,避免复杂查询时崩溃。
  • Issue #1262 修复了索引器在索引具有多个同名列的SQL源时崩溃的问题。
  • Issue #1273 对不存在的系统变量返回0而非
  • Issue #1289 修复了indextool检查RT表外部文件时的错误。
  • Issue #1335 修正了由于短语内多词形导致的查询解析错误。
  • Issue #1364 添加了对旧版本binlog的空binlog文件重放支持。
  • Issue #1365 修复了删除最后一个空binlog文件的问题。
  • Issue #1372 修正了在 data_dir 变更后,守护进程启动时当前工作目录受影响导致的相对路径错误(转换为守护进程启动目录的绝对路径)。
  • Issue #1393 hn_small 中最慢时间退化:守护进程启动时获取/缓存 CPU 信息。
  • Issue #1395 修正了索引加载时关于缺失外部文件的警告。
  • Issue #1402 修正了在释放数据指针属性时全局分组器崩溃的问题。
  • Issue #1403 _ADDITIONAL_SEARCHD_PARAMS 无效。
  • Issue #1427 修正了每表 agent_query_timeout 被默认查询选项 agent_query_timeout 替换的问题。
  • Issue #1444 修正了使用 packedfactors() 并且每个匹配有多个值时,分组器和排序器崩溃的问题。
  • Issue #1458 Manticore 在频繁索引更新时崩溃。
  • Issue #1481 修正了解析错误后解析查询清理时的崩溃。
  • Issue #1484 修正了 HTTP JSON 请求未被路由到 buddy 的问题。
  • Issue #1499 JSON 属性根值不能是数组的问题已修复。
  • Issue #1507 修正了事务内表重建时崩溃的问题。
  • Issue #1515 修正了俄语词干短形式的扩展。
  • Issue #1579 修正了在 [date_format](Functions/Date_and_time_functions.md#DATE_FORMAT()) 表达式中 JSON 和 STRING 属性的使用。
  • Issue #1580 修正了对 JSON 字段多个别名的分组器。
  • Issue #1594 修正了 dev 中 total_related 错误:修正了隐式 cutoff 与 limit;增加了 JSON 查询中更好的全扫描检测。
  • Issue #1603 修正了所有日期表达式中 JSON 和 STRING 属性的使用。
  • Issue #1609 使用 LEVENSHTEIN() 时崩溃。
  • Issue #1612 修正了带高亮的搜索查询解析错误后内存损坏的问题。
  • Issue #1614 禁用了对短于 min_prefix_len / min_infix_len 的词的通配符扩展。
  • Issue #1617 修改行为:如果 Buddy 成功处理请求,则不记录错误。
  • Issue #1635 修正了设置了 limit 的查询的搜索查询元信息中的 total。
  • Issue #1640 无法在纯模式下通过 JSON 使用大写表名。
  • Issue #1643 提供了默认的 SPH_EXTNODE_STACK_SIZE 值。
  • Issue #1646 修正了 MVA 属性上带 ALL/ANY 的负过滤器的 SphinxQL 日志。
  • Issue #1660 修正了来自其他索引的 docid killlists 应用。❤️ 感谢 @raxoft 的 PR。
  • Issue #1668 修正了因原始索引全扫描(无任何索引迭代器)提前退出导致的匹配遗漏;移除了纯行迭代器中的 cutoff。
  • Issue #1671 修正了使用 agent 和本地表查询分布式表时的 FACET 错误。
  • Issue #1690 修正了大值直方图估计时崩溃。
  • Issue #1692 alter table tbl add column col uint 时崩溃。
  • Issue #1710 条件 WHERE json.array IN (<value>) 返回空结果。
  • Issue #172 修正了向 /cli 发送请求时 TableFormatter 的问题。
  • Issue #1742 缺少 wordforms 文件时 CREATE TABLE 不会失败。
  • Issue #1762 RT 表中属性的顺序现在遵循配置顺序。
  • Issue #1765 带 'should' 条件的 HTTP bool 查询返回错误结果。
  • Issue #1769 按字符串属性排序时,SPH_SORT_ATTR_DESCSPH_SORT_ATTR_ASC 不起作用。
  • Issue #177 禁用了 curl 请求到 Buddy 的 Expect: 100-continue HTTP 头。
  • Issue #1791 由 GROUP BY 别名引起的崩溃。
  • Issue #1792 Windows 上 SQL 元摘要显示错误时间。
  • Issue #1794 修复了 JSON 查询中单词性能下降的问题。
  • Issue #1798 不兼容的过滤器在 /search 上未引发错误。
  • Issue #1802 修复了 ALTER CLUSTER ADDJOIN CLUSTER 操作相互等待的问题,防止了 ALTER 在捐赠节点向加入节点发送表时将表添加到集群的竞态条件。
  • Issue #1811 错误处理了 /pq/{table}/* 请求。
  • Issue #1816 UNFREEZE 在某些情况下不起作用。
  • Issue #183 修复了某些情况下 MVA 恢复的问题。
  • Issue #1849 修复了在与 MCL 一起使用时 indextool 关闭时崩溃的问题。
  • Issue #1866 修复了 /cli_json 请求的不必要的 URL 解码。
  • Issue #1872 更改了守护进程启动时的 plugin_dir 设置逻辑。
  • Issue #1874 alter table ... 异常失败。
  • Issue #1891 插入数据时 Manticore 崩溃,信号为 signal 11
  • Issue #1920 降低了 low_priority 的节流。
  • Issue #1924 Mysqldump + mysql 恢复的错误。
  • Issue #1951 修复了在本地表缺失或代理描述不正确时分布式表创建错误的问题;现在返回错误信息。
  • Issue #1972 实现了 FREEZE 计数器以避免 freeze/unfreeze 问题。
  • Issue #1980 在 OR 节点中遵守查询超时。之前 max_query_time 在某些情况下可能不起作用。
  • Issue #1986 无法将 new 重命名为当前的 [manticore.json]。
  • Issue #1988 全文查询可能忽略 SecondaryIndex CBO 提示。
  • Issue #1990 修复了 expansion_limit,用于从多个磁盘块或内存块调用关键字时切片最终结果集。
  • Issue #1994 错误的外部文件。
  • Issue #2021 停止 Manticore 后可能会留下几个 manticore-executor 进程。
  • Issue #2029 使用 Levenshtein 距离时崩溃。
  • Issue #2037 在空索引上多次运行 max 操作符后出现错误。
  • Issue #2052 使用 JSON.field 的多组查询时崩溃。
  • Issue #2067 对 _update 的错误请求导致 Manticore 崩溃。
  • Issue #2069 修复了 JSON 接口中字符串过滤比较器对闭区间的处理问题。
  • Issue #2082 当 data_dir 路径位于符号链接上时,alter 失败。
  • Issue #2102 改进了 mysqldump 中 SELECT 查询的特殊处理,确保生成的 INSERT 语句与 Manticore 兼容。
  • Issue #2103 泰文字符使用了错误的字符集。
  • Issue #2124 使用包含保留字的 SQL 时崩溃。
  • Issue #2154 含有词形变化的表无法导入。
  • Issue #2176 修复了当引擎参数设置为 'columnar' 且通过 JSON 添加重复 ID 时发生的崩溃。
  • Issue #223 尝试插入无模式且无列名的文档时返回正确错误。
  • Issue #239 自动模式多行插入可能失败。
  • Issue #399 如果数据源声明了 id 属性,索引时添加错误信息。
  • Issue #59 Manticore 集群崩溃。
  • Issue #68 如果存在 percolate 表,optimize.php 会崩溃。
  • Issue #77 修复了在 Kubernetes 上部署时的错误。
  • Issue #274 修复了对 Buddy 并发请求的错误处理。

与 manticore-backup 相关

  • Issue #97 当可用时,将 VIP HTTP 端口设置为默认。 各种改进:改进了版本检查和流式ZSTD解压缩;在恢复过程中添加了版本不匹配的用户提示;修正了恢复时不同版本的错误提示行为;增强了解压缩逻辑,直接从流中读取而不是进入工作内存;添加了--force标志
  • 提交 3b35 在Manticore搜索启动后添加备份版本显示,以便在此阶段识别问题。
  • 提交 ad2e 更新了连接守护进程失败时的错误信息。
  • 提交 ce5e 修正了将绝对根备份路径转换为相对路径的问题,并移除了恢复时的可写检查,以支持从不同路径恢复。
  • 提交 db7e 为文件迭代器添加排序,确保各种情况下的一致性。
  • 问题 #106 多配置的备份和恢复。
  • 问题 #91 添加defattr以防止RHEL安装后文件出现异常用户权限。
  • 问题 #91 添加额外的chown,确保Ubuntu中默认文件归属root用户。

与MCL(列式、二级、knn库)相关

  • 提交 f104 支持向量搜索。
  • 提交 2169 修正了在中断的二级索引构建设置期间临时文件的清理问题。解决了守护进程在创建tmp.spidx文件时超出打开文件限制的问题。
  • 提交 709b 为列式和SI使用独立的streamvbyte库。
  • 提交 1c26 添加警告,指出列式存储不支持json属性。
  • 提交 3acd 修正了SI中的数据解包。
  • 提交 574c 修正了保存混合行式和列式存储的磁盘块时的崩溃。
  • 提交 e87f 修正了SI迭代器被提示处理已处理块的问题。
  • 问题 #1474 使用列式引擎时,行式MVA列的更新失败。
  • 问题 #1510 修正了在HAVING中使用列式属性时的聚合崩溃。
  • 问题 #1519 修正了在使用列式属性时expr排序器的崩溃。

与Docker相关

版本 6.2.12

发布:2023年8月23日

版本6.2.12延续6.2系列,解决了6.2.0发布后发现的问题。

Bug修复

  • 问题 #1351 “Manticore 6.2.0在Centos 7上无法通过systemctl启动”:将TimeoutStartSecinfinity修改为0,以提高与Centos 7的兼容性。
  • 问题 #1364 “从6.0.4升级到6.2.0后崩溃”:为旧版本binlog的空binlog文件添加重放功能。
  • PR #1334 “修正searchdreplication.cpp中的拼写错误”:修正searchdreplication.cpp中的拼写错误:beggining -> beginning。
  • 问题 #1337 “Manticore 6.2.0 WARNING: conn (local)(12), sock=8088: bailing on failed MySQL header, AsyncNetInputBuffer_c::AppendData: error 11 (Resource temporarily unavailable) return -1”:降低MySQL接口关于头部的警告日志级别为logdebugv。
  • 问题 #1355 “当node_address无法解析时,join cluster挂起”:改进了当某些节点不可达且名称解析失败时的复制重试。此改进应解决Kubernetes和Docker节点中与复制相关的问题。增强了复制启动失败的错误信息,并更新了测试模型376。此外,提供了名称解析失败的明确错误信息。
  • Issue #1361 "No lower case mapping for "Ø" in charset non_cjk": 调整了字符 'Ø' 的映射。
  • Issue #1365 "searchd leaves binlog.meta and binlog.001 after clean stop": 确保最后一个空的 binlog 文件被正确删除。
  • Commit 0871: 修复了 Windows 上与原子复制限制相关的 Thd_t 构建问题。
  • Commit 1cc0: 解决了 FT CBO 与 ColumnarScan 相关的问题。
  • Commit c6bf: 修正了测试 376 并为测试中的 AF_INET 错误添加了替代方案。
  • Commit cbc3: 解决了复制过程中更新 blob 属性与替换文档时的死锁问题。同时移除了提交期间索引的 rlock,因为它已经在更基础的层面被锁定。

小改动

  • Commit 4f91 更新了手册中关于 /bulk 端点的信息。

MCL

版本 6.2.0

发布:2023年8月4日

主要改动

  • 查询优化器增强,支持全文查询,显著提升搜索效率和性能。
  • 集成:
  • 我们开始使用 GitHub workflows,使贡献者更容易使用核心团队在准备软件包时采用的相同持续集成(CI)流程。所有作业都可以在 GitHub 托管的运行器上运行,方便在您的 Manticore Search 分支中无缝测试更改。
  • 我们开始使用 CLT 来测试复杂场景。例如,我们现在能够确保提交后构建的软件包可以在所有支持的 Linux 操作系统上正确安装。命令行测试器(CLT)提供了一种用户友好的方式,以交互模式录制测试并轻松重放。
  • 通过结合使用哈希表和 HyperLogLog,显著提升了 count distinct 操作的性能。
  • 启用了包含二级索引的查询的多线程执行,线程数限制为物理 CPU 核心数。这将大幅提升查询执行速度。
  • pseudo_sharding 已调整为限制在空闲线程数内。此更新显著提升了吞吐性能。
  • 用户现在可以通过配置设置指定默认属性存储引擎,更好地定制以匹配特定工作负载需求。
  • 支持 Manticore Columnar Library 2.2.0,在二级索引中修复了众多错误并进行了改进。

小改动

  • Buddy #153: /pq HTTP 端点现在作为 /json/pq HTTP 端点的别名。
  • Commit 0bf1: 确保了 upper()lower() 的多字节兼容性。
  • Commit 2bb9: 对于 count(*) 查询,不再扫描索引,而是返回预计算值。
  • Commit 3c84: 现在可以使用 SELECT 进行任意计算和显示 @@sysvars。与之前不同,您不再局限于单个计算。因此,像 select user(), database(), @@version_comment, version(), 1+1 as a limit 10 这样的查询将返回所有列。注意,可选的 'limit' 总是被忽略。
  • Commit 6aca: 实现了 CREATE DATABASE 存根查询。
  • Commit 9dc1: 执行 ALTER TABLE table REBUILD SECONDARY 时,即使属性未更新,二级索引也总是被重建。
  • Commit 46ed: 使用预计算数据的排序器现在在使用 CBO 之前被识别,以避免不必要的 CBO 计算。
  • Commit 102a: 实现了全文表达式栈的模拟和使用,以防止守护进程崩溃。
  • Commit 979f: 为不使用字符串/mvas/json 属性的匹配添加了快速路径的匹配克隆代码。
  • 提交 a073:添加了对 SELECT DATABASE() 命令的支持。但它始终返回 Manticore。此新增功能对于与各种 MySQL 工具的集成至关重要。
  • 提交 bc04:修改了 /cli 端点的响应格式,并添加了 /cli_json 端点以实现之前 /cli 的功能。
  • 提交 d70bthread_stack 现在可以在运行时通过 SET 语句修改。提供了会话本地和守护进程范围的两种变体。当前值可在 show variables 输出中查看。
  • 提交 d96e:代码已集成到 CBO 中,以更准确地估计在字符串属性上执行过滤器的复杂度。
  • 提交 e77d:改进了 DocidIndex 成本计算,提升了整体性能。
  • 提交 f3ae:类似于 Linux 上的“uptime”,负载指标现在可在 SHOW STATUS 命令中查看。
  • 提交 f3ccDESCSHOW CREATE TABLE 的字段和属性顺序现在与 SELECT * FROM 保持一致。
  • 提交 f3d2:不同的内部解析器现在在各种错误中提供其内部助记代码(例如 P01)。此改进有助于识别导致错误的解析器,同时隐藏非必要的内部细节。
  • 问题 #271 “有时 CALL SUGGEST 不会建议单字母拼写错误的更正”:改进了 SUGGEST/QSUGGEST 对短词的行为:添加了 sentence 选项以显示整句。
  • 问题 #696 “启用词干处理时,Percolate 索引无法通过精确短语查询正确搜索”:修改了 percolate 查询以处理精确词项修饰符,提升了搜索功能。
  • 问题 #829 “日期格式化方法”:添加了 [date_format()](Functions/Date_and_time_functions.md#DATE_FORMAT()) 选择列表表达式,暴露了 strftime() 函数。
  • 问题 #961 “通过 HTTP JSON API 对桶进行排序”:在 HTTP 接口中为每个聚合桶引入了可选的 sort 属性
  • 问题 #1062 “改进 JSON 插入 API 失败的错误日志 - “不支持的值类型””:当发生错误时,/bulk 端点会报告已处理和未处理字符串(文档)的数量信息。
  • 问题 #1070 “CBO 提示不支持多个属性”:启用了索引提示以处理多个属性。
  • 问题 #1106 “向 HTTP 搜索查询添加标签”:已向 HTTP PQ 响应 添加标签。
  • 问题 #1301 “buddy 不应并行创建表”:解决了导致并行 CREATE TABLE 操作失败的问题。现在一次只能运行一个 CREATE TABLE 操作。
  • 问题 #1303 “添加对 @ 到列名的支持”。
  • 问题 #1316 “使用 ps=1 时出租车数据集查询缓慢”:优化了 CBO 逻辑,默认直方图分辨率设置为 8k,以提高对随机分布值属性的准确性。
  • 问题 #1317 “修复 hn 数据集上的 CBO 与全文搜索”:实现了改进的逻辑,用于确定何时使用位图迭代器交集,何时使用优先队列。
  • 问题 #1318 “columnar:更改迭代器接口为单次调用”:列式迭代器现在使用单次 Get 调用,替代之前的两步 AdvanceTo + Get 调用以获取值。
  • 问题 #1319 “聚合计算加速(移除 CheckReplaceEntry?)”:从组排序器中移除了 CheckReplaceEntry 调用,以加快聚合函数的计算。
  • 问题 #1320 “创建表时 read_buffer_docs/hits 不支持 k/m/g 语法”:CREATE TABLE 选项 read_buffer_docsread_buffer_hits 现在支持 k/m/g 语法。
  • 英语、德语和俄语的语言包现在可通过在 Linux 上执行命令 apt/yum install manticore-language-packs 轻松安装。在 macOS 上,使用命令 brew install manticoresoftware/tap/manticore-language-packs
  • 字段和属性顺序现在在 SHOW CREATE TABLEDESC 操作之间保持一致。
  • 如果执行 INSERT 查询时磁盘空间不足,新 INSERT 查询将失败,直到有足够的磁盘空间可用。
  • 添加了 UINT64() 类型转换函数。
  • /bulk 端点现在将空行处理为一个 commit 命令。更多信息见 这里
  • 已为 无效的索引提示 实现了警告,提供了更多透明度并允许错误缓解。
  • count(*) 与单个过滤器一起使用时,查询现在在可用时利用来自二级索引的预计算数据,大大加快了查询时间。

⚠️ 重大变更

  • ⚠️ 在版本 6.2.0 中创建或修改的表无法被旧版本读取。
  • ⚠️ 文档 ID 现在在索引和 INSERT 操作中作为无符号 64 位整数处理。
  • ⚠️ 查询优化器提示的语法已更新。新格式为 /*+ SecondaryIndex(uid) */。请注意,旧语法不再支持。
  • ⚠️ 问题 #1160:为了防止语法冲突,禁止在表名中使用 @
  • ⚠️ 标记为 indexedattribute 的字符串字段/属性现在在 INSERTDESCALTER 操作中被视为单个字段。
  • ⚠️ 问题 #1057:不支持 SSE 4.2 的系统将不再加载 MCL 库。
  • ⚠️ 问题 #1143agent_query_timeout 出现故障。已修复并生效。

Bug 修复

  • 提交 2a6e “DROP TABLE 时崩溃”:解决了在执行 DROP TABLE 语句时,RT 表写操作(优化、磁盘块保存)完成时间过长的问题。添加了警告,当执行 DROP TABLE 命令后表目录非空时进行通知。
  • 提交 2ebd:添加了对列式属性的支持,此前在用于多属性分组的代码中缺失。
  • 提交 3be4 解决了因磁盘空间耗尽可能导致的崩溃问题,通过正确处理 binlog 中的写入错误。
  • 提交 6adb:修复了在查询中使用多个列式扫描迭代器(或二级索引迭代器)时偶发的崩溃。
  • 提交 6bd9:使用预计算数据的排序器时,过滤器未被移除的问题已修复。
  • 提交 6d03:更新了 CBO 代码,以更好地估计多线程执行的基于行属性过滤的查询。
  • 提交 6dd3, Helm #56 “Kubernetes 集群中的致命崩溃转储”:修复了 JSON 根对象的布隆过滤器缺陷;修复了因按 JSON 字段过滤导致的守护进程崩溃。
  • 提交 6e1b 修正了因无效的 manticore.json 配置导致的守护进程崩溃。
  • 提交 6fbc 修复了 json 范围过滤器以支持 int64 值。
  • 提交 9c67 修复了 .sph 文件在 ALTER 时可能损坏的问题。
  • 提交 77cc:为替换语句的复制添加了共享密钥,解决了从多个主节点复制替换时出现的 pre_commit 错误。
  • 提交 2884 解决了对 'date_format()' 等函数进行 bigint 检查的问题。
  • 提交 9513:当排序器使用预计算数据时,迭代器不再显示在 SHOW META 中。
  • 提交 a2a7:更新了全文节点堆栈大小,防止复杂全文查询时崩溃。
  • 提交 a062:修复了在复制带有 JSON 和字符串属性的更新时导致崩溃的错误。
  • 提交 b3e6:更新了字符串构建器,使用 64 位整数以避免处理大数据集时崩溃。
  • 提交 c472:解决了跨多个索引进行 count distinct 时的崩溃问题。
  • 提交 d073:修复了即使禁用 pseudo_sharding,对 RT 索引的磁盘块查询仍可多线程执行的问题。
  • 提交 d205 修改了 show index status 命令返回的值集合,现在根据所用索引类型而异。
  • 提交 e9bc 修复了处理批量请求时的 HTTP 错误及错误未从网络循环返回给客户端的问题。
  • 提交 f77c PQ 使用了扩展堆栈。
  • 提交 fac2 更新了导出排序器输出以与 packedfactors() 对齐。
  • 提交 ff87: 修复了 SphinxQL 查询日志中过滤器中字符串列表的问题。
  • 问题 #589 “字符集定义似乎依赖于代码的排序顺序”:修正了重复项的错误字符集映射。
  • 问题 #811 “词形变化中映射多个词干干扰带有 CJK 标点符号的短语搜索”:修复了带有词形变化的短语查询中 ngram 令牌位置的问题。
  • 问题 #834 “搜索查询中的等号导致请求失败”:确保精确符号可以被转义,并修复了 expand_keywords 选项导致的双重精确扩展。
  • 问题 #864 “exceptions/stopwords 冲突”
  • 问题 #910 “调用 call snippets() 时使用 libstemmer_fr 和 index_exact_words 导致 Manticore 崩溃”:解决了调用 SNIPPETS() 时导致崩溃的内部冲突。
  • 问题 #946 “SELECT 期间出现重复记录”:修复了带有 not_terms_only_allowed 选项且包含已删除文档的 RT 索引查询结果中出现重复文档的问题。
  • 问题 #967 “在 UDF 函数中使用 JSON 参数导致崩溃”:修复了启用伪分片和带 JSON 参数的 UDF 搜索时守护进程崩溃的问题。
  • 问题 #1050 “FEDERATED 中的 count(*)”:修复了通过 FEDERATED 引擎带聚合的查询导致守护进程崩溃的问题。
  • 问题 #1052 修复了 rt_attr_json 列与列存储不兼容的问题。
  • 问题 #1072 “* 被 ignore_chars 从搜索查询中移除”:修复了查询中的通配符不受 ignore_chars 影响的问题。
  • 问题 #1075 “indextool --check 在存在分布式表时失败”:indextool 现兼容 json 配置中包含 'distributed' 和 'template' 索引的实例。
  • 问题 #1081 “特定 RT 数据集上的特定 select 导致 searchd 崩溃”:解决了带有 packedfactors 和大内部缓冲区的查询导致守护进程崩溃的问题。
  • 问题 #1095 “使用 not_terms_only_allowed 时已删除文档被忽略”
  • 问题 #1099 “indextool --dumpdocids 不工作”:恢复了 --dumpdocids 命令的功能。
  • 问题 #1100 “indextool --buildidf 不工作”:indextool 现在在完成 globalidf 后关闭文件。
  • 问题 #1104 “Count(*) 试图被当作远程表中的 schema set 处理”:解决了当代理返回空结果集时,守护进程对分布式索引查询发送错误消息的问题。
  • 问题 #1109 “FLUSH ATTRIBUTES 在 threads=1 时挂起”。
  • 问题 #1126 “查询期间与 MySQL 服务器断开连接 - manticore 6.0.5”:解决了使用多个列存储属性过滤器时发生的崩溃。
  • 问题 #1135 “JSON 字符串过滤的大小写敏感性”:修正了 HTTP 搜索请求中过滤器的排序规则以正确工作。
  • 问题 #1140 “错误字段中的匹配”:修复了与 morphology_skip_fields 相关的问题。
  • 问题 #1155 “通过 API 的系统远程命令应传递 g_iMaxPacketSize”:更新以绕过节点间复制命令的 max_packet_size 检查。此外,最新的集群错误已添加到状态显示中。
  • 问题 #1302 “优化失败时遗留临时文件”:修正了合并或优化过程中出错后遗留临时文件的问题。
  • 问题 #1304 “为 buddy 启动超时添加环境变量”:添加了环境变量 MANTICORE_BUDDY_TIMEOUT(默认 3 秒)以控制守护进程启动时等待 buddy 消息的时长。
  • 问题 #1305 “保存 PQ 元数据时整数溢出”:缓解了守护进程在保存大型 PQ 索引时的过度内存消耗。
  • 问题 #1306 “修改外部文件后无法重新创建 RT 表”:修正了外部文件为空字符串时的 alter 错误;修复了修改外部文件后 RT 索引外部文件未清理的问题。
  • 问题 #1307 “SELECT 语句 sum(value) as value 无法正常工作”:修复了带别名的选择列表表达式可能隐藏索引属性的问题;还修正了整数类型的 sum 转换为 int64 计数的问题。
  • Issue #1308 “避免在复制中绑定到localhost”:确保复制不会绑定到具有多个IP的主机名的localhost。
  • Issue #1309 “回复mysql客户端失败,数据大于16Mb”:修复了向客户端返回大于16Mb的SphinxQL数据包的问题。
  • Issue #1310 “‘指向外部文件的路径应为绝对路径’中的错误引用”:修正了SHOW CREATE TABLE中外部文件完整路径的显示。
  • Issue #1311 “调试构建在片段中长字符串时崩溃”:现在,SNIPPET()函数目标文本中允许长字符串(>255字符)。
  • Issue #1312 “kqueue轮询中使用后删除导致的虚假崩溃(master-agent)”:修复了在kqueue驱动系统(FreeBSD、MacOS等)上主节点无法连接代理时的崩溃。
  • Issue #1313 “连接自身时间过长”:在MacOS/BSD上从主节点连接代理时,现在使用统一的连接+查询超时,而不仅仅是连接超时。
  • Issue #1314 “pq(json元数据)中未达到的嵌入同义词加载失败”:修复了pq中的嵌入同义词标志。
  • Issue #1315 “允许某些函数(sint、fibonacci、second、minute、hour、day、month、year、yearmonth、yearmonthday)使用隐式提升的参数值”。
  • Issue #1321 “在fullscan中启用多线程SI,但限制线程数”:已在CBO中实现代码,以更好地预测在全文查询中使用二级索引时的多线程性能。
  • Issue #1322 “使用预计算排序器后count(*)查询仍然缓慢”:使用预计算数据的排序器时不再初始化迭代器,避免了性能下降。
  • Issue #1411 “sphinxql中的查询日志不保留MVA的原始查询”:现在,all()/any()被记录。

版本 6.0.4

发布:2023年3月15日

新功能

  • 改进了与Logstash、Beats等的集成,包括:
    • 支持Logstash版本7.6 - 7.15,Filebeat版本7.7 - 7.12
    • 自动模式支持。
    • 添加了对类似Elasticsearch格式的批量请求的处理。
  • Buddy提交 ce90 Manticore启动时记录Buddy版本。

Bug修复

  • Issue #588, Issue #942 修复了bigram索引中搜索元数据和调用关键词的错误字符。
  • Issue #1027 拒绝小写HTTP头。
  • Issue #1039 修复了守护进程在读取Buddy控制台输出时的内存泄漏。
  • Issue #1056 修复了问号的异常行为。
  • Issue #1064 - 修复了分词器小写表中的竞态条件导致的崩溃。
  • Commit 59bb 修复了JSON接口中对id显式设置为null的文档的批量写入处理。
  • Commit 7b6b 修复了CALL KEYWORDS中多个相同词项的词项统计。
  • Commit f381 Windows安装程序现在创建默认配置;运行时不再替换路径。
  • Commit 6940, Commit cc5a 修复了多网络节点集群的复制问题。
  • Commit 4972 修复了/pq HTTP端点为/json/pq HTTP端点的别名。
  • Commit 3b53 修复了Buddy重启时守护进程崩溃。
  • Buddy提交 fba9 显示无效请求接收时的原始错误。
  • Buddy提交 db95 允许备份路径中有空格,并对正则表达式做了一些魔法以支持单引号。

版本 6.0.2

发布:2023年2月10日

Bug修复

  • Issue #1024 crash 2 Facet搜索结果较多时崩溃/段错误
  • Issue #1029 - 警告:编译时值KNOWN_CREATE_SIZE(16)小于测量值(208)。建议修正该值!
  • Issue #1032 - Manticore 6.0.0纯索引崩溃
  • Issue #1033 - 守护进程重启时多个分布式丢失
  • Issue #1064 - 分词器小写表中的竞态条件

版本 6.0.0

发布:2023年2月7日

从本版本开始,Manticore Search 附带了 Manticore Buddy,这是一个用 PHP 编写的 sidecar 守护进程,负责处理不需要超低延迟或高吞吐量的高级功能。Manticore Buddy 在后台运行,您甚至可能不会意识到它正在运行。尽管对最终用户来说是不可见的,但使 Manticore Buddy 易于安装并与基于 C++ 的主守护进程兼容是一个重大挑战。这个重大变更将允许团队开发各种新的高级功能,例如分片编排、访问控制和身份验证,以及各种集成,如 mysqldump、DBeaver、Grafana mysql 连接器。目前它已经处理了 SHOW QUERIESBACKUP自动模式

本版本还包括 130 多个错误修复和众多功能,其中许多可以视为重大更新。

重大变更

  • 🔬 实验性功能:您现在可以执行与 Elasticsearch 兼容的 insertreplace JSON 查询,这使得可以使用 Manticore 与 Logstash(版本 < 7.13)、Filebeat 以及 Beats 家族的其他工具配合使用。默认启用。您可以使用 SET GLOBAL ES_COMPAT=off 来禁用它。
  • 支持 Manticore Columnar Library 2.0.0 ,在 二级索引 中进行了大量修复和改进。⚠️ 重大变更:从本版本开始,二级索引默认开启。如果您是从 Manticore 5 升级,请务必执行 ALTER TABLE table_name REBUILD SECONDARY。详情见下文。
  • 提交 c436 自动模式:您现在可以跳过创建表的步骤,只需插入第一条文档,Manticore 将根据其字段自动创建表。详细信息请参见 这里。您可以通过 searchd.auto_schema 开启或关闭此功能。
  • 基于成本的优化器 进行了大幅改进,在许多情况下降低了查询响应时间。
    • 问题 #1008 CBO 中的并行性能估计。
    • 问题 #1014 CBO 现在支持识别 二级索引,并能更智能地工作。
    • 提交 cef9 列式表/字段的编码统计信息现在存储在元数据中,帮助 CBO 做出更智能的决策。
    • 提交 2b95 添加了 CBO 提示,用于微调其行为。
  • 遥测:我们很高兴宣布本版本新增了遥测功能。该功能允许我们收集匿名且去标识化的指标,帮助我们提升产品的性能和用户体验。请放心,所有收集的数据都是完全匿名的,不会与任何个人信息关联。如果需要,可以在设置中轻松关闭此功能。
  • 提交 5aaf ALTER TABLE table_name REBUILD SECONDARY 命令,允许您随时重建二级索引,例如:
  • 问题 #821 新工具 manticore-backup 用于备份和恢复 Manticore 实例
  • SQL 命令 BACKUP 用于在 Manticore 内部执行备份。
  • SQL 命令 SHOW QUERIES 作为查看正在运行查询的简便方式,替代查看线程。
  • 问题 #551 SQL 命令 KILL 用于终止长时间运行的 SELECT
  • 聚合查询的动态 max_matches,以提高准确性并降低响应时间。

次要变更

  • 问题 #822 SQL 命令 FREEZE/UNFREEZE 用于准备实时/普通表进行备份。

  • 提交 c470 新设置 accurate_aggregationmax_matches_increase_threshold 用于控制聚合准确性。

  • 问题 #718 支持有符号的负 64 位 ID。注意,您仍然不能使用大于 2^63 的 ID,但现在可以使用范围从 -2^63 到 0 的 ID。

  • 由于我们最近添加了对二级索引的支持,"index" 一词可能指代二级索引、全文索引或普通/实时 index,这导致了混淆。为减少混淆,我们将后者重命名为 "table"。以下 SQL/命令行命令受此更改影响。它们的旧版本已被弃用,但仍可使用:

    • index <table name> => table <table name>
    • searchd -i / --index => searchd -t / --table
    • SHOW INDEX STATUS => SHOW TABLE STATUS
    • SHOW INDEX SETTINGS => SHOW TABLE SETTINGS
    • FLUSH RTINDEX => FLUSH TABLE
    • OPTIMIZE INDEX => OPTIMIZE TABLE
    • ATTACH TABLE plain TO RTINDEX rt => ATTACH TABLE plain TO TABLE rt
    • RELOAD INDEX => RELOAD TABLE
    • RELOAD INDEXES => RELOAD TABLES

    我们不打算使旧形式过时,但为了确保与文档的兼容性,建议在您的应用程序中更改名称。未来版本中将更改的是各种 SQL 和 JSON 命令输出中的 "index" 到 "table" 的重命名。

  • 带有有状态 UDF 的查询现在被强制在单线程中执行。

  • Issue #1011 重构了所有与时间调度相关的内容,为并行块合并做准备。

  • ⚠️ 重大变更:列存储格式已更改。您需要重建具有列属性的表。

  • ⚠️ 重大变更:二级索引文件格式已更改,因此如果您使用二级索引进行搜索,并且配置文件中有 searchd.secondary_indexes = 1,请注意新版本的 Manticore 将跳过加载具有二级索引的表。建议:

    • 升级前将配置文件中的 searchd.secondary_indexes 改为 0。
    • 运行实例。Manticore 会加载表并发出警告。
    • 对每个索引运行 ALTER TABLE <table name> REBUILD SECONDARY 以重建二级索引。

    如果您运行的是复制集群,则需要在所有节点上运行 ALTER TABLE <table name> REBUILD SECONDARY,或按照此说明操作,只需将 OPTIMIZE 替换为 ALTER .. REBUILD SECONDARY

  • ⚠️ 重大变更:binlog 版本已更新,因此之前版本的 binlog 将无法重放。升级过程中务必确保 Manticore Search 干净停止。停止之前的实例后,/var/lib/manticore/binlog/ 中除了 binlog.meta 外不应有其他 binlog 文件。

  • Issue #849 SHOW SETTINGS:现在可以在 Manticore 内部查看配置文件中的设置。

  • Issue #1007 SET GLOBAL CPUSTATS=1/0 用于开启/关闭 CPU 时间跟踪;SHOW THREADS 在 CPU 时间跟踪关闭时不再显示 CPU 统计信息。

  • Issue #1009 RT 表的 RAM 块段现在可以在 RAM 块刷新时合并。

  • Issue #1012indexer 输出中添加了二级索引进度。

  • Issue #1013 之前如果 Manticore 启动时无法开始服务某个表记录,会将其从索引列表中移除。新行为是保留该记录,尝试在下次启动时加载。

  • indextool --docextract 返回请求文档的所有词和命中。

  • Commit 2b29 环境变量 dump_corrupt_meta 允许在 searchd 无法加载索引时将损坏的表元数据转储到日志。

  • Commit c7a3 DEBUG META 可以显示 max_matches 和伪分片统计信息。

  • Commit 6bca 提供了比“Index header format is not json, will try it as binary...”更清晰的错误信息。

  • Commit bef3 乌克兰语词形还原器路径已更改。

  • Commit 4ae7SHOW META 中添加了二级索引统计信息。

  • Commit 2e7c JSON 接口现在可以通过 Swagger Editor 轻松可视化 https://manual.manticoresearch.com/Openapi#OpenAPI-specification

  • ⚠️ 重大变更:复制协议已更改。如果您运行复制集群,升级到 Manticore 5 时需要:

    • 先干净停止所有节点
    • 然后用 --new-cluster 启动最后停止的节点(Linux 下运行工具 manticore_new_cluster)。
    • 详细信息请参阅重启集群

与 Manticore 列存储库相关的更改

  • 重构了二级索引与列存储的集成。
  • Commit efe2 Manticore 列存储库优化,通过部分预先的最小/最大值评估降低响应时间。
  • Commit 2757 如果磁盘块合并被中断,守护进程现在会清理与 MCL 相关的临时文件。
  • Commit e9c6 在崩溃时,Columnar 和二级库版本会被写入日志。
  • Commit f5e8 为二级索引添加了快速文档列表回绕支持。
  • Commit 06df 类似 select attr, count(*) from plain_index(无过滤)的查询在使用 MCL 时现在更快。
  • Commit 0a76 在 HandleMysqlSelectSysvar 中添加 @@autocommit,以兼容 mysql 8.25 以上的 .net 连接器。
  • ⚠️ 重大变更MCL Issue #17 MCL:为 columnar 扫描添加 SSE 代码。MCL 现在至少需要 SSE4.2。

与打包相关的变更

  • Commit 4d19 ⚠️ 重大变更:不再支持 Debian Stretch 和 Ubuntu Xenial。
  • 支持 RHEL 9,包括 Centos 9、Alma Linux 9 和 Oracle Linux 9。
  • Issue #924 支持 Debian Bookworm。
  • Issue #636 打包:为 Linux 和 MacOS 提供 arm64 构建。
  • PR #26 多架构(x86_64 / arm64)docker 镜像。
  • 为贡献者简化的包构建
  • 现在可以使用 APT 安装特定版本。
  • Commit a6b8 Windows 安装程序(之前只提供压缩包)。
  • 切换到使用 CLang 15 编译。
  • ⚠️ 重大变更:自定义 Homebrew 配方,包括 Manticore Columnar Library 的配方。安装 Manticore、MCL 及其他必要组件,请使用以下命令 brew install manticoresoftware/manticore/manticoresearch manticoresoftware/manticore/manticore-extra

Bug 修复

  • Issue #479 名为 text 的字段
  • Issue #501 id 不能是非 bigint 类型
  • Issue #646 ALTER 与名为 "text" 的字段冲突
  • Issue #652 可能的 BUG:HTTP(JSON)偏移和限制影响 facet 结果
  • Issue #827 searchd 在高负载下挂起/崩溃
  • Issue #996 PQ 索引内存溢出
  • Commit 1041 binlog_flush = 1 自 Sphinx 起一直有问题。已修复。
  • MCL Issue #14 MCL:当 ft 字段过多时选择崩溃
  • Issue #470 sql_joined_field 无法存储
  • Issue #713 使用 LEVENSHTEIN() 时崩溃
  • Issue #743 Manticore 意外崩溃且无法正常重启
  • Issue #788 通过 /sql 调用 KEYWORDS 返回控制字符,导致 json 解析失败
  • Issue #789 mariadb 无法创建 FEDERATED 表
  • Issue #796 警告:dlopen() 失败:/usr/bin/lib_manticore_columnar.so:无法打开共享对象文件:没有此文件或目录
  • Issue #797 通过 api 使用 ZONESPAN 搜索时 Manticore 崩溃
  • Issue #799 使用多个索引和 facet distinct 时权重错误
  • Issue #801 SQL 索引重处理后 SphinxQL 分组查询挂起
  • Issue #802 MCL:Indexer 在 5.0.2 和 manticore-columnar-lib 1.15.4 中崩溃
  • Issue #813 Manticore 5.0.2 FEDERATED 返回空集(MySQL 8.0.28)
  • Issue #824 在两个索引上执行 COUNT DISTINCT,结果为零时抛出内部错误
  • Issue #826 删除查询时崩溃
  • Issue #843 MCL:长文本字段的 Bug
  • Issue #856 5.0.2 rtindex:聚合搜索限制行为不符合预期
  • Issue #863 即使搜索应返回多个结果,返回的 Hits 也是 Nonetype 对象
  • Issue #870 在 SELECT 表达式中使用 Attribute 和 Stored Field 时崩溃
  • Issue #872 崩溃后表变得不可见
  • Issue #877 搜索查询中两个负面词导致错误:查询不可计算
  • Issue #878 通过 json query_string 使用 a -b -c 无效
  • Issue #886 使用查询匹配的伪分片
  • Issue #893 Manticore 5.0.2 的 min/max 函数未按预期工作...
  • Issue #896 字段 "weight" 解析不正确
  • Issue #897 Manticore 服务启动时崩溃并持续重启
  • Issue #900 group by j.a, smth 工作异常
  • Issue #913 当在 ranker 中使用 expr 时,searchd 崩溃,但仅限于带有两个邻近条件的查询
  • Issue #916 net_throttle_action 失效
  • Issue #919 MCL:Manticore 在查询执行时崩溃,集群恢复期间也有崩溃
  • Issue #925 SHOW CREATE TABLE 输出缺少反引号
  • Issue #930 现在可以通过 JDBC 连接器从 Java 查询 Manticore
  • Issue #933 bm25f 排名问题
  • Issue #934 无配置索引在 watchdog 中冻结于首次加载状态
  • Issue #937 排序 facet 数据时发生段错误
  • Issue #940 CONCAT(TO_STRING) 导致崩溃
  • Issue #947 在某些情况下,单个简单的 select 查询可能导致整个实例停滞,无法登录或执行其他查询,直到该查询完成
  • Issue #948 索引器崩溃
  • Issue #950 facet distinct 计数错误
  • Issue #953 内置 sph04 排名器中 LCS 计算不正确
  • Issue #955 5.0.3 开发版崩溃
  • Issue #963 在 engine columnar 上使用 json 的 FACET 导致崩溃
  • Issue #982 MCL:5.0.3 从二级索引崩溃
  • PR #984 HandleMysqlSelectSysvar 中的 @@autocommit
  • PR #985 修复 RT 索引中的线程块分配
  • Issue #985 修复 RT 索引中的线程块分配
  • Issue #986 错误的默认 max_query_time
  • Issue #987 多线程执行中使用正则表达式时崩溃
  • Issue #988 反向索引兼容性破损
  • Issue #989 indextool 报告检查 columnar 属性时出错
  • Issue #990 json grouper 克隆的内存泄漏
  • Issue #991 levenshtein 函数克隆的内存泄漏
  • Issue #992 加载元数据时错误信息丢失
  • Issue #993 传播来自动态索引/子键和系统变量的错误
  • Issue #994 在列存储中对列式字符串执行 count distinct 导致崩溃
  • Issue #995 MCL:taxi1 的 min(pickup_datetime) 导致崩溃
  • Issue #997 空的 excludes JSON 查询从选择列表中移除列
  • Issue #998 当前调度器上运行的二级任务有时会导致异常副作用
  • Issue #999 facet distinct 与不同模式时崩溃
  • Issue #1000 MCL:未加载列存储库时运行后列式 rt 索引损坏
  • Issue #1001 json 中隐式 cutoff 不起作用
  • Issue #1002 列式分组器问题
  • Issue #1003 无法删除索引中的最后一个字段
  • Issue #1004 --new-cluster 后行为异常
  • Issue #1005 “columnar library not loaded”,但其实不需要
  • Issue #1006 删除查询无错误提示
  • Issue #1010 修正 Windows 构建中的 ICU 数据文件位置
  • PR #1018 握手发送问题
  • Issue #1020 在 show create table 中显示 id
  • Issue #1024 crash 1 在 Facet 搜索大量结果时崩溃 / 段错误。
  • Issue #1026 RT 索引:当插入大量文档且 RAMchunk 满时,searchd “卡住” 永远不动
  • Commit 4739 复制节点间忙碌时,关闭时线程卡住
  • Commit ab87 JSON 范围过滤器中混合浮点数和整数可能导致 Manticore 忽略过滤器
  • Commit d001 JSON 中的浮点过滤器不准确
  • Commit 4092 如果索引被修改,丢弃未提交的事务(否则可能崩溃)
  • Commit 9692 使用反斜杠时查询语法错误
  • Commit 0c19 SHOW STATUS 中 workers_clients 可能错误
  • Commit 1772 修复合并无文档存储的内存段时崩溃
  • Commit f45b 修复 JSON 过滤器中遗漏的 ALL/ANY 条件
  • Commit 3e83 如果 searchd 从无法写入的目录启动,复制可能失败并报错 got exception while reading ist stream: mkstemp(./gmb_pF6TJi) failed: 13 (Permission denied)
  • Commit 92e5 自 4.0.2 版本起崩溃日志只包含偏移量,本次提交修复了该问题。

版本 5.0.2

发布:2022年5月30日

Bug 修复

  • Issue #791 - 错误的堆栈大小可能导致崩溃。

版本 5.0.0

发布:2022年5月18日

主要新功能

  • 🔬 支持 Manticore Columnar Library 1.15.2,启用 二级索引 测试版。对于普通和实时的列式及行式索引(如果使用了 Manticore Columnar Library),默认开启二级索引构建,但要启用搜索功能,需要在配置文件中或通过 SET GLOBAL 设置 secondary_indexes = 1。该新功能支持除旧版 Debian Stretch 和 Ubuntu Xenial 以外的所有操作系统。

  • 只读模式:现在可以指定只处理读取查询、忽略任何写入的监听器。

  • 新增 /cli 端点,使通过 HTTP 运行 SQL 查询更简单。

  • 通过 HTTP JSON 进行批量 INSERT/REPLACE/DELETE 更快:之前可以通过 HTTP JSON 协议提供多个写入命令,但它们是逐个处理的,现在作为单个事务处理。

  • #720 JSON 协议支持 嵌套过滤器。之前无法在 JSON 中编码如 a=1 and (b=2 or c=3) 的逻辑:must(AND)、should(OR)和 must_not(NOT)仅在最高层级生效。现在支持嵌套。

  • 支持 HTTP 协议中的 分块传输编码。现在可以在应用中使用分块传输发送大型批次,减少资源消耗(无需计算 Content-Length)。服务器端,Manticore 现在始终以流式方式处理传入的 HTTP 数据,无需等待整个批次传输完成,这:

    • 降低峰值内存使用,减少 OOM 风险
    • 缩短响应时间(我们的测试显示处理 100MB 批次时间减少约 11%)
    • 允许绕过 max_packet_size 限制,传输远大于最大允许值(128MB)的批次,例如一次传输 1GB。
  • #719 HTTP 接口支持 100 Continue:现在可以从 curl(包括各种编程语言使用的 curl 库)传输大批次,这些默认使用 Expect: 100-continue 并在实际发送批次前等待一段时间。之前需要添加 Expect: 头部,现在不再需要。

    MORE
  • ⚠️ 重大变更: 伪分片 默认启用。如果您想禁用它,请确保在 Manticore 配置文件的 searchd 部分添加 pseudo_sharding = 0

  • 真实时间/普通索引中至少包含一个全文字段不再是强制性的。现在即使不涉及全文搜索的场景,也可以使用 Manticore。

  • Manticore Columnar Library 支持的属性的快速获取:像 select * from <columnar table> 这样的查询现在比以前快得多,尤其是在模式中有许多字段时。

  • ⚠️ 重大变更: 隐式的cutoff。Manticore 现在不会花费时间和资源处理您不需要返回结果集中的数据。缺点是它会影响 SHOW META 中的 total_found 和 JSON 输出中的 hits.total。只有当您看到 total_relation: eq 时,数值才准确;而 total_relation: gte 表示实际匹配文档数大于您获得的 total_found 值。要保持之前的行为,可以使用搜索选项 cutoff=0,这会使 total_relation 始终为 eq

  • ⚠️ 重大变更: 所有全文字段现在默认存储。您需要使用 stored_fields =(空值)来使所有字段不存储(即恢复之前的行为)。

  • #715 HTTP JSON 支持搜索选项

小改动

  • ⚠️ 重大变更: 索引元文件格式变更。之前元文件(.meta.sph)是二进制格式,现在改为 JSON 格式。新版本的 Manticore 会自动转换旧索引,但:
    • 您可能会看到类似 WARNING: ... syntax error, unexpected TOK_IDENT 的警告
    • 您将无法使用旧版本的 Manticore 运行该索引,请确保您有备份
  • ⚠️ 重大变更:通过HTTP keep-alive支持会话状态。当客户端也支持时,这使得HTTP变为有状态。例如,使用新的/cli端点和HTTP keep-alive(所有浏览器默认开启),你可以在SELECT之后调用SHOW META,其行为与通过mysql相同。注意,之前也支持Connection: keep-alive HTTP头,但它仅导致复用同一连接。从此版本开始,它还使会话变为有状态。
  • 现在你可以指定columnar_attrs = *,在plain模式下将所有属性定义为列式存储,这在属性列表较长时非常有用。
  • 更快的复制SST
  • ⚠️ 重大变更:复制协议已更改。如果你运行复制集群,升级到Manticore 5时需要:
    • 先干净地停止所有节点
    • 然后用--new-cluster启动最后停止的节点(Linux下运行工具manticore_new_cluster)。
    • 详细信息请阅读重启集群
  • 复制改进:
    • 更快的SST
    • 噪声抗干扰能力,帮助在复制节点间网络不稳定时保持稳定
    • 改进的日志记录
  • 安全改进:如果配置中未指定listen,Manticore现在监听127.0.0.1而非0.0.0.0。尽管Manticore Search默认配置中指定了listen,且通常不会出现无listen配置的情况,但仍有可能。之前Manticore监听0.0.0.0,这不安全,现在监听127.0.0.1,通常不会暴露于互联网。
  • 对列式属性的聚合更快。
  • 提高AVG()的准确性:之前Manticore内部聚合使用float,现在改用double,显著提高准确度。
  • 改进对JDBC MySQL驱动的支持。
  • 支持jemallocDEBUG malloc_stats
  • optimize_cutoff现在可作为每表设置,在CREATE或ALTER表时设置。
  • ⚠️ 重大变更query_log_format默认值现在为sphinxql。如果你习惯plain格式,需要在配置文件中添加query_log_format = plain
  • 显著减少内存消耗:在使用存储字段且进行长时间高强度插入/替换/优化工作负载时,Manticore显著减少RAM使用。
  • shutdown_timeout默认值从3秒增加到60秒。
  • Commit ffd0 支持Java mysql连接器 >= 6.0.3:在Java mysql连接6.0.3中,他们更改了连接mysql的方式,导致与Manticore不兼容。现在支持新行为。
  • Commit 1da6 禁止在加载索引时(如searchd启动时)保存新的磁盘块。
  • Issue #746 支持glibc >= 2.34。
  • Issue #784 将“VIP”连接与普通(非VIP)连接分开计数。之前VIP连接计入max_connections限制,可能导致非VIP连接出现“已达最大”错误。现在VIP连接不计入限制。当前VIP连接数可通过SHOW STATUSstatus查看。
  • ID现在可以显式指定。
  • Issue #687 支持mysql协议的zstd压缩。

⚠️ 其他小的重大变更

  • ⚠️ BM25F公式略有更新以提升搜索相关性。仅影响使用函数BM25F()的搜索结果,不改变默认排名公式行为。
  • ⚠️ REST /sql端点行为更改:/sql?mode=raw现在需要转义并返回数组。
  • ⚠️ /bulk INSERT/REPLACE/DELETE请求响应格式更改:
    • 之前每个子查询构成单独事务,返回单独响应
    • 现在整个批次视为单一事务,返回单一响应
  • ⚠️ 搜索选项low_priorityboolean_simplify现在需要赋值(0/1):之前可写SELECT ... OPTION low_priority, boolean_simplify,现在需写SELECT ... OPTION low_priority=1, boolean_simplify=1
  • ⚠️ 如果你使用旧版phppythonjava客户端,请访问相应链接获取更新版本。旧版本与Manticore 5不完全兼容。
  • ⚠️ HTTP JSON请求在query_log_format=sphinxql模式下以不同格式记录。之前仅记录全文部分,现在按原样记录。

新软件包

  • ⚠️ 重大变更:由于新结构,升级到Manticore 5时建议先卸载旧软件包再安装新包:

    • 基于RPM的系统:yum remove manticore*
    • Debian和Ubuntu:apt remove manticore*
  • 新的 deb/rpm 包结构。之前的版本提供了:

    • manticore-server 包含 searchd(主搜索守护进程)及其所需的所有内容
    • manticore-tools 包含 indexerindextool
    • manticore 包含所有内容
    • manticore-all RPM 作为元包,引用 manticore-servermanticore-tools

    新结构为:

    • manticore - deb/rpm 元包,安装上述所有包作为依赖
    • manticore-server-core - searchd 及其独立运行所需的所有内容
    • manticore-server - systemd 文件及其他辅助脚本
    • manticore-tools - indexerindextool 及其他工具
    • manticore-common - 默认配置文件、默认数据目录、默认停用词
    • manticore-icudatamanticore-devmanticore-converter 变化不大
    • 包含所有包的 .tgz 捆绑包
  • 支持 Ubuntu Jammy

  • 通过 YUM repo 支持 Amazon Linux 2

Bug 修复

  • Issue #815 使用 UDF 函数时随机崩溃
  • Issue #287 索引 RT 索引时内存溢出
  • Issue #604 3.6.0,4.2.0 sphinxql-parser 破坏性更改
  • Issue #667 FATAL: 内存不足(无法分配 9007199254740992 字节)
  • Issue #676 字符串未正确传递给 UDF
  • Issue #698 尝试向 rt 索引添加文本列后 searchd 崩溃
  • Issue #705 Indexer 无法找到所有列
  • Issue #709 按 json.boolean 分组错误
  • Issue #716 indextool 与索引相关的命令(如 --dumpdict)失败
  • Issue #724 字段从选择中消失
  • Issue #727 .NET HttpClient 使用 application/x-ndjson 时 Content-Type 不兼容
  • Issue #729 字段长度计算
  • Issue #730 创建/插入/删除列式表时存在内存泄漏
  • Issue #731 某些条件下结果中出现空列
  • Issue #749 守护进程启动时崩溃
  • Issue #750 守护进程启动时挂起
  • Issue #751 SST 时崩溃
  • Issue #752 当 engine='columnar' 时,json 属性被标记为列式
  • Issue #753 复制监听地址为 0
  • Issue #754 columnar_attrs = * 在 csvpipe 中不起作用
  • Issue #755 rt 中选择列式浮点数时崩溃
  • Issue #756 Indextool 在检查时更改 rt 索引
  • Issue #757 需要检查监听端口范围是否有交叉
  • Issue #758 RT 索引保存磁盘块失败时记录原始错误
  • Issue #759 RE2 配置只报告一个错误
  • Issue #760 提交 5463778558586d2508697fa82e71d657ac36510f 中的内存消耗变化
  • Issue #761 第三节点脏重启后未成为非主集群
  • Issue #762 更新计数器增加了 2
  • Issue #763 新版本 4.2.1 损坏了使用形态学的 4.2.0 创建的索引
  • Issue #764 json 键中无转义 /sql?mode=raw
  • Issue #765 使用函数隐藏其他值
  • Issue #766 FixupAttrForNetwork 中一行代码触发内存泄漏
  • Issue #767 4.2.0 和 4.2.1 中与文档存储缓存相关的内存泄漏
  • Issue #768 网络上传输存储字段时出现奇怪的乒乓现象
  • Issue #769 如果 'common' 部分未提及,lemmatizer_base 重置为空
  • Issue #770 pseudo_sharding 使按 id 查询变慢
  • Issue #771 使用 jemalloc 时 DEBUG malloc_stats 输出为零
  • Issue #772 删除/添加列使值不可见
  • Issue #773 无法向列式表添加 bit(N) 列
  • Issue #774 manticore.json 启动时 "cluster" 变为空
  • 提交 1da4 HTTP 操作未在 SHOW STATUS 中跟踪
  • 提交 3810 禁用低频单关键词查询的伪分片
  • 提交 8003 修复存储属性与索引合并的问题
  • 提交 cddf 泛化了不同值的获取器;为列式字符串添加了专门的不同值获取器
  • 提交 fba4 修复从文档存储中获取空整数属性的问题
  • 提交 f300 查询日志中 ranker 可能被指定两次

版本 4.2.0,2021年12月23日

主要新特性

  • 实时索引和全文查询的伪分片支持。在之前的版本中我们添加了有限的伪分片支持。从此版本开始,只需启用 searchd.pseudo_sharding,即可获得伪分片和多核处理器的所有优势。最酷的是你无需对索引或查询做任何修改,只需启用它,如果有空闲 CPU,系统将利用它来降低响应时间。它支持全文、过滤和分析查询的普通和实时索引。例如,启用伪分片后,在 Hacker news 精选评论数据集(放大100倍,含1.16亿文档的普通索引)上,大多数查询的平均响应时间降低约10倍

4.2.0 中伪分片开启与关闭对比

  • PQ 事务现在是原子且隔离的。之前 PQ 事务支持有限。此改进使得 REPLACE 到 PQ 的速度更快,尤其是在需要一次替换大量规则时。性能详情:
‹›
  • 4.0.2
  • 4.2.0
📋

插入 100 万条 PQ 规则需要 48 秒,而以 1 万条批次替换仅 4 万条规则需要 406 秒

root@perf3 ~ # mysql -P9306 -h0 -e "drop table if exists pq; create table pq (f text, f2 text, j json, s string) type='percolate';"; date; for m in `seq 1 1000`; do (echo -n "insert into pq (id,query,filters,tags) values "; for n in `seq 1 1000`; do echo -n "(0,'@f (cat | ( angry dog ) | (cute mouse)) @f2 def', 'j.json.language=\"en\"', '{\"tag1\":\"tag1\",\"tag2\":\"tag2\"}')"; [ $n != 1000 ] && echo -n ","; done; echo ";")|mysql -P9306 -h0; done; date; mysql -P9306 -h0 -e "select count(*) from pq"

Wed Dec 22 10:24:30 AM CET 2021
Wed Dec 22 10:25:18 AM CET 2021
+----------+
| count(*) |
+----------+
|  1000000 |
+----------+

root@perf3 ~ # date; (echo "begin;"; for offset in `seq 0 10000 30000`; do n=0; echo "replace into pq (id,query,filters,tags) values "; for id in `mysql -P9306 -h0 -NB -e "select id from pq limit $offset, 10000 option max_matches=1000000"`; do echo "($id,'@f (tiger | ( angry bear ) | (cute panda)) @f2 def', 'j.json.language=\"de\"', '{\"tag1\":\"tag1\",\"tag2\":\"tag2\"}')"; n=$((n+1)); [ $n != 10000 ] && echo -n ","; done; echo ";"; done; echo "commit;") > /tmp/replace.sql; date
Wed Dec 22 10:26:23 AM CET 2021
Wed Dec 22 10:26:27 AM CET 2021
root@perf3 ~ # time mysql -P9306 -h0 < /tmp/replace.sql

real    6m46.195s
user    0m0.035s
sys 0m0.008s

次要变更

  • optimize_cutoff 现作为 searchd 配置节中的选项提供。当你想全局限制所有索引中的 RT 块数量时非常有用。
  • 提交 0087 精确支持多个本地物理索引(实时/普通)中具有相同字段集/顺序的 count(distinct ...)FACET ... distinct
  • PR #598YEAR() 和其他时间戳函数添加 bigint 支持。
  • 提交 8e85 自适应 rt_mem_limit。之前 Manticore Search 在保存新的磁盘块之前,严格收集到 rt_mem_limit 大小的数据,保存时仍会收集多达 10%(即双缓冲)以减少插入暂停。如果该限制也被耗尽,则在磁盘块完全保存之前阻止添加新文档。新的自适应限制基于我们现在有了 auto-optimize 的事实,因此磁盘块不完全遵守 rt_mem_limit 并提前开始刷新并不严重。现在我们收集最多 50% 的 rt_mem_limit 并保存为磁盘块。保存时,我们查看统计数据(保存了多少,保存时有多少新文档到达)并重新计算下次使用的初始比率。例如,如果保存了 9000 万文档,保存时又到达了 1000 万文档,则比率为 90%,因此下次可以收集最多 90% 的 rt_mem_limit 后再开始刷新另一个磁盘块。比率值自动计算,范围从 33.3% 到 95%。
  • 问题 #628 PostgreSQL 源的 unpack_zlib。感谢 Dmitry Voronin贡献
  • 提交 6d54 indexer -v--version。之前你仍能看到 indexer 的版本,但 -v/--version 不被支持。
  • 问题 #662 当通过 systemd 启动 Manticore 时,默认无限 mlock 限制。
  • 提交 63c8 协程读写锁的自旋锁改为操作队列。
  • 提交 4113 环境变量 MANTICORE_TRACK_RT_ERRORS,用于调试 RT 段损坏。

重大变更

  • Binlog 版本已提升,之前版本的 binlog 不会被重放,因此请确保在升级过程中干净地停止 Manticore Search:停止之前的实例后,/var/lib/manticore/binlog/ 目录中除了 binlog.meta 外不应有 binlog 文件。
  • 提交 3f65show threads option format=all 中新增了 "chain" 列。它显示了一些任务信息票据的堆栈,对性能分析非常有用,因此如果你在解析 show threads 输出,请注意新增的列。
  • searchd.workers 自 3.5.0 起已废弃,现在是弃用状态,如果你的配置文件中仍有该项,启动时会触发警告。Manticore Search 会启动,但会有警告提示。
  • 如果你使用 PHP 和 PDO 访问 Manticore,需要设置 PDO::ATTR_EMULATE_PREPARES

Bug 修复

  • 问题 #650 Manticore 4.0.2 比 Manticore 3.6.3 慢。4.0.2 在批量插入方面比之前版本更快,但单条文档插入明显变慢。此问题已在 4.2.0 中修复。
  • 提交 22f4 RT 索引在高强度 REPLACE 负载下可能损坏,或导致崩溃
  • 提交 03be 修正了合并分组器和 group N 排序器时的平均值计算;修正了聚合合并
  • 提交 2ea5 indextool --check 可能崩溃
  • 提交 7ec7 由 UPDATE 导致的内存耗尽问题
  • 提交 658a 守护进程在 INSERT 时可能挂起
  • 提交 46e4 守护进程在关闭时可能挂起
  • 提交 f8d7 守护进程在关闭时可能崩溃
  • 提交 733a 守护进程崩溃时可能挂起
  • 提交 f7f8 守护进程启动时尝试用无效节点列表重新加入集群可能崩溃
  • 提交 1401 分布式索引在 RT 模式下启动时如果无法解析其中一个代理,可能会被完全遗忘
  • 问题 #683 attr bit(N) engine='columnar' 失败
  • 问题 #682 创建表失败,但留下目录
  • 问题 #663 配置失败,提示未知键名 'attr_update_reserve'
  • 问题 #632 Manticore 在批量查询时崩溃
  • 问题 #679 批量查询在 v4.0.3 中再次导致崩溃
  • 提交 f7f8 修复了守护进程启动时尝试用无效节点列表重新加入集群导致崩溃的问题
  • 问题 #643 Manticore 4.0.2 在批量插入后不接受连接
  • 问题 #635 FACET 查询中使用 ORDER BY JSON.field 或字符串属性可能崩溃
  • 问题 #634 使用 packedfactors 查询时崩溃 SIGSEGV
  • 提交 4165 morphology_skip_fields 不支持 create table

版本 4.0.2,2021年9月21日

主要新特性

  • 全面支持 Manticore Columnar Library。之前 Manticore Columnar Library 仅支持普通索引。现在支持:

    • 实时索引的 INSERTREPLACEDELETEOPTIMIZE
    • 复制功能
    • ALTER
    • indextool --check
  • 自动索引压缩 (问题 #478)。终于,你不必手动调用 OPTIMIZE 或通过定时任务或其他自动化方式执行。Manticore 现在默认自动完成此操作。你可以通过全局变量 optimize_cutoff 设置默认压缩阈值。

  • 块快照和锁系统重构。这些改动初看可能无明显变化,但显著改善了实时索引中许多操作的行为。简而言之,之前大多数 Manticore 数据操作严重依赖锁,现在改用磁盘块快照。

  • 实时索引批量 INSERT 性能显著提升。例如,在 Hetzner 的 AX101 服务器(SSD,128 GB 内存,AMD Ryzen™ 9 5950X(16*2 核))上,3.6.0 版本可实现每秒插入 236K 文档,表结构为 name text, email string, description text, age int, active bit(1)(默认 rt_mem_limit,批量大小 25000,16 并发插入工作线程,总计插入 1600 万文档)。4.0.2 版本在相同并发/批量/数量下达到 每秒 357K 文档

    MORE
  • ALTER 可以添加/删除全文字段(在RT模式下)。之前只能添加/删除属性。

  • 🔬 实验性:全扫描查询的伪分片 - 允许并行化任何非全文搜索查询。现在无需手动准备分片,只需启用新选项 searchd.pseudo_sharding,即可期望非全文搜索查询响应时间降低至最多 CPU核心数 倍。注意它可能会占用所有现有CPU核心,因此如果你不仅关心延迟,还关心吞吐量,请谨慎使用。

小改动

  • 通过 APT仓库 支持 Linux Mint 和 Ubuntu Hirsute Hippo
  • 在某些情况下,通过HTTP按ID更新大索引更快(取决于ID分布)
  • 671e65a2 - 为 lemmatizer-uk 添加缓存
‹›
  • 3.6.0
  • 4.0.2
📋
time curl -X POST -d '{"update":{"index":"idx","id":4611686018427387905,"doc":{"mode":0}}}' -H "Content-Type: application/x-ndjson" http://127.0.0.1:6358/json/bulk
real    0m43.783s
user    0m0.008s
sys     0m0.007s

重大变更

  • 新版本可以读取旧索引,但旧版本无法读取Manticore 4的索引
  • 移除隐式按id排序。如需排序请显式指定
  • charset_table 默认值从 0..9, A..Z->a..z, _, a..z, U+410..U+42F->U+430..U+44F, U+430..U+44F, U+401->U+451, U+451 改为 non_cjk
  • OPTIMIZE 自动执行。如不需要,请确保在配置文件的 searchd 部分设置 auto_optimize=0
  • Issue #616 ondisk_attrs_default 已弃用,现已移除
  • 对贡献者:Linux构建现在使用Clang编译器,根据测试它能构建更快的Manticore Search和Manticore Columnar库
  • 如果搜索查询中未指定 max_matches,则会隐式更新为满足新列存储性能所需的最低值。这可能影响 SHOW META 中的 total 指标,但不影响实际找到文档数的 total_found

从Manticore 3迁移

  • 确保干净停止Manticore 3:
    • /var/lib/manticore/binlog/ 中不应有binlog文件(目录中只应有 binlog.meta
    • 否则Manticore 4无法回复binlog的索引将无法运行
  • 新版本可以读取旧索引,但旧版本无法读取Manticore 4的索引,因此如果想轻松回滚新版本,请务必备份
  • 如果运行复制集群,请确保:
    • 先干净停止所有节点
    • 然后用 --new-cluster 启动最后停止的节点(Linux下运行工具 manticore_new_cluster
    • 更多细节请阅读 重启集群

Bug修复

  • 修复了大量复制问题:
    • Commit 696f - 修复了joiner节点在SST期间激活索引时的崩溃;在joiner节点写入文件块时添加sha1校验以加速索引加载;在索引加载时添加了joiner节点的变更索引文件轮换;当激活索引被donor节点的新索引替换时,添加了joiner节点的索引文件删除;为donor节点发送文件和块添加了复制日志点
    • 提交 b296 - 当地址不正确时,JOIN CLUSTER 导致崩溃
    • 提交 418b - 在大型索引的初始复制期间,加入节点可能会失败并显示 ERROR 1064 (42000): invalid GTID, (null),当另一个节点加入时,捐赠节点可能变得无响应
    • 提交 6fd3 - 大型索引的哈希可能计算错误,导致复制失败
    • 问题 #615 - 集群重启时复制失败
  • 问题 #574 - indextool --help 不显示参数 --rotate
  • 问题 #578 - searchd 空闲时 CPU 使用率高,约一天后出现
  • 问题 #587 - 立即刷新 .meta 文件
  • 问题 #617 - manticore.json 被清空
  • 问题 #618 - searchd --stopwait 在 root 下失败。它还修复了 systemctl 行为(之前 ExecStop 显示失败且未能充分等待 searchd 正确停止)
  • 问题 #619 - INSERT/REPLACE/DELETE 与 SHOW STATUS。command_insertcommand_replace 等显示了错误的指标
  • 问题 #620 - 纯索引的 charset_table 默认值错误
  • 提交 8f75 - 新的磁盘块未被 mlocked
  • 问题 #607 - 当无法通过名称解析节点时,Manticore 集群节点崩溃
  • 问题 #623 - 更新索引的复制可能导致未定义状态
  • 提交 ca03 - 索引器在索引带有 json 属性的纯索引源时可能挂起
  • 提交 53c7 - 修复 PQ 索引中的不等表达式过滤器
  • 提交 ccf9 - 修复列表查询中超过 1000 条匹配的选择窗口。之前 SELECT * FROM pq ORDER BY id desc LIMIT 1000 , 100 OPTION max_matches=1100 无法正常工作
  • 提交 a048 - 对 Manticore 的 HTTPS 请求可能导致类似 "max packet size(8388608) exceeded" 的警告
  • 问题 #648 - Manticore 3 在字符串属性更新几次后可能挂起

版本 3.6.0,2021年5月3日

Manticore 4 之前的维护版本

主要新功能

  • 支持纯索引的 Manticore Columnar Library。纯索引新增设置 columnar_attrs
  • 支持 乌克兰语词形还原器
  • 完全修订的直方图。在构建索引时,Manticore 也会为其中的每个字段构建直方图,随后用于更快的过滤。3.6.0 中算法被完全修订,如果你有大量数据并进行大量过滤,可以获得更高性能。

次要更改

优化

  • 更快的 JSON 解析,我们的测试显示在类似 WHERE json.a = 1 的查询中延迟降低了 3-4%
  • 非文档化命令 DEBUG SPLIT,作为自动分片/重新平衡的前提条件

Bug 修复

  • 问题 #584 - 不准确且不稳定的 FACET 结果
  • 问题 #506 - 使用 MATCH 时的奇怪行为:受此问题影响的用户需要重建索引,因为问题出在索引构建阶段
  • 问题 #387 - 运行带有 SNIPPET() 函数的查询时间歇性核心转储
  • 用于处理复杂查询的堆栈优化:
  • Issue #461 - 使用 IN 条件的更新未正确生效
  • Issue #464 - 在 CALL PQ 之后立即执行 SHOW STATUS 返回 - Issue #481 - 修复静态二进制构建
  • Issue #502 - 多查询中的错误
  • Issue #514 - 使用 'create table' 时无法使用不寻常的列名
  • Commit d1db - 在重放带有字符串属性更新的 binlog 时守护进程崩溃;将 binlog 版本设置为 10
  • Commit 775d - 修复表达式堆栈帧检测运行时错误(测试 207)
  • Commit 4795 - 空存储查询的 percolate 索引过滤器和标签为空(测试 369)
  • Commit c3f0 - 在网络延迟长且错误率高的情况下(不同数据中心复制)复制 SST 流中断;更新复制命令版本至 1.03
  • Commit ba2d - 加入集群后写操作时 joiner 锁定集群(测试 385)
  • Commit de4d - 使用 exact 修饰符的通配符匹配(测试 321)
  • Commit 6524 - docid 检查点与 docstore
  • Commit f4ab - 解析无效 xml 时索引器行为不一致
  • Commit 7b72 - 带 NOTNEAR 的存储 percolate 查询无限运行(测试 349)
  • Commit 812d - 以通配符开头的短语权重错误
  • Commit 1771 - 带通配符的 percolate 查询生成无 payload 的匹配词导致交错命中并破坏匹配(测试 417)
  • Commit aa0d - 修正并行查询情况下 'total' 的计算
  • Commit 18d8 - Windows 下守护进程多并发会话崩溃
  • Commit 8443 - 某些索引设置无法复制
  • Commit 9341 - 在高频率添加新事件时,netloop 有时冻结,因为原子 'kick' 事件被一次处理多个事件,导致丢失实际操作 查询状态,而非服务器状态
  • Commit d805 - 新刷新磁盘块可能在提交时丢失
  • Commit 63cb - profiler 中 'net_read' 不准确
  • Commit f537 - Percolate 处理阿拉伯语(从右到左文本)的问题
  • Commit 49ee - 重复列名时 id 未正确选取
  • Commit refa 修复网络事件在罕见情况下崩溃
  • e8420cc7 修复 indextool --dumpheader
  • Commit ff71 - TRUNCATE WITH RECONFIGURE 在存储字段上工作异常

重大变更:

  • 新 binlog 格式:升级前需干净停止 Manticore
  • 索引格式略有变化:新版本可正常读取现有索引,但若从 3.6.0 降级到旧版本,新索引将无法读取
  • 复制格式变更:不要从旧版本复制到 3.6.0 或反向,需同时切换所有节点到新版本
  • reverse_scan 已弃用。确保自 3.6.0 起查询中不使用此选项,否则会失败
  • 本版本起不再提供 RHEL6、Debian Jessie 和 Ubuntu Trusty 的构建。如需支持,请联系我们

弃用

  • 不再隐式按 id 排序。如依赖此功能,请相应更新查询
  • 搜索选项 reverse_scan 已弃用

版本 3.5.4,2020年12月10日

新功能

  • 新的 Python、Javascript 和 Java 客户端现已正式发布,并在本手册中有详细文档。
  • 实时索引的磁盘块自动丢弃。此优化使得在对实时索引进行OPTIMIZE操作时,当磁盘块显然不再需要(所有文档都被删除)时,可以自动丢弃该磁盘块。之前仍然需要合并,现在可以立即丢弃该磁盘块。cutoff选项被忽略,即使实际上没有合并,过时的磁盘块也会被移除。这在您维护索引中的保留策略并删除较旧文档时非常有用。现在压缩此类索引将更快。
  • standalone NOT 作为 SELECT 的一个选项

小改动

弃用

  • indexer --verbose 已弃用,因为它从未为 indexer 输出添加任何内容
  • 用于转储 watchdog 的回溯信号现在应使用 USR2,而非 USR1

Bug修复

  • Issue #423 西里尔字符句点调用片段保留模式不高亮
  • Issue #435 RTINDEX - GROUP N BY 表达式选择导致致命崩溃
  • Commit 2b3b 集群中 searchd 状态显示段错误
  • Commit 9dd2 'SHOW INDEX index.N SETTINGS' 不支持大于9的块
  • Issue #389 导致 Manticore 崩溃的 Bug
  • Commit fba1 转换器创建了损坏的索引
  • Commit eecd stopword_step=0 与 CALL SNIPPETS() 的问题
  • Commit ea68 本地索引在低 max_matches 时 count distinct 返回 0
  • Commit 362f 使用聚合时,命中结果中不返回存储的文本

版本 3.5.2,2020年10月1日

新功能

  • OPTIMIZE 将磁盘块减少到一定数量(默认是 2* 核心数),而非合并为单个块。最优块数可通过 cutoff 选项控制。
  • NOT 操作符现在可以单独使用。默认禁用,因为意外的单独 NOT 查询可能很慢。可通过设置新的 searchd 指令 not_terms_only_allowed0 启用。
  • 新设置 max_threads_per_query 设置查询可使用的最大线程数。如果未设置该指令,查询可使用的线程数上限为 threads 的值。 每个 SELECT 查询可通过 OPTION threads=N 限制线程数,覆盖全局 max_threads_per_query
  • 现在可以通过 IMPORT TABLE 导入 Percolate 索引。
  • HTTP API /search 新增对分面/分组的基本支持,通过新的查询节点 aggs 实现。

小改动

  • 如果未声明复制监听指令,引擎将尝试使用定义的 'sphinx' 端口之后的端口,最多到200。
  • listen=...:sphinx 需要显式设置以支持 SphinxSE 连接或 SphinxAPI 客户端。
  • SHOW INDEX STATUS 输出新增指标:killed_documentskilled_ratedisk_mapped_doclistsdisk_mapped_cached_doclistsdisk_mapped_hitlistsdisk_mapped_cached_hitlists
  • SQL 命令 status 现在输出 Queue\ThreadsTasks\Threads

弃用:

  • dist_threads 现已完全弃用,searchd 如果仍使用该指令将记录警告。

Docker

官方 Docker 镜像现基于 Ubuntu 20.04 LTS

打包

除了常规的 manticore 包外,您还可以按组件安装 Manticore Search:

  • manticore-server-core - 提供 searchd、手册页、日志目录、API 和 galera 模块。它还会作为依赖安装 manticore-common
  • manticore-server - 提供核心的自动化脚本(init.d、systemd)和 manticore_new_cluster 包装器。它还会作为依赖安装 manticore-server-core
  • manticore-common - 提供配置、停用词、通用文档和骨架文件夹(datadir、modules 等)。
  • manticore-tools - 提供辅助工具(indexerindextool 等)、它们的手册页和示例。它还会作为依赖安装 manticore-common
  • manticore-icudata(RPM)或 manticore-icudata-65l(DEB) - 提供 ICU 数据文件以供 icu 形态学使用。
  • manticore-devel (RPM) 或 manticore-dev (DEB) - 提供 UDF 的开发头文件。

Bug修复

  1. 提交 2a47 RT索引中不同块的grouper守护进程崩溃
  2. 提交 57a1 空远程文档的快速路径
  3. 提交 07dd 表达式堆栈帧检测运行时
  4. 提交 08ae percolate索引中匹配超过32个字段
  5. 提交 16b9 复制监听端口范围
  6. 提交 5fa6 在pq上显示创建表
  7. 提交 54d1 HTTPS端口行为
  8. 提交 fdbb 替换时混合docstore行
  9. 提交 afb5 将TFO不可用消息级别切换为“info”
  10. 提交 59d9 strcmp无效使用导致崩溃
  11. 提交 04af 向带有系统(停用词)文件的集群添加索引
  12. 提交 5014 合并带有大型字典的索引;RT优化大型磁盘块
  13. 提交 a2ad Indextool可以从当前版本转储元数据
  14. 提交 69f6 GROUP N中组顺序问题
  15. 提交 24d5 握手后对SphinxSE显式刷新
  16. 提交 31c4 避免不必要时复制巨大描述
  17. 提交 2959 show threads中的负时间
  18. 提交 f0b3 令牌过滤插件与零位置增量
  19. 提交 a49e 多重命中时将“FAIL”改为“WARNING”

版本 3.5.0,2020年7月22日

主要新特性:

  • 此版本耗时较长,因为我们一直在努力将多任务模式从线程改为协程。这使配置更简单,查询并行化更直接:Manticore只使用给定数量的线程(参见新设置 threads),新模式确保以最优方式完成。

  • 高亮的变化:

    • 任何支持多个字段的高亮(highlight({},'field1, field2')或json查询中的highlight)现在默认按字段应用限制。
    • 任何支持纯文本的高亮(highlight({}, string_attr)snippet())现在对整个文档应用限制。
    • 每字段限制可以通过limits_per_field=0选项切换为全局限制(默认是1)。
    • allow_empty现在通过HTTP JSON高亮默认是0
  • 同一端口现在可以用于 http、https和二进制API(以接受来自远程Manticore实例的连接)。通过mysql协议连接仍需listen = *:mysql。Manticore现在自动检测尝试连接的客户端类型,MySQL除外(由于协议限制)。

  • 在RT模式下,字段现在可以同时是文本和字符串属性 - GitHub issue #331

    普通模式中称为sql_field_string。现在它也可用于RT模式的实时索引。示例如下:

    create table t(f string attribute indexed);
    insert into t values(0,'abc','abc');
    select * from t where match('abc');
    +---------------------+------+
    | id                  | f    |
    +---------------------+------+
    | 2810845392541843463 | abc  |
    +---------------------+------+
    1 row in set (0.01 sec)
    mysql> select * from t where f='abc';
    +---------------------+------+
    | id                  | f    |
    +---------------------+------+
    | 2810845392541843463 | abc  |
    +---------------------+------+
    1 row in set (0.00 sec)

小改动

  • 现在可以高亮字符串属性
  • SQL接口支持SSL和压缩
  • 支持mysql客户端的status命令。
  • 复制现在可以复制外部文件(停用词、例外等)。
  • 过滤操作符 in 现在可以通过 HTTP JSON 接口使用。
  • HTTP JSON 中的 expressions
  • 现在可以在 RT 模式下动态更改 rt_mem_limit,即可以执行 ALTER ... rt_mem_limit=<new value>
  • 现在可以使用 单独的 CJK 字符集表chinesejapanesekorean
  • thread_stack 现在限制最大线程栈大小,而非初始大小。
  • 改进了 SHOW THREADS 输出。
  • SHOW THREADS 中显示长时间 CALL PQ 的进度。
  • cpustat、iostat、coredump 可以在运行时通过 SET 更改。
  • 实现了 SET [GLOBAL] wait_timeout=NUM

重大变更:

  • 索引格式已更改。 3.5.0 版本构建的索引无法被低于 3.5.0 版本的 Manticore 加载,但 Manticore 3.5.0 可以识别旧格式。
  • INSERT INTO PQ VALUES()(即不提供列列表)之前期望的值正好是 (query, tags)。现已更改为 (id,query,tags,filters)。如果希望自动生成 id,可以将其设置为 0。
  • allow_empty=0 是通过 HTTP JSON 接口高亮显示的新默认值。
  • CREATE TABLE/ALTER TABLE 中外部文件(停用词、例外等)只允许使用绝对路径。

弃用:

  • ram_chunks_countSHOW INDEX STATUS 中重命名为 ram_chunk_segments_count
  • workers 已废弃。现在只有一种 workers 模式。
  • dist_threads 已废弃。所有查询现在尽可能并行(受 threadsjobs_queue_size 限制)。
  • max_children 已废弃。使用 threads 设置 Manticore 使用的线程数(默认设置为 CPU 核心数)。
  • queue_max_length 已废弃。如果确实需要,请使用 jobs_queue_size 来微调内部作业队列大小(默认无限制)。
  • 所有 /json/* 端点现在可在无 /json/ 前缀的情况下访问,例如 /search/insert/delete/pq 等。
  • field 表示“全文字段”的含义在 describe 中重命名为 “text”。

    3.4.2:

    mysql> describe t;
    +-------+--------+----------------+
    | Field | Type   | Properties     |
    +-------+--------+----------------+
    | id    | bigint |                |
    | f     | field  | indexed stored |
    +-------+--------+----------------+

    3.5.0:

    mysql> describe t;
    +-------+--------+----------------+
    | Field | Type   | Properties     |
    +-------+--------+----------------+
    | id    | bigint |                |
    | f     | text   | indexed stored |
    +-------+--------+----------------+
  • 西里尔字母 иnon_cjk charset_table(默认)中不再映射为 i,因为这对俄语词干提取器和词形还原器影响过大。
  • read_timeout。请改用 network_timeout,它同时控制读写超时。

软件包

  • Ubuntu Focal 20.04 官方软件包
  • deb 软件包名称由 manticore-bin 改为 manticore

Bug 修复:

  1. Issue #351 searchd 内存泄漏
  2. Commit ceab 片段中轻微越界读取
  3. Commit 1c3e 危险地写入局部变量导致查询崩溃
  4. Commit 26e0 测试 226 中排序器的轻微内存泄漏
  5. Commit d2c7 测试 226 中严重内存泄漏
  6. Commit 0dd8 集群显示节点同步,但 count(*) 显示数字不同
  7. Commit f1c1 美观:日志中重复且有时丢失的警告信息
  8. Commit f1c1 美观:日志中出现 (null) 索引名
  9. Commit 359d 无法检索超过 7000 万条结果
  10. Commit 19f3 无法使用无列语法插入 PQ 规则
  11. Commit bf68 向集群中的索引插入文档时错误信息误导
  12. Commit 2cf1 /json/replacejson/update 返回的 id 为指数形式
  13. Issue #324 在同一查询中更新 json 标量属性和 mva
  14. Commit d384 hitless_words 在 RT 模式下不起作用
  15. Commit 5813 RT 模式下应禁止 ALTER RECONFIGURE
  16. Commit 5813 searchd 重启后 rt_mem_limit 被重置为 128M
  17. highlight() 有时会挂起
  18. Commit 7cd8 RT 模式下无法使用 U+ 代码
  19. Commit 2b21 RT 模式下无法在 wordforms 中使用通配符
  20. Commit e9d0 修复 SHOW CREATE TABLE 与多个 wordform 文件的兼容问题
  21. 提交 fc90 JSON 查询缺少 "query" 导致 searchd 崩溃
  22. Manticore 官方 docker 无法从 mysql 8 索引数据
  23. 提交 23e0 HTTP /json/insert 需要 id
  24. 提交 bd67 SHOW CREATE TABLE 对 PQ 无效
  25. 提交 bd67 CREATE TABLE LIKE 对 PQ 工作不正常
  26. 提交 5eac show index status 中设置的行尾问题
  27. 提交 cb15 HTTP JSON 响应中 "highlight" 的标题为空
  28. 问题 #318 CREATE TABLE LIKE 中缀错误
  29. 提交 9040 RT 在负载下崩溃
  30. cd512c7d RT 磁盘块崩溃时丢失崩溃日志
  31. 问题 #323 导入表失败并关闭连接
  32. 提交 6275 ALTER reconfigure 损坏 PQ 索引
  33. 提交 9c1d 更改索引类型后 searchd 重载问题
  34. 提交 71e2 守护进程在导入表时因缺失文件崩溃
  35. 问题 #322 使用多个索引、group by 和 ranker = none 的 select 导致崩溃
  36. 提交 c3f5 HIGHLIGHT() 不会高亮字符串属性
  37. 问题 #320 FACET 无法对字符串属性排序
  38. 提交 4f1a 缺少数据目录时的错误
  39. 提交 04f4 access_* 在 RT 模式下不支持
  40. 提交 1c06 字符串中的坏 JSON 对象:1. CALL PQ 当 json 超过某个值时返回 "Bad JSON objects in strings: 1"。
  41. 提交 32f9 RT 模式不一致。在某些情况下无法删除索引因为未知,且无法创建因为目录非空。
  42. 问题 #319 select 时崩溃
  43. 提交 22a2 max_xmlpipe2_field = 2M 在 2M 字段时返回警告
  44. 问题 #342 查询条件执行错误
  45. 提交 dd8d 简单的两个词搜索找到只包含一个词的文档
  46. 提交 9091 PQ 中无法匹配键中带大写字母的 json
  47. 提交 56da 索引器在 csv+docstore 上崩溃
  48. 问题 #363 在 centos 7 中 json 属性使用 [null] 导致插入数据损坏
  49. 重大 问题 #345 记录未被插入,count() 随机,"replace into" 返回 OK
  50. max_query_time 过度降低 SELECT 速度
  51. 问题 #352 Mac OS 上主从通信失败
  52. 问题 #328 使用 Connector.Net/Mysql 8.0.19 连接 Manticore 时出错
  53. 提交 daa7 修正 \0 转义并优化性能
  54. 提交 9bc5 修正 count distinct 与 json 的问题
  55. 提交 4f89 修正其他节点上 drop table 失败
  56. 提交 952a 修复紧密运行 call pq 时崩溃

版本 3.4.2,2020年4月10日

关键错误修复

  • 提交 2ffe 修复旧版本 RT 索引无法索引数据的问题

版本 3.4.0,2020年3月26日

重大变更

  • 服务器工作在两种模式:rt 模式和普通模式
    • rt 模式需要 data_dir,且配置中无索引定义
    • 普通模式中索引在配置中定义;不允许 data_dir
  • 复制仅在 rt 模式下可用

次要变更

  • charset_table 默认为 non_cjk 别名
  • rt 模式下全文字段默认被索引和存储
  • rt 模式下全文字段名称由 'field' 改为 'text'
  • ALTER RTINDEX 改名为 ALTER TABLE
  • TRUNCATE RTINDEX 改名为 TRUNCATE TABLE

新功能

  • 仅存储字段
  • SHOW CREATE TABLE,IMPORT TABLE

改进

  • 更快的无锁 PQ
  • /sql 可在 mode=raw 下执行任何类型的 SQL 语句
  • mysql41 协议的 mysql 别名
  • data_dir 中默认的 state.sql

错误修复

  • 提交 a533 修复 highlight() 中错误字段语法导致的崩溃
  • 提交 7fbb 修复带有 docstore 的 RT 索引复制时服务器崩溃
  • 提交 24a0 修复对带有 infix 或 prefix 选项且未启用存储字段的索引进行高亮时崩溃
  • 提交 3465 修复空索引时关于空 docstore 和 doc-id 查找的错误提示
  • 提交 a707 修复 #314 SQL insert 命令末尾带分号的问题
  • 提交 9562 移除查询词不匹配的警告
  • 提交 b860 修复通过 ICU 分词的片段查询
  • 提交 5275 修复 docstore 块缓存中的查找/添加竞态条件
  • 提交 f06e 修复 docstore 中的内存泄漏
  • 提交 a725 修复 #316 INSERT 时 LAST_INSERT_ID 返回空值
  • 提交 1ebd 修复 #317 json/update HTTP 端点支持 MVA 数组和 JSON 属性对象
  • 提交 e426 修复索引器在未显式指定 id 时转储 rt 的问题

版本 3.3.0,2020年2月4日

新特性

  • 并行实时索引搜索
  • EXPLAIN QUERY 命令
  • 无索引定义的配置文件(alpha 版本)
  • CREATE/DROP TABLE 命令(alpha 版本)
  • indexer --print-rt - 可从源读取并打印 Real-Time 索引的 INSERT 语句

改进

  • 更新至 Snowball 2.0 词干提取器
  • SHOW INDEX STATUS 支持 LIKE 过滤器
  • 高 max_matches 时改进内存使用
  • SHOW INDEX STATUS 为 RT 索引添加 ram_chunks_count
  • 无锁优先队列(PQ)
  • 将 LimitNOFILE 改为 65536

Bug 修复

版本 3.2.2,2019年12月19日

新特性

  • RT 索引的自增 ID
  • 通过新的 HIGHLIGHT() 函数支持 docstore 高亮,也可用于 HTTP API
  • SNIPPET() 可使用特殊函数 QUERY() 返回当前 MATCH 查询
  • 新增 field_separator 选项用于高亮函数

改进和变更

  • 远程节点的存储字段延迟获取(可显著提升性能)
  • 字符串和表达式不再破坏多查询和 FACET 优化
  • RHEL/CentOS 8 构建现在使用 mariadb-connector-c-devel 中的 mysql libclient
  • ICU 数据文件随软件包一起发布,移除 icu_data_dir
  • systemd 服务文件包含 'Restart=on-failure' 策略
  • indextool 现在可以在线检查实时索引
  • 默认配置文件现在为 /etc/manticoresearch/manticore.conf
  • RHEL/CentOS 上的服务从 'searchd' 重命名为 'manticore'
  • 移除了 query_mode 和 exact_phrase snippet 的选项

Bug修复

  • Commit 6ae4 修复通过 HTTP 接口执行 SELECT 查询时崩溃的问题
  • Commit 5957 修复 RT 索引保存磁盘块但未标记某些文档为已删除的问题
  • Commit e861 修复使用 dist_threads 搜索多索引或多查询时崩溃的问题
  • Commit 4409 修复对包含宽 UTF8 码点的长词生成中缀时崩溃的问题
  • Commit 5fd5 修复添加套接字到 IOCP 时的竞态条件
  • Commit cf10 修复布尔查询与 JSON 选择列表的问题
  • Commit 996d 修复 indextool 检查错误跳过列表偏移和 doc2row 查找的检查
  • Commit 6e3f 修复索引器在大数据上产生带有负跳过列表偏移的错误索引
  • Commit faed 修复 JSON 仅将数字转换为字符串以及表达式中 JSON 字符串转换为数字的问题
  • Commit 5331 修复 indextool 在命令行设置多个命令时以错误代码退出的问题
  • Commit 7955 修复 #275 磁盘空间不足错误时 binlog 状态无效的问题
  • Commit 2284 修复 #279 IN 过滤器应用于 JSON 属性时崩溃的问题
  • Commit ce2e 修复 #281 错误的管道关闭调用
  • Commit 5355 修复服务器在调用 PQ 时因递归 JSON 属性编码为字符串而挂起的问题
  • Commit a5fc 修复 multiand 节点中文档列表超出末尾的问题
  • Commit a362 修复线程公共信息的检索
  • Commit f8d2 修复文档存储缓存锁

版本 3.2.0,2019年10月17日

新特性

  • 文档存储
  • 新指令 stored_fields、docstore_cache_size、docstore_block_size、docstore_compression、docstore_compression_level

改进和变更

  • 改进了 SSL 支持
  • 更新了 non_cjk 内置字符集
  • 禁用 UPDATE/DELETE 语句在查询日志中记录为 SELECT
  • 支持 RHEL/CentOS 8 软件包

Bug修复

  • Commit 301a 修复在 RT 索引的磁盘块中替换文档时崩溃的问题
  • Commit 46c1 修复 #269 LIMIT N OFFSET M
  • Commit 92a4 修复 DELETE 语句中显式设置 id 或提供 id 列表时跳过搜索的问题
  • Commit 8ca7 修复 Windows poller 中事件移除后索引错误的问题
  • Commit 6036 修复通过 HTTP 访问 JSON 时浮点数四舍五入的问题
  • Commit 62f6 修复远程片段先检查空路径的问题;修复 Windows 测试
  • Commit aba2 修复配置重载在 Windows 上的行为与 Linux 一致
  • Commit 6b8c 修复 #194 PQ 支持形态学和词干分析器
  • Commit 174d 修复 RT 退役段管理

版本 3.1.2,2019年8月22日

新特性和改进

  • HTTP API 的实验性 SSL 支持
  • CALL KEYWORDS 的字段过滤器
  • /json/search 的 max_matches
  • 默认 Galera gcache.size 的自动调整
  • 改进了 FreeBSD 支持

Bug修复

  • Commit 0a1a 修复 RT 索引复制到存在相同 RT 索引但路径不同的节点的问题
  • Commit 4adc 修复无活动索引的刷新重新调度
  • Commit d6c0 改进 RT/PQ 索引刷新重新调度
  • Commit d0a7 修复 #250 TSV 和 CSV 管道源的 index_field_lengths 索引选项
  • Commit 1266 修复 indextool 对空索引的块索引检查错误报告
  • Commit 553c 修复 Manticore SQL 查询日志中空选择列表的问题
  • Commit 56c8 修复 indexer -h/--help 响应

版本 3.1.0,2019年7月16日

功能和改进

  • 实时索引的复制
  • 中文的 ICU 分词器
  • 新的形态学选项 icu_chinese
  • 新指令 icu_data_dir
  • 复制的多语句事务
  • LAST_INSERT_ID() 和 @session.last_insert_id
  • SHOW VARIABLES 支持 LIKE 'pattern'
  • 多文档插入用于 percolate 索引
  • 为配置添加时间解析器
  • 内部任务管理器
  • 对文档和命中列表组件使用 mlock
  • 监狱代码片段路径

移除

  • 放弃 RLP 库支持,转而使用 ICU;移除所有 rlp* 指令
  • 禁用使用 UPDATE 更新文档 ID

修复

版本 3.0.2,2019年5月31日

改进

  • 为文档和命中列表添加 mmap 读取器
  • /sql HTTP 端点响应现在与 /json/search 响应相同
  • 新指令 access_plain_attrsaccess_blob_attrsaccess_doclistsaccess_hitlists
  • 复制设置中新指令 server_id

移除

  • 移除 HTTP /search 端点

弃用

  • read_bufferondisk_attrsondisk_attrs_defaultmlockaccess_* 指令替代

修复

  • Commit 849c 允许选择列表中以数字开头的属性名
  • Commit 48e6 修复 UDF 中的 MVA,修复 MVA 别名
  • Commit 0555 修复 #187 使用 SENTENCE 查询时崩溃
  • Commit 93bf 修复 #143 支持 MATCH() 周围的括号
  • Commit 599e 修复 ALTER cluster 语句中集群状态保存
  • Commit 230c 修复 ALTER index 时带有 blob 属性导致服务器崩溃
  • Commit 5802 修复 #196 按 id 过滤
  • Commit 25d2 丢弃模板索引上的搜索
  • Commit 2a30 修复 SQL 回复中 id 列为常规 bigint 类型

版本 3.0.0,2019年5月6日

功能和改进

  • 新的索引存储。非标量属性不再限制每个索引最大 4GB 大小
  • attr_update_reserve 指令
  • 支持使用 UPDATE 更新字符串、JSON 和 MVA
  • killlists 在索引加载时应用
  • killlist_target 指令
  • 多重 AND 搜索加速
  • 更好的平均性能和内存使用
  • 用于升级 2.x 创建的索引的转换工具
  • CONCAT() 函数
  • JOIN CLUSTER cluster AT 'nodeaddress:port'
  • ALTER CLUSTER posts UPDATE nodes
  • node_address 指令
  • SHOW STATUS 中打印节点列表

行为变化

  • 对于带有 killlist 的索引,服务器不再按配置中定义的顺序轮换索引,而是遵循 killlist 目标链
  • 搜索中索引的顺序不再定义 killlist 应用的顺序
  • 文档 ID 现在为有符号大整数

移除的指令

  • docinfo(现在始终为外部),inplace_docinfo_gap,mva_updates_pool

版本 2.8.2 GA,2019年4月2日

功能和改进

  • Galera 复制用于 percolate 索引
  • OPTION morphology

编译说明

Cmake 最低版本现在为 3.13。编译需要 boost 和 libssl 开发库。

修复

  • Commit 6967 修复了在查询多个分布式索引时,选择列表中多个星号导致的崩溃问题
  • Commit 36df 修复了 #177 通过 Manticore SQL 接口传输大数据包的问题
  • Commit 5793 修复了 #170 在 RT 优化时更新 MVA 导致服务器崩溃的问题
  • Commit edb2 修复了在 SIGHUP 配置重载后,RT 索引移除导致 binlog 移除时服务器崩溃的问题
  • Commit bd3e 修复了 MySQL 握手认证插件的负载问题
  • Commit 6a21 修复了 #172 RT 索引中的 phrase_boundary 设置问题
  • Commit 3562 修复了 #168 在 ATTACH 索引自身时的死锁问题
  • Commit 250b 修复了服务器崩溃后 binlog 保存空元数据的问题
  • Commit 4aa6 修复了由于 RT 索引带磁盘块的字符串排序器导致的服务器崩溃问题

    版本 2.8.1 GA,2019年3月6日

新功能和改进

  • SUBSTRING_INDEX()

  • 支持 percolate 查询的 SENTENCE 和 PARAGRAPH

  • Debian/Ubuntu 的 systemd 生成器;同时添加了 LimitCORE 以允许生成 core dump

    Bug 修复

  • Commit 84fe 修复了在匹配模式为 all 且全文查询为空时服务器崩溃的问题

  • Commit daa8 修复了删除静态字符串时的崩溃问题

  • Commit 2207 修复了 indextool 失败时的退出码问题(FATAL)

  • Commit 0721 修复了 #109 由于错误的精确形式检查导致前缀无匹配的问题

  • Commit 8af8 修复了 #161 RT 索引配置重载的问题

  • Commit e2d5 修复了访问大型 JSON 字符串时服务器崩溃的问题

  • Commit 75cd 修复了 JSON 文档中 PQ 字段被索引剥离器修改导致兄弟字段匹配错误的问题

  • Commit e2f7 修复了 RHEL7 构建中解析 JSON 时服务器崩溃的问题

  • Commit 3a25 修复了当斜杠位于边缘时 JSON 反转义崩溃的问题

  • Commit be9f 修复了选项 'skip_empty' 跳过空文档且不警告其非有效 JSON 的问题

  • Commit 266e 修复了 #140 当 6 位小数不足以精确时,浮点数输出 8 位数字的问题

  • Commit 3f6d 修复了空 jsonobj 创建的问题

  • Commit f3c7 修复了 #160 空 mva 输出 NULL 而非空字符串的问题

  • Commit 0afa 修复了在没有 pthread_getname_np 时构建失败的问题

  • Commit 9405 修复了带有 thread_pool 工作线程时服务器关闭崩溃的问题

    版本 2.8.0 GA,2019年1月28日

改进

  • percolate 索引的分布式索引支持

  • CALL PQ 新选项和变更:

    • skip_bad_json
    • mode(sparsed/sharded)
    • JSON 文档可以作为 JSON 数组传递
    • shift
    • 列名 'UID'、'Documents'、'Query'、'Tags'、'Filters' 重命名为 'id'、'documents'、'query'、'tags'、'filters'
  • DESCRIBE pq TABLE

  • 不再支持 SELECT FROM pq WHERE UID,改用 'id'

  • pq 索引上的 SELECT 与常规索引等效(例如,可以通过 REGEX() 过滤规则)

  • ANY/ALL 可用于 PQ 标签

  • 表达式对 JSON 字段自动转换,无需显式类型转换

  • 内置 'non_cjk' charset_table 和 'cjk' ngram_chars

  • 内置 50 种语言的停用词集合

  • 停用词声明中的多个文件也可以用逗号分隔

  • CALL PQ 可以接受 JSON 数组的文档

    Bug 修复

  • Commit a4e1 修复了与 csjon 相关的内存泄漏

  • Commit 28d8 修复了因 json 中缺失值导致的崩溃

  • Commit bf4e 修复了 RT 索引空元数据保存问题

  • Commit 33b4 修复了词形还原序列中丢失的形式标志(exact)

  • Commit 6b95 修复了字符串属性大于 4M 时使用饱和而非溢出

  • Commit 6214 修复了禁用索引时服务器在接收到 SIGHUP 信号崩溃的问题

  • Commit 3f7e 修复了服务器在同时执行 API 会话状态命令时崩溃的问题

  • Commit cd9e 修复了带字段过滤器的 RT 索引删除查询导致服务器崩溃的问题

  • Commit 9376 修复了对分布式索引执行 CALL PQ 时空文档导致服务器崩溃的问题

  • Commit 8868 修复了 Manticore SQL 错误信息超过 512 字符被截断的问题

  • Commit de9d 修复了无 binlog 时保存 percolate 索引导致崩溃的问题

  • Commit 2b21 修复了 OSX 上 http 接口无法工作的问题

  • Commit e92c 修复了 indextool 检查 MVA 时的错误提示

  • Commit 238b 修复了 FLUSH RTINDEX 时写锁问题,避免保存和定期刷新时锁定整个索引

  • Commit c26a 修复了 ALTER percolate 索引时卡在等待搜索加载的问题

  • Commit 9ee5 修复了 max_children 为 0 时应使用线程池默认工作线程数的问题

  • Commit 5138 修复了带有 index_token_filter 插件且 stopwords 和 stopword_step=0 的索引数据索引错误

  • Commit 2add 修复了索引定义中仍使用 aot 词形还原器时缺少 lemmatizer_base 导致崩溃的问题

    版本 2.7.5 GA,2018年12月4日

改进

  • REGEX 函数

  • json API 搜索的 limit/offset 支持

  • qcache 的性能分析点

    修复

  • Commit eb3c 修复了 FACET 多属性宽类型时服务器崩溃的问题

  • Commit d915 修复了 FACET 查询主选择列表中隐式 group by 问题

  • Commit 5c25 修复了带 GROUP N BY 查询时崩溃的问题

  • Commit 85d3 修复了内存操作崩溃处理时的死锁问题

  • Commit 8516 修复了 indextool 检查时的内存消耗问题

  • Commit 58fb 修复了不再需要 gmock 头文件的问题,上游已自行解决

    版本 2.7.4 GA,2018年11月1日

改进

  • 远程分布式索引的 SHOW THREADS 显示原始查询而非 API 调用

  • SHOW THREADS 新增选项 format=sphinxql,以 SQL 格式打印所有查询

  • SHOW PROFILE 增加了 clone_attrs 阶段的打印

    修复

  • Commit 4f15 修复了在无 malloc_stats、malloc_trim 的 libc 上构建失败的问题

  • Commit f974 修复了 CALL KEYWORDS 结果集中单词内特殊符号的问题

  • Commit 0920 修复了通过 API 调用分布式索引或远程代理的 CALL KEYWORDS 失效问题

  • Commit fd68 修复了分布式索引 agent_query_timeout 未正确传递给代理作为 max_query_time 的问题

  • Commit 4ffa 修复了磁盘块总文档计数被 OPTIMIZE 命令影响,导致权重计算错误的问题

  • Commit dcaf 修复了混合 RT 索引中多个尾部命中问题

  • Commit eee3 修复了轮换时的死锁问题

    版本 2.7.3 GA,2018年9月26日

改进

  • CALL KEYWORDS 的 sort_mode 选项

  • VIP 连接上的 DEBUG 可以执行 'crash ' 来在服务器上故意触发 SIGEGV 操作

  • DEBUG 可以执行 'malloc_stats' 来在 searchd.log 中转储 malloc 统计信息,'malloc_trim' 来执行 malloc_trim()

  • 如果系统上存在 gdb,则改进了回溯功能

    Bug 修复

  • Commit 0f3c 修复了 Windows 上 rename 导致的崩溃或失败

  • Commit 1455 修复了 32 位系统上服务器崩溃的问题

  • Commit ad37 修复了空 SNIPPET 表达式导致的服务器崩溃或挂起

  • Commit b36d 修复了非渐进式优化的损坏,并修正了渐进式优化不为最旧磁盘块创建 kill-list 的问题

  • Commit 34b0 修复了线程池工作模式下 SQL 和 API 的 queue_max_length 错误回复

  • Commit ae4b 修复了向设置了 regexp 或 rlp 选项的 PQ 索引添加全扫描查询时的崩溃

  • Commit f80f 修复了连续调用多个 PQ 时的崩溃

  • Commit 9742 重构 AcquireAccum

  • Commit 39e5 修复了调用 pq 后的内存泄漏

  • Commit 21bc 美化重构(c++11 风格的构造函数、默认值、nullptr)

  • Commit 2d69 修复了尝试向 PQ 索引插入重复项时的内存泄漏

  • Commit 5ed9 修复了 JSON 字段 IN 语句中大值导致的崩溃

  • Commit 4a52 修复了对设置了扩展限制的 RT 索引执行 CALL KEYWORDS 语句时服务器崩溃

  • Commit 5526 修复了 PQ 匹配查询中的无效过滤器

  • Commit 204f 为 ptr 属性引入小对象分配器

  • Commit 2545 将 ISphFieldFilter 重构为引用计数版本

  • Commit 1366 修复了在非终止字符串上使用 strtod 导致的未定义行为/SIGSEGV

  • Commit 94bc 修复了 json 结果集处理中的内存泄漏

  • Commit e78e 修复了应用属性添加时对内存块末尾的越界读取

  • Commit fad5 重构 CSphDict 为引用计数版本

  • Commit fd84 修复了 AOT 内部类型外泄

  • Commit 5ee7 修复了分词器管理的内存泄漏

  • Commit 116c 修复了 grouper 中的内存泄漏

  • Commit 56fd 为 matches 中的动态指针提供特殊的释放/复制(grouper 内存泄漏)

  • Commit b1fc 修复了 RT 动态字符串的内存泄漏

  • Commit 517b 重构 grouper

  • Commit b1fc 小幅重构(c++11 构造函数,一些格式调整)

  • Commit 7034 将 ISphMatchComparator 重构为引用计数版本

  • Commit b1fc 私有化 cloner

  • Commit efbc 简化 MVA_UPSIZE、DOCINFO2ID_T、DOCINFOSETID 的本地小端处理

  • Commit 6da0 为 ubertests 添加 valgrind 支持

  • Commit 1d17 修复了连接上 'success' 标志的竞态导致的崩溃

  • Commit 5a09 将 epoll 切换为边缘触发模式

  • Commit 5d52 修复了表达式中 IN 语句格式类似过滤器时的问题

  • Commit bd8b 修复了在提交具有大 docid 的文档时 RT 索引崩溃的问题

  • Commit ce65 修复了 indextool 中无参数选项的问题

  • Commit 08c9 修复了扩展关键字的内存泄漏

  • Commit 30c7 修复了 json grouper 的内存泄漏

  • Commit 6023 修复了全局用户变量的泄漏

  • Commit 7c13 修复了早期拒绝匹配时动态字符串的泄漏

  • Commit 9154 修复了 length() 的泄漏

  • Commit 43fc 修复了 parser 中因 strdup() 导致的内存泄漏

  • Commit 71ff 重构表达式解析器以准确跟踪引用计数

    版本 2.7.2 GA,2018年8月27日

改进

  • 与 MySQL 8 客户端兼容

  • 支持带 RECONFIGURE 的 TRUNCATE

  • 取消了 RT 索引的 SHOW STATUS 中的内存计数器

  • 多代理的全局缓存

  • 改进了 Windows 上的 IOCP

  • HTTP 协议的 VIP 连接

  • Manticore SQL 的 DEBUG 命令,可运行各种子命令

  • shutdown_token - 使用 DEBUG 命令调用 shutdown 所需的密码 SHA1 哈希

  • 新增 SHOW AGENT STATUS 的统计信息 (_ping, _has_perspool, _need_resolve)

  • indexer 的 --verbose 选项现在支持 [debugvv] 用于打印调试信息

    Bug 修复

  • Commit 3900 移除了 optimize 时的写锁

  • Commit 4c33 修复了重新加载索引设置时的写锁

  • Commit b5ea 修复了带 JSON 过滤器查询时的内存泄漏

  • Commit 930e 修复了 PQ 结果集中空文档的问题

  • Commit 53de 修复了因移除任务导致的任务混淆

  • Commit cad9 修复了远程主机计数错误

  • Commit 9000 修复了解析代理描述符的内存泄漏

  • Commit 978d 修复了搜索中的泄漏

  • Commit 0193 对显式/内联 c-trs,override/final 用法进行了美化修改

  • Commit 943e 修复了本地/远程 schema 中 json 的泄漏

  • Commit 02db 修复了本地/远程 schema 中 json 排序列表达式的泄漏

  • Commit c74d 修复了常量别名的泄漏

  • Commit 6e5b 修复了预读线程的泄漏

  • Commit 39c7 修复了因 netloop 中等待卡住导致退出卡死的问题

  • Commit adaf 修复了将 HA 代理改为普通主机时 'ping' 行为卡死的问题

  • Commit 32c4 为仪表盘存储分离了垃圾回收

  • Commit 511a 修复了引用计数指针的问题

  • Commit 32c4 修复了 indextool 在索引不存在时崩溃的问题

  • Commit 156e 修复了 xmlpipe 索引中超出属性/字段的输出名称

  • Commit cdac 修复了配置中无索引器段时默认索引器的值

  • Commit e61e 修复了服务器重启后 RT 索引磁盘块中错误嵌入的停用词

  • Commit 5fba 修复了跳过幽灵(已关闭但未从轮询器中最终删除)连接的问题

  • Commit f22a 修复了混合(孤立)网络任务

  • Commit 4689 修复了写入后读取操作崩溃的问题

  • Commit 03f9 修复了在 Windows 上运行测试时 searchd 崩溃的问题

  • Commit e925 修复了在常规 connect() 中处理 EINPROGRESS 代码的问题

  • Commit 248b 修复了使用 TFO 时的连接超时问题

    版本 2.7.1 GA,2018年7月4日

改进

  • 改进了 PQ 上匹配多个文档时的通配符性能

  • 支持 PQ 上的全扫描查询

  • 支持 PQ 上的 MVA 属性

  • 支持 percolate 索引的正则表达式和 RLP

    Bug 修复

  • Commit 6885 修复了查询字符串丢失的问题

  • Commit 0f17 修复了 SHOW THREADS 语句中信息为空的问题

  • Commit 53fa 修复了使用 NOTNEAR 操作符匹配时的崩溃

  • Commit 2602 修复了 PQ 删除时错误的过滤器错误信息

    版本 2.7.0 GA,2018年6月11日

改进

  • 减少系统调用次数以避免 Meltdown 和 Spectre 补丁的影响

  • 本地索引管理的内部重写

  • 远程摘要重构

  • 完整配置重载

  • 所有节点连接现在都是独立的

  • 协议改进

  • Windows 通信从 wsapoll 切换到 IO 完成端口

  • 主节点和节点之间的通信可以使用 TFO

  • SHOW STATUS 现在输出服务器版本和 mysql_version_string

  • 为 CALL PQ 中调用的文档添加了 docs_id 选项

  • percolate 查询过滤器现在可以包含表达式

  • 分布式索引可以与 FEDERATED 一起工作

  • 虚拟的 SHOW NAMES COLLATE 和 SET wait_timeout(以更好地兼容 ProxySQL)

    Bug 修复

  • Commit 5bcf 修复了 PQ 中添加的不等于标签

  • Commit 9ebc 修复了 CALL PQ 语句中添加文档 ID 字段到 JSON 文档的问题

  • Commit 8ae0 修复了 PQ 索引的刷新语句处理器

  • Commit c24b 修复了 PQ 对 JSON 和字符串属性的过滤

  • Commit 1b8b 修复了空 JSON 字符串的解析

  • Commit 1ad8 修复了多查询中带 OR 过滤器时的崩溃

  • Commit 69b8 修复了 indextool 使用配置公共部分(lemmatizer_base 选项)进行命令(dumpheader)

  • Commit 6dbe 修复了结果集和过滤器中的空字符串

  • Commit 39c4 修复了负文档 ID 值

  • Commit 266b 修复了非常长单词索引时的单词截断长度

  • Commit 4782 修复了 PQ 上通配符查询匹配多个文档的问题

    版本 2.6.4 GA,2018年5月3日

功能和改进

  • MySQL FEDERATED 引擎支持

  • MySQL 数据包现在返回 SERVER_STATUS_AUTOCOMMIT 标志,增强了与 ProxySQL 的兼容性

  • listen_tfo - 为所有监听器启用 TCP Fast Open 连接

  • indexer --dumpheader 现在也可以从 .meta 文件中转储 RT 头信息

  • Ubuntu Bionic 的 cmake 构建脚本

    Bug 修复

  • Commit 355b 修复了 RT 索引的无效查询缓存条目;

  • Commit 546e 修复了无缝轮换后索引设置丢失的问题

  • Commit 0c45 修复了中缀与前缀长度设置问题;添加了对不支持中缀长度的警告

  • Commit 8054 修复了 RT 索引自动刷新顺序

  • Commit 705d 修复了多属性索引和多索引查询的结果集模式问题

  • Commit b0ba 修复了批量插入时文档重复导致部分命中丢失的问题

  • Commit 4510 修复了优化失败合并包含大量文档的 RT 索引磁盘块的问题

    版本 2.6.3 GA,2018年3月28日

改进

  • 编译时使用 jemalloc。如果系统中存在 jemalloc,可以通过 cmake 标志 -DUSE_JEMALLOC=1 启用

    Bug 修复

  • 提交 85a6 修复了 Manticore SQL 查询日志中的 expand_keywords 选项

  • 提交 caaa 修复了 HTTP 接口以正确处理大尺寸查询

  • 提交 e386 修复了启用 index_field_lengths 时对 RT 索引执行 DELETE 导致服务器崩溃的问题

  • 提交 cd53 修复了 cpustats searchd CLI 选项在不支持的系统上的工作问题

  • 提交 8740 修复了定义了最小长度时 utf8 子串匹配的问题

    版本 2.6.2 GA,2018年2月23日

改进

  • 在使用 NOT 操作符和批量文档时,改进了Percolate 查询的性能。

  • percolate_query_call 可以根据 dist_threads 使用多线程

  • 新增全文匹配操作符 NOTNEAR/N

  • 对 percolate 索引的 SELECT 支持 LIMIT

  • expand_keywords 可以接受 'start','exact'(其中 'start,exact' 与 '1' 效果相同)

  • 对使用 sql_query_range 定义的范围查询的 joined fields 支持 ranged-main-query

    Bug 修复

  • 提交 72dc 修复了搜索内存段时崩溃;双缓冲保存磁盘块时死锁;优化期间保存磁盘块时死锁

  • 提交 3613 修复了索引器在 xml 嵌入式 schema 中属性名为空时崩溃的问题

  • 提交 48d7 修复了错误地取消链接非拥有的 pid 文件的问题

  • 提交 a556 修复了临时文件夹中有时遗留孤立 FIFO 的问题

  • 提交 2376 修复了 FACET 结果集为空时错误的 NULL 行问题

  • 提交 4842 修复了作为 Windows 服务运行服务器时索引锁损坏的问题

  • 提交 be35 修复了 mac os 上错误的 iconv 库问题

  • 提交 8374 修复了错误的 count(*) 计算

    版本 2.6.1 GA,2018年1月26日

改进

  • agent_retry_count 对于带镜像的代理,重试次数现在表示每个镜像的重试次数,总重试次数为 agent_retry_count*镜像数。

  • agent_retry_count 现在可以针对每个索引指定,覆盖全局值。新增别名 mirror_retry_count

  • 可以在代理定义中指定 retry_count,表示每个代理的重试次数

  • Percolate 查询现在支持 HTTP JSON API,路径为 /json/pq

  • 为可执行文件添加了 -h 和 -v 选项(帮助和版本)

  • morphology_skip_fields 支持实时索引

    Bug 修复

  • 提交 a40b 修复了 ranged-main-query 在 MVA 字段使用 sql_range_step 时的正确工作

  • 提交 f2f5 修复了黑洞系统循环挂起和黑洞代理似乎断开连接的问题

  • 提交 84e1 修复了查询 ID 不一致,修复了存储查询的重复 ID

  • 提交 1948 修复了服务器在各种状态下关闭时崩溃的问题

  • 提交 9a70 提交 3495 修复了长查询超时问题

  • 提交 3359 重构了基于 kqueue 的系统(Mac OS X,BSD)上的主代理网络轮询

    版本 2.6.0,2017年12月29日

功能和改进

  • HTTP JSON:JSON 查询现在可以对属性进行等值查询,MVA 和 JSON 属性可以用于插入和更新,通过 JSON API 可以对分布式索引执行更新和删除

  • Percolate 查询

  • 移除了对 32 位 docid 的支持,同时移除了所有转换/加载带有 32 位 docid 的旧索引的代码。

  • 仅对特定字段应用形态学。新增索引指令 morphology_skip_fields,允许定义不应用形态学的字段列表。

  • expand_keywords 现在可以通过 OPTION 语句设置为查询运行时指令

    Bugfixes

  • Commit 0cfa 修复了使用 rlp 构建时服务器调试版本崩溃(以及发布版本可能的未定义行为)

  • Commit 3242 修复启用 progressive 选项时 RT 索引优化合并 kill-list 顺序错误的问题

  • Commit ac0e mac 上的轻微崩溃修复

  • 经过彻底的静态代码分析后修复了许多小问题

  • 其他小的 bug 修复

    升级

在此版本中,我们更改了主节点和代理之间通信所使用的内部协议。如果您在分布式环境中运行 Manticoresearch 并有多个实例,请确保先升级代理,然后升级主节点。

版本 2.5.1,2017年11月23日

功能和改进

  • HTTP API 协议 支持 JSON 查询。支持搜索、插入、更新、删除、替换操作。数据操作命令也可以批量执行,目前有一些限制,如 MVA 和 JSON 属性不能用于插入、替换或更新。

  • RELOAD INDEXES 命令

  • FLUSH LOGS 命令

  • SHOW THREADS 可以显示优化、轮换或刷新进度。

  • GROUP N BY 正确支持 MVA 属性

  • 黑洞代理运行在独立线程,不再影响主查询

  • 实现了索引的引用计数,避免轮换和高负载时的停顿

  • 实现了 SHA1 哈希,尚未对外暴露

  • 修复了在 FreeBSD、macOS 和 Alpine 上的编译问题

    Bugfixes

  • Commit 9897 修复了块索引的过滤回归问题

  • Commit b1c3 将 PAGE_SIZE 重命名为 ARENA_PAGE_SIZE 以兼容 musl

  • Commit f213 禁用 cmake 版本低于 3.1.0 的 googletests

  • Commit f30e 修复服务器重启时绑定套接字失败

  • Commit 0807 修复服务器关闭时崩溃

  • Commit 3e3a 修复系统黑洞线程的 show threads

  • Commit 262c 重构了 iconv 的配置检查,修复了 FreeBSD 和 Darwin 上的构建问题

    版本 2.4.1 GA,2017年10月16日

功能和改进

  • WHERE 子句中属性过滤器之间支持 OR 操作符
  • 维护模式(SET MAINTENANCE=1)
  • CALL KEYWORDS 支持分布式索引
  • UTC 分组
  • query_log_mode 支持自定义日志文件权限
  • 字段权重可以为零或负数
  • max_query_time 现在可以影响全扫描
  • 新增 net_wait_tmnet_throttle_acceptnet_throttle_action 用于网络线程的细粒度调优(当 workers=thread_pool 时)
  • COUNT DISTINCT 支持 facet 搜索
  • IN 可以用于 JSON 浮点数组
  • 多查询优化不再被整数/浮点表达式破坏
  • SHOW META 在使用多查询优化时显示 multiplier

    编译

Manticore Search 使用 cmake 构建,最低 gcc 版本要求为 4.7.2。

文件夹和服务

  • Manticore Search 以 manticore 用户身份运行。

  • 默认数据文件夹现在是 /var/lib/manticore/

  • 默认日志文件夹现在是 /var/log/manticore/

  • 默认 pid 文件夹现在是 /var/run/manticore/

    Bugfixes

  • Commit a58c 修复了导致 Java 连接器出错的 SHOW COLLATION 语句

  • Commit 631c 修复了处理分布式索引时的崩溃;为分布式索引哈希添加锁;移除了代理的移动和复制操作符

  • Commit 942b 修复了因并行重连导致的分布式索引处理崩溃

  • Commit e5c1 修复了在将查询存储到服务器日志时崩溃处理器崩溃的问题

  • Commit 4a4b 修复了多查询中使用池化属性时的崩溃

  • Commit 3873 通过防止索引页被包含进核心文件,减少了核心文件大小

  • Commit 11e6 修复了指定无效代理时 searchd 启动崩溃

  • Commit 4ca6 修复了索引器在 sql_query_killlist 查询中报告错误

  • Commit 123a 修复了 fold_lemmas=1 与命中计数的问题

  • Commit cb99 修复了 html_strip 行为不一致的问题

  • Commit e406 修复了优化 rt 索引时丢失新设置的问题;修复了带同步选项的优化锁泄漏;

  • Commit 86ae 修复了错误多查询的处理问题

  • Commit 2645 修复了结果集依赖于多查询顺序的问题

  • Commit 7239 修复了多查询中出现错误查询时服务器崩溃的问题

  • Commit f353 修复了从共享锁到独占锁的问题

  • Commit 3754 修复了无索引查询导致的服务器崩溃

  • Commit 29f3 修复了服务器死锁问题

    Version 2.3.3, 2017年7月6日

  • Manticore 品牌标识

  • Manticore branding

Last modified: December 08, 2025