我们高兴地宣布发布 Manticore Search 3.3.0。可以在 此处 下载。Docker 镜像可在 Docker Hub 上获得。
新特性
多线程实时搜索
3.3.0 中的 2 个主要特性之一是 实时索引的多线程搜索。在带有多个磁盘块的实时索引的情况下(如果您很少运行 OPTIMIZE ,这种情况经常发生),使用 dist_threads > 1 将允许搜索同时在磁盘块中使用多个线程进行并行搜索。到目前为止,每个实时索引使用一个线程,如果它有多个磁盘块,则逐个搜索所有磁盘块,导致搜索变慢(或非常慢)。如果您的应用程序不是 CPU 受限,则新功能可以显著提高性能。性能可能甚至高于 OPTIMIZE 后的性能。
创建表α 和 删除表α
另一个自 3.3.0 起可用的主要特性是 支持创建和删除表。从现在起,如果您使用实时索引(我们强烈推荐),您可能根本不需要为它们配置任何内容。您的配置可以这样看:
searchd {
listen = 9306:mysql41
data_dir = data
pid_file = 9306.pid
binlog_path = data
}
就这样。之后,要创建一个索引,只需执行
mysql> create table idx(f field, a int);
Query OK, 0 rows affected (0.00 sec)
然后您的索引将存在:
mysql> desc idx;
+-------+--------+----------------+
| Field | Type | Properties |
+-------+--------+----------------+
| id | bigint | |
| f | field | indexed stored |
| a | uint | |
+-------+--------+----------------+
3 rows in set (0.00 sec)
然后在不需要时只需删除它:
mysql> drop table idx;
Query OK, 0 rows affected (0.00 sec)
mysql> show tables;
Empty set (0.00 sec)
这意味着现在从您的应用程序控制不仅是您的数据,还可以控制您的架构。是不是很棒?
注意:此功能处于 alpha 阶段。尚未记录,语法可能会稍有变化,我们不知道有人在生产中使用它。如果您想成为 beta 测试人员,请告诉我们,我们将共同努力确保它正常工作。
为了使用此功能,配置中不得有任何索引/源定义,并且需要像下面的示例一样设置 data_dir。此模式不支持纯索引。
现有设置的工作方式与之前相同,但您不能在其中使用创建/删除表命令。
indexer --print-rt
Indexer 现在有一个新选项 –print-rt,它将从一个普通索引源导出数据,作为实时索引的 INSERT 命令。与此一起,数据的 schema 作为实时字段/属性提供。
解释查询
EXPLAIN QUERY 是一个命令,用于返回与 SHOW PLAN 类似的全文查询执行树,但与之不同的是它不对索引进行实际搜索,索引可以为空,甚至是模板类型。以下是一个示例:
mysql> explain query idx 'abc "def ghi" "a b c d"~5 I'\G
*************************** 1. row ***************************
Variable: transformed_tree
Value: AND(
AND(KEYWORD(abc, querypos=1)),
PHRASE(
AND(KEYWORD(def, querypos=2)),
AND(KEYWORD(ghi, querypos=3))),
PROXIMITY(distance=5,
AND(KEYWORD(b, querypos=4)),
AND(KEYWORD(c, querypos=5)),
AND(KEYWORD(d, querypos=6))))
1 row in set (0.00 sec)
其他改进
- 更新至 Snowball 2.0 词干库。这使得词干的数量增加到 25 ,所有都是我们 包 的一部分。
- SHOW INDEX STATUS 语句新增 LIKE,以便于过滤。
- 高 max_matches 的查询中,内存使用大幅改善。
- 对于 systemd 包,我们已将 LimitNOFILE 从 ‘infinity’ 更改为 65536。
- Percolate Queries 现在是无锁的 - 在以前的版本中,较长的 CALL PQ 或对存储查询的更新会相互干扰。
此版本修复了一些错误,列举几个:
HIGHLIGHT()
与 passage macro 的问题 ( 493a5e9 和 html 剔除 ( ca81114 )- 在某些情况下,RT 索引创建了过多的磁盘块 ( 8bea0f6 , a82d41c)
- docstore 使用 ATTACH 时的问题 ( 6895374 ) 和分布式索引 ( d6f696e )
有关完整的变更日志,请参阅 release notes .