manual/chinese/Changelog.md
发布日期:2026 年 3 月 30 日
此版本带来了更广泛的打包改进,新增了用于自动嵌入模型的 API_URL 和 API_TIMEOUT 选项,混合搜索功能,S3 兼容的备份和恢复支持,更快的 RT 表维护(支持 N 路合并和并行 OPTIMIZE),KNN 预过滤,以及 MySQL 兼容的预处理语句。
API_URL 和 API_TIMEOUT 以支持 自动嵌入模型。如果您使用 自动嵌入模型 或单独管理 MCL,则会受到影响,因为 Manticore 25.0.0 需要 MCL 13.0.0,且与旧版 MCL 不兼容;请同时升级守护进程和 MCL,降级仅在同时恢复匹配的旧版 MCL 时才安全。bigram_delimiter 模式和数字感知的 bigram_index 模式。如果您使用这些大写分词选项,或在重建索引后需要使用旧版 Manticore 打开重写后的索引,则会受到影响:现有旧版索引仍可读取,但以格式 69 重建或新写入的索引与旧版 Manticore 不兼容,因此降级仅在这些索引未被重写前才安全。model_name 的 RT 表 的 复制集群,则会受到影响:它保留用户提供的向量,防止副本重新生成不同的嵌入,并在与复制一起使用时提高 自动嵌入 的性能,但跨此变更的混合版本复制集群不兼容。请同时升级集群节点;降级仅在集群中未使用新复制协议时才安全。hitless_words 字典布局处理。如果您重建或新写入索引后需要使用旧版 Manticore 打开它们,则会受到影响:现有旧版索引仍可读取,但任何以新格式重建或新写入的索引与旧版 Manticore 不兼容,因此降级仅在这些索引未被重写前才安全。manticore 现在是 deb 和 rpm 的捆绑包。它包括守护进程、工具、转换器、开发头文件、ICU 数据、捆绑依赖包(manticore-columnar-lib、manticore-backup、manticore-buddy、manticore-executor、manticore-load、manticore-galera 和 manticore-tzdata 适用时),以及内置的德语、英语和俄语语言包,还有 Jieba 支持。乌克兰词形还原器未捆绑;请使用 Debian/Ubuntu 或 RHEL/CentOS 指南单独安装。
从之前的包布局升级时,通常只需安装 manticore 包。如果旧的拆分包导致冲突,请使用 apt remove 'manticore*' 或 yum remove 'manticore*' 删除它们,然后安装 manticore。此清理不会删除您现有的数据或配置。OPTIMIZE 任务来改进 RT 表压缩,减少合并许多磁盘块所需的时间,并公开了新的 merge_chunks_per_job 和 parallel_chunk_merges 设置。fusion_method='rrf'),允许 SQL 和 JSON 查询结合全文和 KNN 结果,使用 hybrid_score() 进行排序,并支持在单个融合结果集中包含多个 KNN 子查询。interactive_timeout 和 wait_timeout 处理,使交互式客户端和非交互式客户端可以使用不同的空闲超时,如 MySQL。max_query_time 中断使用 NOTNEAR、MAYBE 或否定操作符的查询时出现的误报全文匹配问题,因此超时搜索不再返回不满足查询条件的行。SHOW STATUS 时间保持一致,Buddy 的内部请求不再扭曲用户面向的守护进程统计信息。searchd 的问题,Buddy 支持的 SQL 命令不再因加载较旧的系统 libcurl 而失败;运行时查找现在会自动优先使用 Homebrew curl,MANTICORE_CURL_LIB 仍可作为显式覆盖。searchd 链接至不兼容的 libcurl 而失败;该包现在优先使用 Homebrew curl,并支持 MANTICORE_CURL_LIB 运行时覆盖。UPDATE 处理,防止出现不正确的警告和不一致的二级索引状态。html_strip=1 的表。float_vector 列以支持显式的空 FROM='',现在正确表示“使用所有文本/字符串字段”。float_vector 列的表时,MVA 值被保留而不是存储为空的问题。IMPORT TABLE 正确复制外部文件,包括 hitless_words,因此导入的表在导入后不再引用缺失的外部文件。LEFT JOIN 结果以发出正确的 MySQL NULL 值而不是字符串 NULL,从而提高与原生 MySQL 客户端和驱动程序的兼容性。WHERE title='test')上进行过滤而导致的守护进程崩溃;这些查询现在返回错误而不是崩溃。/sql?mode=raw 多语句请求中使用 .@files 后跟 SHOW META 的崩溃。float_vector 列的 ALTER TABLE ... ADD COLUMN,使 model_name 和 FROM 正确保留而不是被替换为 knn_dims='0'。Resource temporarily unavailable 的虚假 HTTP 接收警告。AND 节点的文档计数和成本估计,提高了对交集全文条件的查询规划器决策。indextool --check 无法打开磁盘块 hitless_words 文件的问题,通过相对于索引目录解析其路径来解决。LEFT JOIN 查询。search_stats_ms_* 指标因双重计数本地执行时间而高估搜索时间的问题;这些统计信息现在与实际查询执行时间匹配。HIGHLIGHT() 和片段生成中在单词之间添加不必要的空格的问题;高亮摘录现在保留原始文本间距而不是分词间距。TRUNCATE TABLE ... WITH RECONFIGURE 后对 RT 表(index_field_lengths=1)进行插入时的崩溃,特别是在字段和字符串属性混合时;重新配置期间现在正确设置字段长度属性。SELECT t2.i al, (al*0.1) pct ... WHERE pct > 0,这可能会因 incoming-schema expression missing evaluator 而失败;这些过滤器现在在连接后正确评估。发布日期: 2026年2月7日
如果你遵循 官方安装指南,你无需担心这个问题。
❤️ 我们想感谢 @pakud 在 PR #4075 上的工作。
DROP CACHE 的支持。这更新了守护进程与 MCL 之间的接口。旧版 Manticore Search 不支持较新的 MCL。_id 和 _score 作为数字而不是字符串返回,与常规搜索一致;这对于依赖这些字段字符串类型的客户端来说是一个破坏性变更。CREATE TABLE 中内联设置(分号分隔的值;词形变化/异常词使用 > 或 => 表示对,\ 用于转义),因此可以在不使用外部文件的情况下创建表;SHOW CREATE TABLE 返回这些内联值。SELECT * 时的行为。--quiet (-q) 标志以抑制启动输出(横幅和预缓存消息),仅打印错误;在循环或脚本中启动和停止 searchd 时很有用。Keep-Alive 头,减少了 API 客户端(如 PHP、Go)中的随机连接失败;要关闭连接,客户端发送 Connection: close。HTTP/1.0 仍需要 Connection: keep-alive 以保持持久连接。j.s)进行 JOIN 时没有匹配项的问题;现在与普通字符串属性的 JOIN 一样正常工作。REPLACE INTO,而不仅仅是 INSERT INTO,因此当缺少表时会按需创建表。GROUP BY 结果的问题,通过与行式处理相同的方式拒绝此类查询("MVA 值不能在多个 group-by 中使用")。highlight() 在 html_strip_mode=strip 模式下损坏内容的问题,通过解码实体和修改标签;现在高亮输出中保留原始实体形式。ALTER TABLE REBUILD SECONDARY 失败并报错 failed to rename … .tmp.spjidx 的问题。ATTACH TABLE 现在将这些文件迁移到新的基于块的格式并更新磁盘块头,因此在 ALTER TABLE RENAME 之后,守护进程在重启时不再报告缺失的外部文件。(@name ="^New York$") | (@ascii_name ="^New York$"))返回其他字段匹配项的问题;布尔简化不再在此情况下丢弃字段限制。html_strip='1')的 ALTER TABLE 失败的问题("knn_dims 不能与 model_name 一起使用");当设置 model_name 时,序列化现在省略 knn_dims。HIGHLIGHT 和片段生成现在支持在查询字符串中使用 REGEX,因此当相同的 REGEX 查询在 MATCH 和 HIGHLIGHT 中使用时,REGEX 匹配项会被正确高亮。price*100)时 HISTOGRAM() 返回错误值(例如零)的问题;现在直方图对类似浮点的参数使用浮点分桶,因此表达式结果会被正确分组。HIGHLIGHT() 和片段生成现在支持在引号表达式中使用显式的 OR 运算符(|),使用与搜索相同的查询转换。DROP CACHE 以清除查询、docstore、跳过和二级索引缓存。ORDER BY 包含字符串列时的滚动分页问题:现在滚动标记正确应用并返回下一页而不是重复第一页。WHERE 子句过滤器中使用左表属性前缀时一致地报告错误;之前在某些情况下(例如右表没有全文字段)查询会无错误运行并返回空结果集。CREATE TABLE 和表达式中接受反引号引用的保留关键字(例如 order、year、facet)作为属性和列名,因此表和查询可以在使用反引号转义时使用保留字作为标识符。SHOW CREATE TABLE 现在以反引号输出保留或特殊(例如 knn)的列名,因此当源表有此类列时,CREATE TABLE ... LIKE 和重新执行显示的 DDL 会正常工作。ALTER 期间 docstore 存储属性计数,使不存在的 .spds 重命名不再发生,并在添加列式属性时保留 blob 池中的现有 blob 数据,因此 "Blob offset out of bounds" 和查询/合并崩溃不再发生。0000000000 这样的数字外观字符串),生成无效 JSON;现在字符串属性始终以带引号的 JSON 字符串进行序列化。searchd.attr_autoconv_strict 选项(默认 0),用于控制在 RT 表中插入/替换时的字符串到数字转换:启用时,无效值(空字符串、非数字、尾随字符、溢出)会返回错误而不是静默转换为 0。must_not,使其表现为逻辑 NOT(返回不匹配内部查询的所有文档);还修复了 SphinxQL 的 WHERE NOT ... 用于过滤表达式。libstemmer_el)错误 #204 的版本,防止使用 morphology='libstemmer_el' 时某些希腊文本导致的服务器崩溃(参见问题 #2888)。LazyNetEvents_c::EventTick() 中的使用后释放。CREATE TABLE t (id bigint, tags mva64, ...) type='pq')。模式输出(例如 DESC table)继续使用现有类型名称以保持兼容性。ALTER CLUSTER ... ADD TABLE 的另一个节点时的崩溃问题。NOTNEAR 全文操作符,使其在右项在指定距离内出现在左项之前或之后时正确排除匹配项(对称/反向匹配)。之前 NOTNEAR 仅考虑右项在左项之后出现的情况,例如 d NOTNEAR/3 a 可能错误匹配包含 "a b c d" 的文档。NEAR 现在在距离为 0 时也返回错误。OPTION fuzzy=1)的多查询请求后在 /cli 和 /sql?mode=raw 上执行 show meta 的问题。发布日期: 2025年12月7日
如果你遵循 官方安装指南,则无需担心此问题。
Content-Type,因此 /metrics 现在返回 Prometheus 文本格式 (text/plain; version=0.0.4) 而不是 JSON,修复了抓取失败的问题。LOCK TABLES / UNLOCK TABLES 的处理:写锁现在返回警告而不是错误,读锁在 SHOW LOCKS 中正确显示,整体锁逻辑行为一致。JOIN ON 子句中添加了任意过滤表达式的支持(不仅仅是等值比较),启用了类似 ... ON t1.id = t2.t1_id AND t2.value = 5 的查询。/sql 响应错误地使用了 Content-Type: text/html 头而不是 application/json。GROUP BY / FACET 对属性进行分组时失败的问题,这些属性是通过JSON到属性映射生成的。/sql 端点的支持模糊搜索,并包括其他模糊搜索修复。/cli_json进行的多查询请求包含分号(例如,组合SQL语句)时失败——分号现在在处理前不会被替换为空字符。persistent_connections_limit的分布式表时的内部错误。query_time_1min),实际上报告的是毫秒而不是秒。SHOW INDEX <name> STATUS 搜索时间统计(search_stats_ms_*)与从查询日志计算出的值不匹配;现在报告的时间反映了实际的日志查询时间。application/json。binlog.cpp 中的类型不匹配修复了Windows构建问题,确保 DoSaveMeta() 现在可以正确编译在Windows平台上。MATCH() 解析中的错误修复了空组(如 ())触发错误的问题(例如,查询 camera() 现在可以正确工作)。--skip-lock-tables,并修复了几处损坏的手动链接。LOCK/UNLOCK TABLES 检查(现在由守护进程处理),并修复了自动补全解析,使其能够正确处理带有转义引号(例如 \" 或 \')的查询。knn_dist() 的自定义排名表达式与KNN+MATCH查询时出现的崩溃问题;此类查询现在返回清晰的错误而不是崩溃。发布日期:2025年11月7日
❤️ 我们衷心感谢@ricardopintottrdata在PR #3792和PR #3828中的工作——解决了与HAVING总计数和filter with empty name错误相关的问题——以及@jdelStrother在PR #3819中的贡献,该贡献改进了在未提供Jieba支持时对ParseCJKSegmentation的处理。
您的努力使项目更加强大——非常感谢!
如果您遵循官方安装指南,则无需担心此问题。
版本v14.0.0更新了复制协议。如果您正在运行复制集群,则需要:
manticore_new_cluster在Linux中以--new-cluster参数启动最后停止的节点。LOCK TABLES语句的支持,提高了逻辑备份的安全性。max(ft field)导致的崩溃问题。"(abc|def)"未按预期工作的问题。HAVING的查询获取结果总数的功能。CALL SUGGEST不匹配三元组的问题。ParseCJKSegmentation问题。发布日期:2025年10月7日
如果你遵循官方安装指南,则无需担心此问题。
由于配置文件已更新,在 Linux 系统升级过程中可能会出现警告,询问您是要保留当前版本还是使用包中的新版本。如果您使用的是自定义(非默认)配置,建议保留当前版本,并将 pid_file 路径更新为 /run/manticore/searchd.pid。即使不更改路径,它仍应正常工作。
/var/run/manticore 替换为正确的 /run/manticore 修复了 RHEL 8 上的 systemctl 警告。由于配置文件已更新,您可能在升级过程中看到警告,询问您是要保留当前版本还是使用包中的新版本。如果您使用的是自定义(非默认)配置,建议保留当前版本,并将 pid_file 路径更新为 /run/manticore/searchd.pid。发布日期:2025年9月13日
发布日期:2025年9月13日
此版本的主要亮点是 Auto Embeddings —— 一项新功能,使语义搜索像 SQL 一样简单。 无需外部服务或复杂流程:只需插入文本并使用自然语言进行搜索。
如果您遵循 官方安装指南,则无需担心此问题。
推荐 MCL 版本:8.0.1
推荐 Buddy 版本:3.34.2
/run。boolean_simplify 的支持。alter table <table> modify column <column> api_key=<key> 的支持。/sql端点不再允许使用SHOW VERSION命令。发布日期:2025年8月8日
推荐的MCL版本:8.0.1 推荐的Buddy版本:3.34.2
如果你遵循官方安装指南,则无需担心此问题。
发布日期:2025 年 7 月 8 日
@@collation_databaseSHOW THREADS改为显示CPU利用率作为整数dist/test_kit_docker_build.sh脚本中的一个bug,该bug导致Buddy提交缺失发布时间: 2025年6月9日
此版本包含新功能、一个破坏性更改以及许多稳定性和错误修复。更改重点在于增强监控能力、改进搜索功能并修复了影响系统稳定性和性能的各种关键问题。
从版本 10.1.0 开始,CentOS 7 将不再受支持。建议用户升级到受支持的操作系统。
seqno 以加快崩溃后的节点重启@@variables 总是返回0的问题SELECT ... FUZZY=0 不总是禁用模糊搜索的问题_random 排序的支持id != value 过滤时结果不正确的问题%20 和 +)json.field 的排序不正确问题DELETE FROM 替换为 TRUNCATEgeodist() 时的崩溃发布日期: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.2.39 Issue #3236 修复:通过移除复杂的块更新来防止表损坏。在序列化工作者内部使用等待函数破坏了序列化处理,可能导致表损坏。 重新实现自动刷新。移除了外部轮询队列以避免不必要的表锁定。添加了“小表”条件:如果文档数量低于“小表限制”(8192)且未使用次级索引(SI),则跳过刷新。
🪲 v9.2.38 修复:跳过创建使用ALL/ANY对字符串列表进行过滤且不涉及JSON属性的次级索引(SI)。
🪲 v9.2.37 Issue #2898 重新支持系统表中的反引号。
🪲 v9.2.36 修复:在旧代码中使用占位符进行集群操作。现在在解析器中明确区分表名和集群名字段。
🪲 v9.2.35 修复:解引用单个'时崩溃。
🪲 v9.2.34 Issue #3090 修复:处理大文档ID(之前可能无法找到它们)。
🪲 v9.2.33 修复:使用无符号整数表示位向量大小。
🪲 v9.2.32 修复:合并期间减少峰值内存使用量。docid-to-rowid查找现在每个文档使用12字节而不是16字节。例如:24 GB RAM用于20亿文档而不是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 BY和WHERE对id的操作可能导致OOM(内存不足)错误。
🪲 v9.2.25 Issue #3171 修复:使用grouper和多个JSON属性对具有多个磁盘块的RT表进行分组时导致的段错误崩溃。
🪲 v9.2.24 Issue #3246 修复:WHERE string ANY(...)查询在RAM块刷新后失败。
🪲 v9.2.22 Issue #2763 修复:使用ALTER TABLE时全局idf文件未加载。
🪲 v9.2.21 修复:全局idf文件可能很大。我们现在更早地释放表以避免持有不必要的资源。
🪲 v9.2.18 Issue #3228 修复:分布式表创建期间崩溃(无效指针问题)。
🪲 v9.2.16 Issue #3063 修复:使用 GEODIST 函数时距离计算的错误。
🪲 v9.2.15 Issue #3027 小改进:支持 Elastic 的 query_string 过滤器格式。
发布日期:2025年3月28日
--mockstack 标志以计算递归操作栈需求。新的 --mockstack 模式分析并报告递归表达式求值、模式匹配操作、过滤器处理所需的栈大小。计算出的栈需求输出到控制台,用于调试和优化。searchd.kibana_version_string,当使用特定版本的 Kibana 或 OpenSearch Dashboards(期望特定 Elasticsearch 版本)时可能有用。_id 更改为 id。请确保相应更新您的应用程序。server_id 的检查,以确保每个节点具有唯一 ID。如果加入节点的 server_id 与集群中现有节点的 server_id 相同,JOIN CLUSTER 操作现在会失败,并显示重复 server_id 的错误信息。为解决此问题,请确保复制集群中的每个节点具有唯一的 server_id。您可以在配置文件的 "searchd" 部分将默认 server_id 更改为唯一值,然后再尝试加入集群。此更改更新了复制协议。如果您正在运行复制集群,请执行以下操作:
manticore_new_cluster,以 --new-cluster 参数启动最后停止的节点serializer 这样的特定调度器可以正确恢复。ORDER BY 子句中使用的错误。lower_bound 调用错误 const knn::DocDist_t*&。 ❤️ 感谢 @Azq2 提交的 PR。ALTER 上的两个相关 KNN 索引问题:浮点向量现在保留其原始维度,KNN 索引现在可以正确生成。fuzzy=1 选项无法与 ranker 或 field_weights 一起使用。SET GLOBAL timezone 无效果的错误。UPDATE 语句现在正确尊重 query_log_min_msec 设置。JOIN CLUSTER 失败的竞态条件。发布日期:2025年2月28日
SELECT ... JOIN 查询中使用 avg() 可能导致结果不正确;现在已修复。IN(...) 可能产生错误结果的问题。max_iops / max_iosize 可能降低索引性能;现在已修复。diskchunk_flush_write_timeout=-1 无法禁用索引刷新;现在已修复。NOT 操作符的全文查询和表达式排名器导致的守护进程崩溃。发布日期:2025年1月30日
global_idf的支持。需要重新创建表。cjk字符集中的泰语字符。请相应地更新字符集定义:如果您有cjk,non_cjk且泰语字符对您很重要,请将其更改为cjk,thai,non_cjk,或cont,non_cjk,其中cont是所有连续书写字体语言的新标识(即cjk + thai)。使用ALTER TABLE修改现有表。Name更改为Variable name。create table / alter table。您需要在升级到新版本之前干净地关闭Manticore实例。manticore_new_cluster在Linux中以--new-cluster选项启动最后一个停止的节点。ALTER CLUSTER ADD和DROP中多个表的支持。此更改也影响了复制协议。请参阅上一节以了解如何处理此更新。FACET和GROUP BY中的ORDER BY添加了COUNT(DISTINCT)支持。Content-Encoding: gzip。FACET和GROUP BY添加了SHOW LOCKS命令。mysqldump。CREATE TABLE和ALTER TABLE语句的外部文件重命名。SHOW TABLE INDEXES命令添加了支持。index替换为table。/sql端点聚合结果添加了distinct列。uuid_short expression in the select list.manticore-buddy wrapper.searchd.CALL uuid_short statement to generate sequences with multiple uuid_short values.GROUP BY in SphinxQL.fixed_interval in Kibana date-related requests.searchd log in non-debug mode.json.string 过滤的问题。null 作为所有值,使用默认值代替。_update 请求时守护进程崩溃的问题。thread_stack 的问题。unattended-upgrades 自动删除的问题。CREATE TABLE 和 ALTER TABLE 中特殊字符转义问题。❤️ 感谢 @subnix 的 PR。OPTIMIZE 现在在表被冻结时抛出错误。FREEZE 和 FLUSH RAMCHUNK 后 searchd 停止时挂起的问题。FACET 超过 5 个排序字段时崩溃的问题。index_field_lengths 时恢复 mysqldump 失败的问题。ALTER TABLE 命令时崩溃的问题。FACET 查询错误回复;设置了带有 COUNT(*) 的 FACET 默认排序顺序为 DESC。/sql 和 /sql?mode=raw 查询截断问题;保证这些端点请求一致,无需 query= 头。OR 导致致命错误崩溃的问题。indextool --mergeidf *.idf --out global.idf 在创建输出文件后删除该文件的问题。ORDER BY 字符串的子查询导致守护进程崩溃的问题。lemmatize_xxx_all 分词器中多个停用词导致后续标记 hitpos 增加的问题。ALTER ... ADD COLUMN ... TEXT 时崩溃的问题。SELECT 查询等待解除冻结的问题。_bulk 请求时对未知操作返回错误,而非崩溃。_bulk 端点返回插入文档 ID 的问题。SELECT 查询中的崩溃。IN 表达式中的 ALL 或 ANY 参数不是 JSON 属性,增加错误提示信息。libstemmer 分词失败时崩溃的问题。❤️ 感谢 @subnix 的 PR。CREATE TABLE IF NOT EXISTS ... WITH DATA 在表已存在时失败的问题。REPLACE INTO cluster_name:table_name 功能。--network=host 时出现的致命错误。发布日期:2024年11月22日
版本 6.3.8 继续沿用 6.3 系列,仅包含错误修复。
threads 或 max_threads_per_query 设置限制时可用线程的计算问题。发布日期:2024年10月7日
unattended-upgrades 工具会错误地标记多个 Manticore 软件包(包括 manticore-galera、manticore-executor 和 manticore-columnar-lib)为待删除项。这是由于 dpkg 错误地将虚拟包 manticore-extra 视为冗余所致。已进行更改以确保 unattended-upgrades 不再尝试删除关键的 Manticore 组件。发布日期:2024年8月2日
版本 6.3.6 继续沿用 6.3 系列,仅包含错误修复。
max_query_time 设置导致查询多个索引时的守护进程崩溃或内部错误。发布日期:2024年7月31日
版本 6.3.4 继续沿用 6.3 系列,仅包含小幅改进和错误修复。
hitless_words 保存磁盘块的问题。manticore.json 文件读取而非检查整个数据目录大小。发布日期:2024年6月26日
版本 6.3.2 继续沿用 6.3 系列,包含多个错误修复,其中一些是在 6.3.0 发布后发现的。
local_df启用的情况下,通过RT索引查询时守护进程的崩溃问题。count(*)时的崩溃问题。ALTER TABLE添加属性时未考虑KNN选项的问题。manticore-tools Redhat包失败的问题。CALL KEYWORDS的通配符扩展。/cli请求挂起的问题。/cli执行drop table if exists t; create table t时的挂起问题。/_bulk HTTP端点中添加了对cluster:name格式的支持。发布日期:2024年5月23日
.spa(标量属性):256KB -> 8MB;.spb(二进制属性):256KB -> 8MB;.spc(列式属性):1MB,无变化;.spds(文档存储):256KB -> 8MB;.spidx(次要索引):256KB 缓冲区 -> 128MB 内存限制;.spi(字典):256KB -> 16MB;.spd(文档列表):8MB,无变化;.spp(命中列表):8MB,无变化;.spe(跳跃列表):256KB -> 8MB。libgalera_smm.so)。_rate 更改为 _rps。index 更改为 table 在错误消息中;修复了 Bison 解析器错误消息修复。manticore.tbl 作为表名。create distributed table 语句添加了默认值支持(agent_connect_timeout 和 agent_query_timeout)。searchd.expansion_limit。SHOW STATUS 中添加 Buddy 版本。@@system.sessions 中显示最后命令时间。/sql 端点的额外请求格式,以简化与库的集成。CALL PQ 大包时的内存消耗。log_level=debug,否则禁用了 Buddy 查询的日志记录。DEBUG DEDUP 命令。@timestamp 列作为时间戳。local_df现在是默认值。改进了主代理搜索协议(版本已更新)。如果您在分布式环境中运行Manticore Search并有多个实例,请确保首先升级代理,然后再升级主节点。manticore_new_cluster,以--new-cluster参数启动最后停止的节点。/json/*已被弃用。plugin_dir。/search响应中将文档ID视为数字。charset_table中的覆盖功能未正常工作。gcache.page_size的计算;还修复了Galera选项的保存和加载。searchd.agent_*但具有不同的默认值。show variables中复制日志的详细程度级别。count distinct 中未使用的匹配项清理问题,该问题可能导致崩溃。index_token_filter 的实时表中执行搜索时发生的崩溃。debugv 详细级别的警告移至适当位置。index_exact_words 在索引和将表加载到守护进程时的不一致问题。morphology_skip_fields 字段的全文查询添加了将术语转换为 =term 的查询转换。data_dir 更改影响守护进程启动时的当前工作目录后,相对路径(从守护进程的启动目录转换为绝对路径)不正确的问题。agent_query_timeout 被默认查询选项 agent_query_timeout 替换的问题。packedfactors() 且每个匹配有多个值时,分组器和排序器处的崩溃问题。min_prefix_len / min_infix_len 的术语的通配符扩展。SPH_EXTNODE_STACK_SIZE 值。FACET 错误。WHERE json.array IN (<value>) 返回空结果。/cli 发送请求时 TableFormatter 的问题。CREATE TABLE 在缺少词形变化文件时未失败。SPH_SORT_ATTR_DESC 和 SPH_SORT_ATTR_ASC 时,按字符串属性排序不起作用。Expect: 100-continue HTTP 头。/search 上未引发错误。ALTER CLUSTER ADD 和 JOIN CLUSTER 操作,使其相互等待,防止出现竞态条件,即 ALTER 向集群添加表时,捐赠者正在向连接节点发送表。/pq/{table}/* 请求的处理不正确。UNFREEZE 在某些情况下不起作用。/cli_json 请求进行不必要的 URL 解码的问题。signal 11。FREEZE 计数器以避免冻结/解冻问题。max_query_time 在某些情况下可能不起作用。SecondaryIndex CBO 提示。expansion_limit,以便为来自多个磁盘块或 RAM 块的调用关键字切片最终结果集。alter 失败。--force 标志tmp.spidx 文件时守护进程超出打开文件限制的问题。HAVING 中使用列式属性进行聚合时的崩溃。expr 排序器中使用列式属性时的崩溃。manticore.conf.sh 中的主机名。发布日期:2023 年 8 月 23 日
版本 6.2.12 继续 6.2 系列,并解决了 6.2.0 发布后发现的问题。
TimeoutStartSec 从 infinity 修改为 0,以提高与 Centos 7 的兼容性。searchdreplication.cpp 中的拼写错误:beggining -> beginning。Thd_t 构建问题。ColumnarScan 的问题。AF_INET 错误添加了替换。/bulk 端点的信息。发布日期:2023 年 8 月 4 日
pseudo_sharding 已调整为限制在空闲线程数内。此更新显著提高了吞吐量性能。/json/pq HTTP端点的别名。upper()和lower()的多字节兼容性。count(*)查询,现在返回预计算值,而不是扫描索引。SELECT进行任意计算并显示@@sysvars。与之前不同,您不再仅限于一个计算。因此,类似select user(), database(), @@version_comment, version(), 1+1 as a limit 10的查询将返回所有列。请注意,可选的'limit'将始终被忽略。CREATE DATABASE的存根查询。ALTER TABLE table REBUILD SECONDARY时,现在即使属性未更新,也会始终重建二级索引。SELECT DATABASE()命令的支持。但是,它将始终返回Manticore。此添加对于与各种MySQL工具的集成至关重要。/cli_json端点以充当之前的/cli。SET语句在运行时更改thread_stack。会话本地和守护进程范围的变体均可用。当前值可以在show variables输出中访问。SHOW STATUS命令中看到类似Linux上'uptime'的负载指标。DESC和SHOW CREATE TABLE的字段和属性顺序现在与SELECT * FROM匹配。P01)。此增强功能有助于识别导致错误的解析器,并且隐藏了非必要的内部细节。sentence选项以显示整个句子strftime()函数。/bulk端点会报告有关处理和未处理字符串(文档)数量的信息。CREATE TABLE操作失败的问题。现在,一次只能运行一个CREATE TABLE操作。Get调用,取代了之前的两步AdvanceTo + Get调用以检索值。CheckReplaceEntry调用,以加快聚合函数的计算速度。CREATE TABLE选项read_buffer_docs和read_buffer_hits现在支持k/m/g语法。apt/yum install manticore-language-packs轻松安装。在macOS上,使用命令brew install manticoresoftware/tap/manticore-language-packs。SHOW CREATE TABLE和DESC操作之间的字段和属性顺序现在一致。INSERT查询时磁盘空间不足,新的INSERT查询将失败,直到有足够的磁盘空间可用。/bulk端点现在将空行作为提交命令处理。更多信息此处。count(*)时,查询现在在可用时利用二级索引的预计算数据,显著加快查询速度。/*+ SecondaryIndex(uid) */。请注意,旧语法不再受支持。@。indexed和attribute的字符串字段/属性现在在INSERT、DESC和ALTER操作期间被视为单个字段。manticore.json配置文件引起的守护程序崩溃。.sph文件在ALTER操作后可能被损坏。已修复。pre_commit错误。pseudo_sharding也能在磁盘块上并行执行的问题。show index status命令返回的值集,并根据使用的索引类型有所不同。expand_keywords选项引起的双精确扩展。SNIPPETS()被调用时内部冲突导致的崩溃问题。not_terms_only_allowed选项与RT索引中被杀死文档的查询结果集中的重复文档问题。FEDERATED引擎执行聚合查询时的守护程序崩溃问题。rt_attr_json列与列式存储不兼容的问题。ignore_chars影响的问题。--dumpdocids命令的功能。morphology_skip_fields相关的损坏。max_packet_size检查。此外,最新的集群错误已添加到状态显示中。MANTICORE_BUDDY_TIMEOUT(默认3秒),以控制守护程序在启动时等待buddy消息的时间。SHOW CREATE TABLE中外部文件的完整路径显示。SNIPPET()函数的目标文本中使用。all()/any()被记录下来。发布日期:2023 年 3 月 15 日
/pq HTTP 端点作为 /json/pq HTTP 端点的别名。发布日期:2023 年 2 月 10 日
发布日期:2023 年 2 月 7 日
从此次发布开始,Manticore Search 配备了 Manticore Buddy,这是一个用 PHP 编写的辅助守护进程,处理不需要超低延迟或高吞吐量的高级功能。Manticore Buddy 在后台运行,您可能甚至不会意识到它正在运行。尽管对最终用户是不可见的,但使 Manticore Buddy 容易安装并与主要的 C++ 守护进程兼容是一个重大挑战。这一重大变更将使团队能够开发一系列新的高级功能,如分片编排、访问控制和身份验证,以及各种集成,如 mysqldump、DBeaver、Grafana mysql 连接器。目前它已经处理 SHOW QUERIES,BACKUP 和 Auto schema。
此版本还包括超过 130 个错误修复和众多功能,其中许多可以被视为重大更新。
SET GLOBAL ES_COMPAT=off 禁用它。manticore-backup 用于 备份和恢复 Manticore 实例KILL 用于终止长时间运行的 SELECT。max_matches 以提高准确性和降低响应时间。accurate_aggregation 和 max_matches_increase_threshold 用于控制聚合准确性。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。ALTER TABLE <table name> REBUILD SECONDARY以重建二级索引。如果您正在运行复制集群,则需要在所有节点上运行ALTER TABLE <table name> REBUILD SECONDARY,或按照此说明操作,只需更改:运行ALTER .. REBUILD SECONDARY而不是OPTIMIZE。
⚠️ 突破性变更: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 #1012 在indexer的输出中添加了二级索引进度。
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 4ae7 已将二级索引统计信息添加到SHOW META。
Commit 2e7c JSON接口现在可以使用Swagger Editor https://manual.manticoresearch.com/Openapi#OpenAPI-specification 轻松可视化。
⚠️ 突破性变更:复制协议已更改。如果您正在运行复制集群,则在升级到Manticore 5时需要:
--new-cluster参数启动最后停止的节点(在Linux中运行工具manticore_new_cluster)。select attr, count(*) from plain_index(无过滤)的查询,如果使用MCL现在会更快。brew install manticoresoftware/manticore/manticoresearch manticoresoftware/manticore/manticore-extra。brew install manticoresoftware/manticore/manticoresearch manticoresoftware/manticore/manticore-extra.textbinlog_flush = 1 从Sphinx以来一直被破坏。已修复。got exception while reading ist stream: mkstemp(./gmb_pF6TJi) failed: 13 (Permission denied)got exception while reading ist stream: mkstemp(./gmb_pF6TJi) failed: 13 (Permission denied) if the searchd was started from a directory it can't write to.发布日期:2022年5月30日
发布日期:2022年5月18日
🔬 支持 Manticore Columnar Library 1.15.2,这启用了 二级索引 的测试版。对于普通和实时列式和行式索引,默认启用二级索引(如果使用了 Manticore Columnar Library),但要启用搜索功能,您需要在配置文件中或使用 SET GLOBAL 设置 secondary_indexes = 1。新功能在所有操作系统中均受支持,除了旧版 Debian Stretch 和 Ubuntu Xenial。
只读模式:现在您可以指定仅处理读取查询并丢弃任何写入的监听器。
新的 /cli 端点,通过 HTTP 更轻松地运行 SQL 查询。
通过 JSON 以 HTTP 进行更快的批量 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 数据,而无需等待整个批次传输完成,这:
max_packet_size 最大允许值(128MB)大得多的批次,例如每次传输 1GB。#719 HTTP 接口支持 100 Continue:现在您可以从 curl(包括各种编程语言使用的 curl 库)传输大型批次,curl 默认执行 Expect: 100-continue 并在实际发送批次前等待一段时间。之前您需要添加 Expect: 头,现在不需要了。
之前(注意响应时间):
$ time curl -v -sX POST http://localhost:9318/bulk -H "Content-Type: application/x-ndjson" --data '{"insert": {"index": "user", "doc": {"name":"Prof. Matt Heaney IV","email":"[email protected]","description":"Tempora ullam eaque consequatur. Vero aut minima ut et ut omnis officiis vel. Molestiae quis voluptatum sint numquam.","age":15,"active":1}}}
{"insert": {"index": "user", "doc": {"name":"Prof. Boyd McKenzie","email":"[email protected]","description":"Blanditiis maiores odio corporis eaque illum. Aut et rerum iste. Neque et ullam quisquam officia dignissimos quo cumque.","age":84,"active":1}}}
{"insert": {"index": "user", "doc": {"name":"Mr. Johann Smith","email":"[email protected]","description":"Temporibus amet magnam consequatur omnis consequatur illo fugit. Debitis natus doloremque est tempore deserunt vero. Harum eos corrupti nemo ut.","age":89,"active":1}}}
{"insert": {"index": "user", "doc": {"name":"Hector Pouros","email":"[email protected]","description":" as voluptatem inventore sit. Aliquam fugit perferendis est id aut odio et sapiente.","age":64,"active":1}}}'
* Trying 127.0.0.1...
* Connected to localhost (127.0.0.1) port 9318 (#0)
> POST /bulk HTTP/1.1
> Host: localhost:9318
> User-Agent: curl/7.47.0
> Accept: */*
> Content-Type: application/x-ndjson
> Content-Length: 1025
> Expect: 100-continue
>
* Done waiting for 100-continue
* We are completely uploaded and fine
< HTTP/1.1 200 OK
< Server: 4.2.0 15e927b@211223 release (columnar 1.11.4 327b3d4@211223)
< Content-Type: application/json; charset=UTF-8
< Content-Length: 434
<
* Connection #0 to host localhost left intact
{"items":[{"insert":{"table":"user","_id":2811798918248005633,"created":true,"result":"created","status":201}},{"insert":{"table":"user","_id":2811798918248005634,"created":true,"result":"created","status":201}},{"insert":{"table":"user","_id":2811798918248005635,"created":true,"result":"created","status":201}},{"insert":{"table":"user","_id":2811798918248005636,"created":true,"result":"created","status":201}}],"errors":false}
real 0m1.022s
user 0m0.001s
sys 0m0.010s
现在:
$ time curl -v -sX POST http://localhost:9318/bulk -H "Content-Type: application/x-ndjson" --data '{"insert": {"index": "user", "doc": {"name":"Prof. Matt Heaney IV","email":"[email protected]","description":"Tempora ullam eaque consequatur. Vero aut minima ut et ut omnis officiis vel. Molestiae quis voluptatum sint numquam.","age":15,"active":1}}}
{"insert": {"index": "user", "doc": {"name":"Prof. Boyd McKenzie","email":"[email protected]","description":"Blanditiis maiores odio corporis eaque illum. Aut et rerum iste. Neque et ullam quisquam officia dignissimos quo cumque.","age":84,"active":1}}}
{"insert": {"index": "user", "doc": {"name":"Mr. Johann Smith","email":"[email protected]","description":"Temporibus amet magnam consequatur omnis consequatur illo fugit. Debitis natus doloremque est tempore deserunt vero. Harum eos corrupti nemo ut.","age":89,"active":1}}}
{"insert": {"index": "user", "doc": {"name":"Hector Pouros","email":"[email protected]","description":" as voluptatem inventore sit. Aliquam fugit perferendis est id aut odio et sapiente.","age":64,"active":1}}}'
* Trying 127.0.0.1...
* Connected to localhost (127.0.0.1) port 9318 (#0)
> POST /bulk HTTP/1.1
> Host: localhost:9318
> User-Agent: curl/7.47.0
> Accept: */*
> Content-Type: application/x-ndjson
> Content-Length: 1025
> Expect: 100-continue
>
< HTTP/1.1 100 Continue
< Server: 4.2.1 63e5749@220405 dev
< Content-Type: application/json; charset=UTF-8
< Content-Length: 0
* We are completely uploaded and fine
< HTTP/1.1 200 OK
< Server: 4.2.1 63e5749@220405 dev
< Content-Type: application/json; charset=UTF-8
< Content-Length: 147
<
* Connection #0 to host localhost left intact
{"items":[{"bulk":{"table":"user","_id":2811798919590182916,"created":4,"deleted":0,"updated":0,"result":"created","status":201}}],"errors":false}
real 0m0.015s
user 0m0.005s
sys 0m0.004s
⚠️ 突破性变更:伪分片 默认启用。如果您想禁用它,请确保在 Manticore 配置文件的 searchd 部分添加 pseudo_sharding = 0。
实时/普通索引中不再需要至少一个全文字段。现在即使不涉及全文搜索也可以使用 Manticore。
快速获取 支持由 Manticore Columnar Library 提供支持的属性:类似 select * from <columnar table> 的查询现在比之前快得多,尤其是当模式中有许多字段时。
⚠️ 突破性变更:隐式 截断。Manticore 现在不会花费时间和资源处理您不需要的结果集数据。缺点是它会影响 SHOW META 中的 total_found 和 JSON 输出中的 hits.total。现在只有在看到 total_relation: eq 时才准确,而 total_relation: gte 表示实际匹配的文档数量大于您获得的 total_found 值。要保留之前的行为,您可以使用搜索选项 cutoff=0,这会使 total_relation 始终为 eq。
⚠️ 突破性变更:所有全文字段现在默认 存储。您需要使用 stored_fields = (空值)使所有字段不存储(即恢复到之前的行为)。
.meta,.sph)是二进制格式,现在只是 json。新的 Manticore 版本将自动转换旧索引,但:
WARNING: ... 语法错误,意外的 TOK_IDENT 的警告SELECT 之后调用 SHOW META,它将像通过 mysql 一样工作。注意,之前也支持 Connection: keep-alive HTTP 头,但它只会导致重用相同的连接。从这个版本开始,它还会使会话变为有状态。columnar_attrs = * 来在 plain mode 中定义所有属性为列式,这在属性列表较长时很有用。--new-cluster 启动最后停止的节点(在 Linux 中运行工具 manticore_new_cluster)。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,显著提高了准确性。DEBUG malloc_stats。sphinxql。如果你习惯使用 plain 格式,需要在配置文件中添加 query_log_format = plain。max_connections 限制,这可能导致非 VIP 连接出现“已满”错误。现在 VIP 连接不计入限制。当前 VIP 连接的数量也可以在 SHOW STATUS 和 status 中查看。/sql?mode=raw 现在需要转义并返回数组。/bulk INSERT/REPLACE/DELETE 请求的响应格式变更:
low_priority 和 boolean_simplify 现在需要指定值(0/1):之前您可以使用 SELECT ... OPTION low_priority, boolean_simplify,现在需要使用 SELECT ... OPTION low_priority=1, boolean_simplify=1。query_log_format=sphinxql 模式下以不同格式记录。之前仅记录全文部分,现在按原样记录。⚠️ 破坏性变更:由于新结构,升级到 Manticore 5 时建议在安装新包前移除旧包:
yum remove manticore*apt remove manticore*新的 deb/rpm 包结构。旧版本提供:
manticore-server 包含 searchd(主搜索守护进程)及其所需所有内容manticore-tools 包含 indexer 和 indextoolmanticore 包含所有内容manticore-all RPM 作为元包,指向 manticore-server 和 manticore-tools新结构为:
manticore - deb/rpm 元包,安装时会将上述所有内容作为依赖项安装manticore-server-core - searchd 及其单独运行所需的所有内容manticore-server - systemd 文件和其他辅助脚本manticore-tools - indexer、indextool 和其他工具manticore-common - 默认配置文件、默认数据目录、默认停用词manticore-icudata、manticore-dev、manticore-converter 变化不大.tgz 压缩包支持 Ubuntu Jammy
通过 YUM repo 支持 Amazon Linux 2
application/x-ndjson时.NET HttpClient Content-Type不兼容ranker插入 1M PQ 规则需要 48 秒,而以 10K 批次替换 40K 规则需要 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
插入 1M PQ 规则需要 34 秒,以 10K 批次替换它们需要 23 秒。
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:06:38 AM CET 2021
Wed Dec 22 10:07:12 AM CET 2021
+----------+
| count(*) |
+----------+
| 1000000 |
+----------+
root@perf3 ~ # date; (echo "begin;"; for offset in `seq 0 10000 990000`; 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:12:31 AM CET 2021
Wed Dec 22 10:14:00 AM CET 2021
root@perf3 ~ # time mysql -P9306 -h0 < /tmp/replace.sql
real 0m23.248s
user 0m0.891s
sys 0m0.047s
searchd 部分中可用。当你希望全局限制所有索引中的 RT 块数量时,这很有用。YEAR() 和其他时间戳函数的 bigint 支持。rt_mem_limit 的数据,而在保存期间仍会收集最多 10% 的额外数据(即双缓冲)以尽量减少可能的插入暂停。如果该限制也被耗尽,添加新文档将被阻塞,直到磁盘块完全保存到磁盘。新的自适应限制基于我们现在有 auto-optimize 的事实,因此磁盘块不完全遵循 rt_mem_limit 并提前开始刷新磁盘块并不是大问题。因此,我们现在收集最多 rt_mem_limit 的 50%,并将其保存为磁盘块。在保存时,我们查看统计信息(已保存的数量、保存期间到达的新文档数量)并重新计算下次使用的初始速率。例如,如果我们保存了 9000 万文档,而在保存期间又到达了 1000 万文档,速率是 90%,因此我们知道下次可以收集最多 rt_mem_limit 的 90% 之后才开始刷新另一个磁盘块。速率值会自动从 33.3% 计算到 95%。indexer -v 和 --version。之前你仍然可以看到 indexer 的版本,但 -v/--version 不被支持。MANTICORE_TRACK_RT_ERRORS,用于调试 RT 段损坏问题。/var/lib/manticore/binlog/ 目录下不应有除 binlog.meta 以外的 binlog 文件。show threads option format=all 中新增列 "chain"。它显示某些任务信息票据的堆栈,对性能分析最有用,因此如果你正在解析 show threads 的输出,请注意这个新列。searchd.workers 自 3.5.0 版本起已被弃用,现在标记为已弃用。如果你的配置文件中仍有该参数,启动时会触发警告。Manticore Search 仍会启动,但会带有警告。PDO::ATTR_EMULATE_PREPARESindextool --check 可能会崩溃Manticore Columnar Library 的完整支持。之前 Manticore Columnar Library 仅支持普通索引。现在支持:
INSERT、REPLACE、DELETE、OPTIMIZEALTER 中indextool --check 中自动索引压缩 (Issue #478)。终于,您无需手动调用 OPTIMIZE 或通过 cron 任务或其他自动化方式。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 文档。
ALTER 可以添加/移除一个全文字段(在 RT 模式下)。之前只能添加/移除一个属性。
🔬 实验性功能:全扫描查询的伪分片 - 允许并行执行任何非全文搜索查询。现在无需手动准备分片,只需启用新选项 searchd.pseudo_sharding,即可期待非全文搜索查询的响应时间降低至 CPU 核心数 的水平。请注意,它可能会轻松占用所有现有 CPU 核心,因此如果您不仅关注延迟,还关注吞吐量,请谨慎使用。
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
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 0m0.006s
user 0m0.004s
sys 0m0.001s
--replay-flags=ignore-trx-errors 和 --replay-flags=ignore-all-errors,以便在 binlog 被损坏时仍可启动 searchdcharset_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_cjkOPTIMIZE 会自动执行。如果您不需要,请确保在配置文件的 searchd 部分设置 auto_optimize=0ondisk_attrs_default 已弃用,现在已被移除total 指标,但不会影响 total_found,后者是实际找到的文档数量。/var/lib/manticore/binlog/ 目录中不应有 binlog 文件(目录中仅应包含 binlog.meta)--new-cluster 启动最后停止的节点(在 Linux 中运行工具 manticore_new_cluster)ERROR 1064 (42000): invalid GTID, (null) 而失败,供体节点在另一个节点连接时可能无响应indextool --help 不显示参数 --rotatecommand_insert、command_replace 等显示了错误的指标charset_table 有错误的默认值SELECT * FROM pq ORDER BY id desc LIMIT 1000 , 100 OPTION max_matches=1100 之前无法正常工作Manticore 4之前的维护版本
manticore_new_cluster [--force] 用于通过systemd重启复制集群indexer --merge 的 --drop-srcblend_mode='trim_all'WHERE json.a = 1 的查询上延迟降低了3-4%DEBUG SPLITindextool --dumpheaderreverse_scan 已弃用。确保从 3.6.0 开始不要在查询中使用此选项,否则它们将失败reverse_scan 已弃用indexer --all 且配置文件中不仅有 plain 索引时很有用。没有 ignore_non_plain=1,您将收到警告和相应的退出代码。indexer --verbose 已弃用,因为它从未在索引器输出中添加任何内容USR2 而不是 USR12* 核心数)而不是一个。可以通过 cutoff 选项控制最佳块数。0 来启用它。SELECT 查询可以通过 OPTION threads=N 限制线程数,覆盖全局的 max_threads_per_query。/search 现在通过新查询节点 aggs 支持 faceting/grouping。listen=...:sphinx 需要显式设置用于 SphinxSE 连接或 SphinxAPI 客户端。killed_documents、killed_rate、disk_mapped_doclists、disk_mapped_cached_doclists、disk_mapped_hitlists 和 disk_mapped_cached_hitlists。status 现在输出 Queue\Threads 和 Tasks\Threads。dist_threads 已完全弃用,如果仍使用该指令,searchd 将记录警告。官方的 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 - 提供辅助工具(indexer、indextool 等)、它们的手册页和示例。它还将安装 manticore-common 作为依赖项。manticore-icudata (RPM) 或 manticore-icudata-65l (DEB) - 提供 icu 形态分析使用的 ICU 数据文件。manticore-devel (RPM) 或 manticore-dev (DEB) - 提供 UDF 的开发头文件。此版本发布耗时较长,因为我们正在努力将多任务模式从线程改为 协程。这使配置更简单,查询并行化也更直接:Manticore 只需使用给定数量的线程(参见新设置 threads),新模式确保以最优化的方式完成。
高亮 的更改:
highlight({},'field1, field2')或 JSON 查询中的 highlight 现在默认按字段应用限制。highlight({}, string_attr 或 snippet() 现在对整个文档应用限制。limits_per_field=0 选项切换为全局限制(默认为 1)。0,用于通过 HTTP JSON 的高亮。现在可以使用 相同的端口 接受 http、https 和二进制 API(以接受来自远程 Manticore 实例的连接)。仍需要 listen = *:mysql 以通过 mysql 协议连接。Manticore 现在会自动检测尝试连接到它的客户端类型,除了 MySQL(由于协议的限制)。
在 RT 模式下,一个字段现在可以同时是 文本和字符串属性 - GitHub 问题 #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)
status 命令。in 现在可通过HTTP JSON接口使用。expressions。rt_mem_limit,即可以执行 ALTER ... rt_mem_limit=<新值>。chinese、japanese 和 korean。SHOW THREADS 的输出。SHOW THREADS 中显示长时间 CALL PQ 的进度。SET [GLOBAL] wait_timeout=NUM ,INSERT INTO PQ VALUES()(即不提供列列表)之前预期值为(query, tags)。现在已更改为(id,query,tags,filters)。如果希望自动生成id,可以将其设置为0。allow_empty=0 是通过HTTP JSON接口进行高亮显示的新默认值。CREATE TABLE/ALTER TABLE 中,外部文件(停用词、例外等)仅允许使用绝对路径。ram_chunks_count 在 SHOW INDEX STATUS 中已重命名为 ram_chunk_segments_count。workers 已过时。现在只有一种workers模式。dist_threads 已过时。所有查询现在尽可能并行(受 threads 和 jobs_queue_size 限制)。max_children 已过时。使用 threads 来设置Manticore使用的线程数(默认设置为CPU核心数)。queue_max_length 已过时。如果确实需要,可以改用 jobs_queue_size 来微调内部作业队列大小(默认为无限制)。/json/* 端点现在都可以不带 /json/ 使用,例如 /search、/insert、/delete、/pq 等。field 表示“全文字段”在 describe 中已重命名为 “text”。
<!-- more -->
3.4.2:
mysql> describe t;
+-------+--------+----------------+
| Field | Type | Properties |
+-------+--------+----------------+
| id | bigint | |
| f | field | indexed stored |
+-------+--------+----------------+
mysql> describe t;
+-------+--------+----------------+
| Field | Type | Properties |
+-------+--------+----------------+
| id | bigint | |
| f | text | indexed stored |
+-------+--------+----------------+
non_cjk 字符集表(默认)中,西里尔字母 и 不再映射到 i,因为这影响了俄语词干提取器和词形还原器。read_timeout。改用 network_timeout,它控制读取和写入。manticore-bin 更改为 manticorecount(*) 显示不同数字/json/replace 和 json/update 以指数形式返回 idhitless_words 在 RT 模式下不起作用ALTER RECONFIGURErt_mem_limit 在 searchd 重启后重置为 128MSHOW CREATE TABLE 与多个词形转换文件的冲突SHOW CREATE TABLE 对于 PQ 不起作用CREATE TABLE LIKE 对于 PQ 无法正常工作CREATE TABLE LIKE 内嵌错误ALTER reconfigure 破坏 PQ 索引HIGHLIGHT() 不会在字符串属性中高亮FACET 无法按字符串属性排序CALL PQ 在 json 大于某个值时返回 "字符串中的错误 JSON 对象:1"。max_xmlpipe2_field = 2M 在 2M 字段上返回警告[null] 作为 json 属性会导致插入数据损坏access_plain_attrs、access_blob_attrs、access_doclists、access_hitlistsserver_idread_buffer、ondisk_attrs、ondisk_attrs_default、mlock 被 access_* 指令取代Cmake 的最低版本现在为 3.13。编译需要 boost 和 libssl 开发库。
format=sphinxql以SQL格式打印所有查询clone_attrs阶段shutdown 的密码的 SHA1 哈希值docs_id 选项SET wait_timeout(用于更好的 ProxySQL 兼容性)-DUSE_JEMALLOC=1 启用在此版本中,我们更改了主服务器和代理之间通信使用的内部协议。如果您在具有多个实例的分布式环境中运行 Manticoresearch,请确保首先升级代理,然后再升级主服务器。
multiplier 行Manticore Search 使用 cmake 构建,编译所需的最低 gcc 版本是 4.7.2。
manticore 用户下运行。/var/lib/manticore/。/var/log/manticore/。/var/run/manticore/。