关于我

关于Manticore的一些话
当我开始学习Manticore Search时,我发现它是一个功能强大的开源数据库。它可以通过SQL和JSON进行快速的全文搜索,并且还有更多功能。它于2017年创建,自那时以来经过了大量测试和改进。得益于强大的社区,许多错误已被修复,现在运行得非常好。
Manticore非常适合快速查找单词、短语和句子,并且有许多其他高级功能。这使其非常适合在线商店和企业搜索系统等场景。凭借众多有用的特性以及社区和Manticore Software团队的支持,很容易理解为什么许多人选择Manticore作为他们的搜索需求。
在本文中,我将向您展示如何开始使用Manticore
从哪里开始
最小环境
- 互联网
- 不太老旧的操作系统(Mac、Win或Lin - 无所谓)
- Docker或Docker Desktop。
- 相对直的胳膊
- 强烈的愿望通过创建高质量、易于使用的软件,结合快速的数据库和搜索系统来改善世界。
工具
- 控制台(或者您可以使用Docker Desktop连接到容器)
- 文件管理器(可选,我喜欢 Midnight Commander )
- 控制台文本编辑器(例如,mcedit、nano、vim)。在示例中,我们将使用Midnight Commander内置的编辑器mcedit,以避免需要查找vim的退出命令。
使用MC时,不需要安装编辑器,因为内置的编辑器就足够了。如果已安装了其他编辑器,首次执行[F4 Edit]命令时,MC会提示您选择所需的编辑器。示例将使用内置的MC编辑器,该编辑器通过在界面中选择文件时按下[F4]或使用mcedit <文件名要创建/打开>命令调用。
更快捷的方式是从命令行完成所有操作。 我想快速!
基础设施部署
我们将使用Docker容器进行Manticore的实验,因为这是一个流行的跨平台解决方案,并且通常用于Manticore需求最高的环境中,尽管数据库有适用于所有流行操作系统的版本。
那些已经知道如何使用docker的专业人士可以在容器启动前跳过这些步骤。好吧,新手和我将从头开始逐步进行。
首先,您必须完成以下步骤:
- 从网站
https://www.docker.com/
下载适用于我们平台的Docker Desktop:

- 安装完成后,我们需要获取官方的Manticore镜像。在应用程序的顶部栏中有一个搜索栏。只需在该栏中输入"ManticoreSearch"。
- 在输出结果中,我们有"manticoresearch/manticore"。

- 点击"pull"按钮,然后切换到镜像标签。
- 然后我们选择刚刚下载的新镜像并点击"play"。
在弹出的窗口中,您需要输入一些额外的设置:
- 容器名称:
manticore。 - 对于端口,为了简单起见,我们使用与数据库相同的端口
9306。 - 在环境变量中,设置变量
EXTRA的值为1。这是运行一些非常有用的补充组件所必需的。了解更多请参阅 这里 。
然后点击"Run"
接下来,返回到容器标签。我们将在活动容器列表中找到我们的容器。在下拉菜单中,有一个"在终端中打开"选项。将弹出一个与您的容器直接连接的终端窗口。
恭喜,您已成功在计算机上安装了Manticore Search docker镜像。
在使用Docker Desktop界面一段时间后,您会意识到最快捷的方式是通过命令行完成任务。docker run --name manticore -p 9306:9306 -d manticoresearch/manticoredocker exec -it manticore /bin/sh
- 为了简化操作,我们将在容器内安装Midnight Commander文件管理器:
apt update
apt install mc
mc
因此,我们更新了 "apt" 包管理器,然后安装了 "mc" 文件管理器并启动了它。
现在,您的终端应该看起来像这样:
第一步。第一个表。
好的,让我们连接到数据库并创建第一个表。
mysql -h0 -P9306
这里 -h 标志用于主机连接,设置为 0 因为我们正在尝试连接到本地主机。使用 -P 标志(注意大写的 P)用于端口连接;我们使用内部端口号。
让我们创建一个包含 "info" 字段作为文本和 "value" 字段作为整数的表。此外,让我们通过添加一个英文单词的词干提取器来增强这个表。
CREATE TABLE demo (info TEXT, value INT) morphology = 'stem_en';
Query OK, 0 rows affected (0.00 sec)
要查看在创建或修改表列时创建了哪些字段,请使用 desc 命令(它类似于“描述”)。
DESC demo
+-------+-----------+------------------+
| Field | Type | Properties |
+-------+-----------+------------------+
| id | bigint | |
| info | text | indexed stored |
| value | uint | |
+-------+-----------+------------------+
3 rows in set (0.00 sec)
另外,您可以检查与表关联的词干提取或词形还原算法:
SHOW TABLE demo SETTINGS;
+---------------+-----------------------+
| Variable_name | Value |
+---------------+-----------------------+
| settings | morphology = stem_en |
+---------------+-----------------------+
1 row in set (0.01 sec)
让我们将数据添加到表中。以下是一个一次添加一条记录的选项:
INSERT INTO demo (info, value) VALUES ('Walking down the street', 1);
Query OK, 1 row affected (0.01 sec)
以及如何批量添加记录的方法:
INSERT INTO demo (info, value) VALUES ('Walking along the embankment', 2), ('Walking the dog', 3), ('Reading a book', 4), ('Book read ', 5);
Query OK, 3 rows affected (0.00 sec)
现在让我们检查表中写入了什么内容:
SELECT * FROM demo;
+-----------------------+----------------------------------------------------+-------+
| id | info | value |
+-----------------------+----------------------------------------------------+-------+
| 8217204862853578790 | Walking down the street | 1 |
| 8217204862853578791 | Walking along the embankment | 2 |
| 8217204862853578792 | Walking the dog | 3 |
| 8217204862853578793 | Reading a book | 4 |
| 8217204862853578794 | Book read | 5 |
+-----------------------+----------------------------------------------------+-------+
5 rows in set (0.01 sec)
让我们搜索与添加的词意义相近的词:
SELECT * FROM demo WHERE match('read');
+---------------------+-----------------------------------+-------+
| id | info | value |
+---------------------+-----------------------------------+-------+
| 8217204862853578794 | Book read | 5 |
| 8217204862853578793 | Reading a book | 4 |
+---------------------+-----------------------------------+-------+
2 rows in set (0.01 sec)
您还可以查看找到记录的关键词、数量、文档等信息:
SHOW META;
+----------------+----------+
| Variable_name | Value |
+----------------+----------+
| total | 2 |
| total_found | 2 |
| total_relation | eq |
| time | 0.000 |
| keyword[0] | read |
| docs[0] | 2 |
| hits[0] | 2 |
+----------------+----------+
7 rows in set (0.01 sec)
要处理不参与全文搜索的属性字段,您可以使用经典的 SQL 过滤语句:
SELECT * FROM demo WHERE value > 3;
+---------------------+-----------------------------------+-------+
| id | info | value |
+---------------------+-----------------------------------+-------+
| 8217204862853578794 | Book read | 5 |
| 8217204862853578793 | Reading a book | 4 |
+---------------------+-----------------------------------+-------+
2 rows in set (0.01 sec)
删除记录的方式与查询语句相同:
DELETE FROM demo WHERE value = 5;
Query OK, 1 row affected (0.01 sec)
DELETE FROM demo WHERE match ('street');
Query OK, 1 row affected (0.01 sec)
DELETE FROM demo WHERE id = 8217204862853578791;
Query OK, 1 row affected (0.00 sec)
SELECT * FROM demo;
+---------------------+---------------------------------+-------+
| id | info | value |
+---------------------+---------------------------------+-------+
| 8217204862853578792 | Walking the dog | 3 |
| 8217204862853578793 | Reading a book | 4 |
+---------------------+---------------------------------+-------+
2 rows in set (0.00 sec)
为什么不尝试添加并搜索一些记录呢?完成之后,我们可以继续下一步。
别忘了断开连接:
exit;
今天就到这里,下次我们将看到 如何在现有表中更改词形文件 以及如何更新我们的记录。

