manticoreSearch


manticoresearch:全文搜索引擎

  • Manticore Search(原名Sphinx)是一个全文搜索引擎,它提供了高速、可扩展的搜索功能。它可以建立索引,使得用户可以快速查询和检索数据。

安装

docker安装

要通过Docker安装Manticore Search

  1. 获取Manticore Search的Docker镜像
    Manticore Search的Docker镜像可以在Docker Hub上找到。您可以通过运行以下命令来检索Manticore Search的镜像:

    docker pull manticoresearch/manticore
    
  2. 启动并使用Manticore Search的Docker镜像
    您可以通过Docker命令行启动Manticore Search容器。以下是一个基本的启动命令示例:

    docker run -e EXTRA=1 --name manticore --rm -d manticoresearch/manticore
    

    这个命令会启动一个名为manticore的容器,并设置了环境变量EXTRA=1以启用额外的功能,如列式存储和辅助索引。

    docker run 是 Docker 命令行工具中的基础命令,用于启动一个新的容器。以下是对所给命令的详细解释:

    各部分参数含义:

    1. docker run: 启动一个新的 Docker 容器。

    2. -e EXTRA=1: 使用 -e--env 参数设置环境变量。在这个例子中,设置了名为 EXTRA 的环境变量,其值为 1。这个环境变量将传递到容器内部,供容器内的应用程序(如 Manticore Search)使用。具体的用途取决于 Manticore Search 如何解析和使用这个特定环境变量。

    3. --name manticore: 使用 --name 参数为即将创建的容器指定一个名称。这里命名为 manticore,这样在后续对容器进行管理操作时,可以直接通过这个名字来引用该容器,而无需使用容器ID。

    4. --rm: 添加 --rm 标志意味着当容器停止运行时(不论是正常退出还是异常终止),Docker 将自动删除该容器及其相关的文件系统。这有助于保持系统清洁,避免留下大量不再使用的容器资源。

    5. -d: 使用 -d--detach 参数使得容器在后台以守护进程模式运行。这意味着命令执行后,控制台会立即返回,容器将在后台继续运行,而非阻塞当前终端。容器的输出(如日志)可以通过其他方法(如 docker logs 命令)来查看。

    6. manticoresearch/manticore: 这是待运行容器的镜像名称。它由两部分组成:manticoresearch 是镜像仓库名(通常对应于维护者或组织),manticore 是镜像的具体标签。在这里,它指定了要基于 Manticore Search 官方提供的 Docker 镜像来创建容器。

    综上所述,该命令的作用是使用 manticoresearch/manticore 镜像启动一个新容器,容器名为 manticore,并在后台运行。容器内部设置了环境变量 EXTRA=1,并且配置为在容器停止后自动清理。此操作旨在快速部署一个 Manticore Search 实例,作为全文搜索引擎服务在后台持续提供服务。

  3. 连接到Manticore Search
    一旦容器启动,您可以通过MySQL客户端连接到Manticore Search。以下是一个连接命令的示例:

    docker exec -it manticore mysql
    

    这个命令是用于在Docker容器中执行操作的典型命令行语句,具体用于连接到运行在名为manticore的Docker容器内的MySQL数据库服务。下面是对该命令各部分的详细解释:

    1. docker:这是命令的主语,表示接下来的操作是与Docker相关的。

    2. exec:这是Docker命令的一部分,用于在正在运行的容器内执行一个新的命令或启动一个新的进程。exec命令允许你与容器内的进程交互,这意味着你可以启动一个交互式会话。

    3. -it:这是exec命令的两个选项参数。

      • -i,表示“交互式”(interactive),它允许你与容器内的进程进行交互。即使在没有附加到容器的标准输入时,这个选项也会保持STDIN开放。
      • -t,表示“分配一个伪终端”(allocate a pseudo-TTY),它为交互式会话分配一个伪终端,这样你就可以得到类似于控制台的交互体验。
    4. manticore:这是Docker容器的名称或者ID。在这个命令中,manticore指定了你想要进入并执行命令的目标容器。

    5. mysql:这是你想要在容器内执行的命令。mysql是一个客户端程序,用于连接到MySQL数据库服务器。通过这个命令,你可以执行SQL语句来管理数据库,比如查询、更新、管理用户权限等。

    综上所述,docker exec -it manticore mysql这个命令的作用是:在名为manticore的Docker容器内启动一个交互式的mysql客户端会话,允许用户通过命令行界面与MySQL数据库进行交互。这通常用于数据库管理任务,如查询数据、执行更新操作或管理数据库用户等。

    请注意,当您退出MySQL客户端时,Manticore容器将停止并删除,这意味着数据不会被保存。

    进行其他操作,例如创建表、添加数据并运行搜索

    create table movies(\
        title text, \
        year int)\
        morphology='stem_en' html_strip='1' stopwords='en';  
    

    您提供的 SQL 命令看似试图在 MySQL 中创建一个名为 movies 的表,但其中包含了一些不适用于标准 MySQL CREATE TABLE 语句的选项。尤其是 morphology='stem_en', html_strip='1', 和 stopwords='en' 这些参数,它们看起来更像是 Manticore Search 或类似全文搜索引擎中的索引配置选项,而不是 MySQL 数据库表的直接属性。

    标准的 MySQL CREATE TABLE 语句通常用于定义表的结构,包括列名、数据类型、约束等,而不涉及全文索引的详细配置。例如,一个基本的 CREATE TABLE 语句创建 movies 表可能会是这样的:

    CREATE TABLE movies (
        title TEXT,
        year INT
    );
    

    上述命令创建了一个名为 movies 的表,包含两列:

    • title: 类型为 TEXT,用于存储电影标题。
    • year: 类型为 INT,用于存储电影发行年份。

    命令中包含的 morphology='stem_en', html_strip='1', 和 stopwords='en' 这些参数,它们在标准 MySQL 中没有直接对应的语法,而是更符合全文搜索引擎的索引配置习惯。例如,在 Manticore Search 中,这些参数可能用于定义全文索引的行为:

    • morphology='stem_en': 指定使用英文词干分析器(stemming),对文本进行预处理,将单词还原为其基本形态,以提高搜索匹配度。
    • html_strip='1': 可能表示是否启用 HTML 标签剥离功能,将 HTML 文档中的内容提取出来,去除无关的标签信息,便于对纯文本内容进行索引和搜索。
    • stopwords='en': 指定使用英文停用词列表(stopwords),在索引构建过程中忽略常见的无意义词汇(如 "the", "a", "an", "and" 等),以减少索引大小并提高搜索效率。
    insert into movies(title, year) \
    values \
    	('The Seven Samurai', 1954), \
    	('Bonnie and Clyde', 1954), \
    	('Reservoir Dogs', 1992),\
        ('Airplane!', 1980), \
        ('Raging Bull', 1980), \
        ('Groundhog Day', 1993), \
        ('<a href="http://google.com/">Jurassic Park</a>', 1993), \
        ('Ferris Bueller\'s Day Off', 1986);  
    
    select highlight(), year from movies where match('the dog');  
    
    select * from movies where match('google');  
    
    select highlight(), year from movies where match('days') facet year;  
    

    下面对命令中各个非标准 MySQL 部分进行解释:

    • highlight(): 此函数通常用于返回查询命中结果中被高亮标记的关键字文本。在全文搜索引擎中,当用户搜索某个关键词时,highlight() 函数可以找出文档中与查询关键词匹配的部分,并添加高亮样式(如 <em> 标签)以便在前端展示时突出显示。在标准 MySQL 中没有直接对应的函数。

    • match('days'): match() 函数或条件通常用于全文搜索引擎中执行全文搜索。它接受一个搜索词(这里是 'days'),并在索引中查找与之匹配的文档。在标准 SQL 或 MySQL 中,这种全文搜索通常通过 MATCH AGAINST 语句(配合全文索引)来实现,而非简单的 match() 函数调用。

    • facet year: facet 关键字及其后的列名 (year) 通常用于指示全文搜索引擎生成一个统计分面。统计分面是一种常见的信息检索功能,它按照指定的字段(如 year)对搜索结果进行分类统计,提供一个可交互的过滤界面,让用户能够按类别筛选结果。在标准 MySQL 中,实现类似功能需要编写复杂的聚合查询和可能的额外应用程序逻辑。

    该命令是用来执行以下操作:

    1. movies 表(假设是 Manticore Search 的索引)执行全文搜索,查找包含关键词 'days' 的电影记录。

    2. 返回每个匹配记录的高亮版本(通过 highlight() 函数),以及其对应的 year 字段值。

    3. 同时生成一个统计分面,按照 year 字段对搜索结果进行分类统计,以便用户进一步筛选。

  4. 数据持久化
    为了在生产环境中使用Manticore Search,您需要确保数据持久化。可以通过挂载本地存储卷到容器的/var/lib/manticore/目录来实现这一点。例如:

    docker run -e EXTRA=1 --name manticore -v $(pwd)/data:/var/lib/manticore -p 127.0.0.1:9306:9306 -p 127.0.0.1:9308:9308 -d manticoresearch/manticore
    

    这将把当前目录下的data文件夹挂载到容器内的相应位置,实现数据持久化。

    该命令是在上一个命令的基础上增加了几个额外参数,用于进一步配置容器的运行环境和网络设置。以下是命令各部分的详细说明:

    1. docker run: 同前,启动一个新的 Docker 容器。

    2. -e EXTRA=1: 依然设置环境变量 EXTRA1,作用同上。

    3. --name manticore: 继续指定容器名为 manticore

    4. -v $(pwd)/data:/var/lib/manticore: 使用 -v--volume 参数创建一个数据卷挂载。这里的格式为 <host_path>:<container_path>。具体来说:

      • $(pwd)/data: 表示宿主机(即运行 docker run 命令的机器)当前工作目录下的 data 目录。$(pwd) 是 Bash 中的一个命令替换,用来获取当前工作目录的绝对路径。

      • /var/lib/manticore: 表示容器内部的目标路径,即将宿主机的 data 目录挂载到容器内部的 /var/lib/manticore。Manticore Search 通常使用此目录存储索引和其他持久化数据。通过这种方式,容器内产生的数据会保存在宿主机的指定位置,即使容器被删除或重启,这些数据也能得以保留。

    5. -p 127.0.0.1:9306:9306: 使用 -p--publish 参数映射端口。格式为 <host_port>:<container_port>。具体含义如下:

      • 127.0.0.1:9306: 指定宿主机上的监听地址(本例中为本地回环地址 127.0.0.1)和端口 9306。这意味着外部客户端(如应用服务器、数据库客户端等)可以通过宿主机的 9306 端口访问容器内的服务。

      • 9306:9306: 表示容器内部的服务端口也是 9306。端口映射使得外部请求到达宿主机的 9306 端口时,会被透明地转发到容器内的 9306 端口。

      结果是,Manticore Search 在容器内监听的 9306 端口(默认的 SQL 查询接口)被暴露给宿主机,并且仅限于本地访问。

    6. -p 127.0.0.1:9308:9308: 类似地,这是另一个端口映射,将宿主机的 127.0.0.1:9308 映射到容器内的 9308 端口。9308 通常是 Manticore Search 的 HTTP API 接口端口。同样限制为仅本地访问。

    7. -d: 保持容器在后台以守护进程模式运行。

    8. manticoresearch/manticore: 使用 Manticore Search 的官方 Docker 镜像启动容器。

    总结起来,这条命令启动了一个基于 Manticore Search 官方镜像的 Docker 容器,设置了环境变量 EXTRA=1,并将其命名为 manticore。容器内部的 /var/lib/manticore 目录挂载到宿主机当前工作目录下的 data 目录,以确保数据持久化。同时,容器内的 93069308 端口分别被映射到宿主机的相同端口(但仅限本地访问),使得外部应用可以通过这些端口与 Manticore Search 服务进行交互。整个容器在后台以守护进程模式运行。

  5. 配置文件的自定义
    如果您需要自定义Manticore Search的配置,可以将本地的配置文件挂载到容器内。例如:

    docker run -e EXTRA=1 --name manticore -v $(pwd)/manticore.conf:/etc/manticoresearch/manticore.conf -v $(pwd)/data:/var/lib/manticore -p 127.0.0.1:9306:9306 -p 127.0.0.1:9308:9308 -d manticoresearch/manticore
    

    这将挂载当前目录下的manticore.conf文件到容器内的配置文件目录。此命令与之前解析的命令相似,但在数据卷挂载部分增加了一项,用于覆盖容器内的 Manticore Search 配置文件。以下是详细的命令解析:

    1. docker run: 启动一个新的 Docker 容器。

    2. -e EXTRA=1: 设置环境变量 EXTRA1,作用不变。

    3. --name manticore: 指定容器名为 manticore

    4. -v $(pwd)/manticore.conf:/etc/manticoresearch/manticore.conf: 添加了一个新的数据卷挂载,将宿主机当前工作目录下的 manticore.conf 文件挂载到容器内的 /etc/manticoresearch/manticore.conf。这意味着:

      • $(pwd)/manticore.conf: 宿主机上的配置文件路径,即当前工作目录下的 manticore.conf 文件。用户可以在此文件中自定义 Manticore Search 的配置,如索引定义、搜索参数、服务器设置等。

      • /etc/manticoresearch/manticore.conf: 容器内部的配置文件路径。Manticore Search 在启动时会读取此路径下的配置文件。通过挂载,用户提供的本地配置文件将覆盖容器内默认的配置文件,允许对 Manticore Search 服务进行定制化配置。

    5. -v $(pwd)/data:/var/lib/manticore: 与之前解析相同,将宿主机的 data 目录挂载到容器内的 /var/lib/manticore,用于持久化存储索引数据。

    6. -p 127.0.0.1:9306:9306-p 127.0.0.1:9308:9308: 端口映射部分未变,分别将宿主机的 93069308 端口映射到容器内的相应端口,且限制为仅本地访问,以便外部应用通过这些端口与 Manticore Search 服务交互。

    7. -d: 保持容器在后台以守护进程模式运行。

    8. manticoresearch/manticore: 使用 Manticore Search 官方 Docker 镜像启动容器。

    综上所述,此命令启动一个 Manticore Search 容器,除了之前提到的数据持久化、端口映射和环境变量设置外,还特别包含了自定义配置文件的挂载。通过将宿主机上的 manticore.conf 文件映射到容器内的配置文件路径,用户可以灵活调整 Manticore Search 的各项设置,确保容器启动时使用的是用户期望的配置。容器在后台以守护进程模式运行,并对外提供 SQL 查询(9306 端口)和 HTTP API(9308 端口)服务。

  6. 创建集群
    Manticore Search支持集群功能,可以通过Docker Compose来创建和管理集群。以下是一个简单的Docker Compose配置示例,用于创建一个包含两个节点的集群:

    docker-compose.yml

    version: '2.2'
    services:
      manticore-1:
        image: manticoresearch/manticore
        environment:
          - EXTRA=1
        restart: always
      manticore-2:
        image: manticoresearch/manticore
    

    这个docker-compose文件定义了一个包含两个服务的Docker应用。docker-compose是一个用于定义和运行多容器Docker应用的工具。通过使用YAML文件,你可以配置应用的服务,然后使用一个命令创建和启动所有服务。下面是对这个docker-compose文件中每个部分的详细解释:

    1. version: '2.2'
      这一行指定了docker-compose文件的版本。在这个例子中,使用的是2.2版本。版本声明能够帮助docker-compose解析器理解文件中使用的语法和特性。

    2. services:
      这一部分定义了应用中的服务列表。在这个例子中,有两个服务被定义:manticore-1manticore-2

    3. manticore-1:manticore-2:
      这两个服务都使用了manticoreresearch/manticore这个Docker镜像,这意味着它们将运行相同的软件或应用。然而,它们被配置为具有不同的环境变量和重启策略

      • image: manticoresearch/manticore
        这一行为每个服务指定了所使用的Docker镜像。在这个例子中,两个服务都将使用manticoreresearch/manticore镜像。

      • environment:
        这一部分定义了服务运行时的环境变量。对于manticore-1服务,它有一个环境变量EXTRA=1被设置。环境变量可以在容器内部的应用程序中使用,以影响其行为或配置。

      • restart: always
        这个选项指定了服务的重启策略。对于manticore-1服务,always策略意味着如果服务退出,Docker将总是尝试重启它。这个选项对于确保服务持续运行非常有用,即使在发生错误或崩溃的情况下。

    4. 缩进:
      YAML文件对缩进非常敏感,因为它使用缩进来表示数据的层级结构。在这个文件中,每个服务的配置项都正确地缩进,以表示它们属于相应的服务。

    总结来说,这个docker-compose文件定义了一个由两个服务组成的应用,它们都基于同一个Docker镜像,但manticore-1服务有一个额外的环境变量和一个始终重启的策略。使用这个文件,你可以通过运行docker-compose up命令来创建和启动这两个服务。这使得部署和管理多容器应用变得更加简单和一致。

    您可以使用docker-compose up命令来启动集群,并使用MySQL客户端来管理集群。

通过以上步骤,您可以在Docker环境中成功安装并配置Manticore Search。这为您提供了一个灵活且易于管理的方式来运行和扩展您的全文搜索服务。

Windows安装

  1. 下载Manticore Search安装程序并运行它。按照安装说明进行操作。

    https://repo.manticoresearch.com/repository/manticoresearch_windows/release/x64/manticore-6.0.4-230314-1a3a4ea82-x64.exe

  2. 选择要安装到的目录。

  3. 选择要安装的组件。我们建议安装所有组件。

  4. Manticore带有一个在RT模式下预配置的manticore.conf文件。不需要额外的配置。

要将searchd(Manticore Search服务器)安装为Windows服务,请运行以下命令:

D:\Manticore\bin\searchd.exe --install --config D:\Manticore\etc\manticoresearch\manticore.conf --servicename Manticore

确保使用完整路径指定配置文件,否则当作为服务启动时,searchd.exe将无法找到它。

安装完成后,可以从Microsoft Management Console的Services管理器中启动该服务。

一旦启动,你可以使用MySQL命令行界面访问Manticore:

mysql -P 9306 -h 127.0.0.1

默认情况下,Manticore 在以下端口等待连接:
用于 MySQL 客户端的端口为 9306
用于 HTTP/HTTPS 连接的端口为 9308
用于其他 Manticore 节点和基于 Manticore 二进制 API 的客户端的端口为 9312

mysql安装

https://blog.csdn.net/cxyxx12/article/details/133983648

net start mysql  	// 启动mysql服务 
net stop mysql  	// 停止mysql服务
mysqladmin -u root password root	// 设置 root 用户的新密码为 root
mysql -u用户名 -p密码 -h要连接的mysql服务器的ip地址(默认127.0.0.1) -P端口号(默认3306)  // 登录mysql

linux安装

wget https://repo.manticoresearch.com/manticore-repo.noarch.deb
sudo dpkg -i manticore-repo.noarch.deb
sudo apt update
sudo apt install manticore manticore-extra

启动manticore

Usage: /etc/init.d/manticore

可以使用 service 命令启动和停止 Manticore:

sudo service manticore start
sudo service manticore stop

mysql安装

sudo apt-get upgrade
sudo apt-get update
sudo apt-get install mysql-server
service mysql start
service mysql status

配置

生产使用manticoreSearch最好把数据挂载到指定磁盘

  1. 使用主机 /devops/manticoresearch/data 文件夹来挂载数据盘
  2. 使用主机 /devops/manticoresearch/manticore.conf 配置文件来作为容器配置文件
    manticore.conf 配置文件内容如下:
searchd {
    listen = 0.0.0.1:9312
    listen = 0.0.0.0:9306:mysql
    listen = 0.0.0.0:9308:http
    log = /var/log/manticore/searchd.log
    query_log = /var/log/manticore/query.log
    pid_file = /var/run/manticore/searchd.pid
    data_dir = /var/lib/manticore
}

Fiels 和 Attributes


学习记录

练习1 将Fluentbit与Manticore集成

https://play.manticoresearch.com/fluentbit/

Manticore的数据类型可以分为两类:全文字段和属性。

  • Full-text fields
  • Attributes

此示例显示运行按author_id、forum_id过滤并按post_date排序的全文查询。

CREATE TABLE forum(title text, content text, author_id int, forum_id int, post_date timestamp);
select * from forum where author_id=123 and forum_id in (1,3,7) order by post_date desc;
insert into forum(title, content, author_id, forum_id, post_date) \
values \
	('The Seven Samurai', '1954', 1, 1, 1);
介绍

https://www.bookstack.cn/read/hulining-fluentbit_docs/installation-linux-ubuntu.md

Fluent Bit 是一个开源的多平台日志处理器工具,它旨在成为用于日志处理和分发的通用利器

Manticore允许对使用Fluentbit代理收集的数据进行索引。

要执行此操作,您必须在本地计算机上安装Fluentbit。

安装Fluentbit

windows

在 PowerShell 上使用Get-FileHash 命令行检查完整性

Get-FileHash td-agent-bit-1.4.4-win64.exe

默认情况下,Fluent Bit 被安装在 C:\Program Files\td-agent-bit\ 中,因此安装后您可以使用如下命令启动 fluent-bit。

C:\Program Files\td-agent-bit\bin\fluent-bit.exe -i dummy -o stdout

linux

如何查看Ubuntu版本

apt-get install lsb-core

lsb_release -a	// 查看系统的版本信息
Indexing data with Fluentbit

下面是一个简单的例子,说明如何使用FluentBit与Manticore进行交互。

该示例演示了dpkg.log的索引,dpkg.log是Debian包管理器的标准日志文件:

cat /var/log/dpkg.log

Fluentbit configuration file:

更改配置文件fluentbit.conf

# fluentbit.conf
[SERVICE]
    flush        1
    daemon       On
    log_level    info

[INPUT]
    name tail
    path /var/log/dpkg.log
    inotify_watcher false
    read_from_head true

[OUTPUT]
    name es
    match *
    host 127.0.0.1
    port 9308
    index testlog
cat /etc/td-agent-bit/fluentbit.conf

以守护进程模式启动FluentBit,并禁用INPUT inotify_watcher选项,以避免Docker环境可能出现的问题,这些问题存在于某些代理的版本中,可能会导致错误。

cd /opt/td-agent-bit/bin
./td-agent-bit -c /etc/td-agent-bit/fluentbit.conf

现在让我们等待几秒钟,直到Fluentbit完成工作并进行数据检查:

mysql -P9306 -h0
show tables;
describe testlog;
select * from testlog LIMIT 3\G
exit;

正如我们所看到的,FluentBit收集的数据被成功地索引并存储在Manticore测试日志表中。


练习2 将Logstash/Beats与Manticore集成

介绍

Manticore允许您对使用Logstash/Filebeat收集的数据进行索引。
要做到这一点,您必须在本地计算机上安装Logstash或/和Filebeat代理。


安装Logstash

Ubuntu安装Java

https://blog.csdn.net/weixin_40694662/article/details/130943367

Ubuntu安装Logstash

true

warning!!! 版本 版本 版本 Logstash的版本要和演示用例中的版本一致

https://blog.csdn.net/m0_62396418/article/details/136713882

curl -OL https://artifacts.elastic.co/downloads/logstash/logstash-7.10.0-linux-x86_64.tar.gz

tar -xzf logstash-7.10.0-linux-x86_64.tar.gz  -C /usr/local/

mv /usr/local/logstash-7.10.0/ /usr/local/logstash

false

https://blog.csdn.net/weixin_34148508/article/details/91902186

wget -qO - https://artifacts.elastic.co/GPG-KEY-elasticsearch | sudo apt-key add -

echo "deb https://artifacts.elastic.co/packages/5.x/apt stable main" | sudo tee -a /etc/apt/sources.list.d/elastic-5.x.list

sudo apt-get update 这里更新apt
sudo apt-get install logstash  这里安装logstash  

安装位置:/usr/share/logstash/

配置文件位置: /etc/logstash/

管道配置文件目录: /etc/logstash/conf.d

logstash异常

[root/usr/share/logstash/bin]]$ ./system-install 
Unrecognized VM option 'UseParNewGC'
Error: Could not create the Java Virtual Machine.
Error: A fatal exception has occurred. Program will exit.
Unable to install system startup script for Logstash.

https://www.cnblogs.com/mww-NOTCOPY/p/11143410.html


logstash配置文件语法

https://blog.csdn.net/JineD/article/details/114444239

input plugin 让logstash可以读取特定的事件源。

事件源可以是从stdin屏幕输入读取,可以从file指定的文件,也可以从es,filebeat,kafka,redis等读取

  • stdin 标准输入
  • file 从文件读取数据
file{
    path => ['/var/log/nginx/access.log']  #要输入的文件路径
    type => 'nginx_access_log'
    start_position => "beginning"
}
# path  可以用/var/log/*.log,/var/log/**/*.log,如果是/var/log则是/var/log/*.log
# type 通用选项. 用于激活过滤器
# start_position 选择logstash开始读取文件的位置,begining或者end。
还有一些常用的例如:discover_interval,exclude,sincedb_path,sincedb_write_interval等可以参考官网

使用Logstash索引数据
cd /usr/local/logstash

让我们看看下面的简单示例,该示例演示了dpkg.log的索引,dpkg.log是Debian包管理器的标准日志文件:

cat /var/log/dpkg.log

注意到在继续进行之前可能需要处理的警告:

  • Manticore不支持Elasticsearch的日志模板管理索引生命周期管理功能。
    由于它们在Logstash中是默认启用的,因此我们需要在配置中明确禁用它们。

此外,输出部分中的hosts选项必须对应于Manticore的侦听端口(默认情况下,它是localhost:9308)。

cat logstash.conf
# logstash.conf
input {
    file {
        path => ["/var/log/dpkg.log"]
        start_position => "beginning"
        sincedb_path => "/dev/null"
        mode => "read"
        exit_after_read => "true"
        file_completed_action => "log"
        file_completed_log_path => "/dev/null"
        codec => line {
          charset => "UTF-8"
        }
    }
}

output {
    elasticsearch {
        index => "testlog_1"
        hosts => ["http://localhost:9308"]
        ilm_enabled => false
        manage_template => false
    }
}

在我们修改了配置以防止上述问题之后,我们可以运行Logstash:

cd /usr/local/logstash/
./bin/logstash -f ./config/logstash.conf 

让我们等待几秒钟,直到Logstash完成工作,然后检查日志数据是否已正确传递到Manticore并进行索引

mysql -P9306 -h0
show tables;

让我们看看创建的testlog_1表的模式和内容:

describe testlog_1;
select * from testlog_1 LIMIT 3\G
select * from testlog_1 where match('6103');   

事实上,来自dpkg日志文件的数据以及Logstash添加的元数据已经被Manticore正确地索引。

exit;

中文乱码

https://blog.csdn.net/qiuweifan/article/details/133800961


练习3 将Vector.dev与Manticore集成

介绍

Manticore允许您对使用Vector.dev代理收集的数据进行索引。
要执行此操作,您必须在本地计算机上安装Vector.dev。

安装Vector.dev
$ curl --proto '=https' --tlsv1.2 -sSfL https://sh.vector.dev | bash -s -- -y
                                   __   __  __
                                   \ \ / / / /
                                    \ V / / /
                                     \_/  \/

                                   V E C T O R
                                    Installer


--------------------------------------------------------------------------------
Website: https://vector.dev
Docs: https://vector.dev/docs/
Community: https://vector.dev/community/
--------------------------------------------------------------------------------

>>> Downloading Vector via https://packages.timber.io/vector/0.37.1/vector-0.37.1-x86_64-unknown-linux-gnu.tar.gz
 ✓
>>> Unpacking archive to /root/.vector ... ✓
>>> Adding Vector path to /root/.zprofile ✓
>>> Adding Vector path to /root/.profile ✓
>>> Install succeeded! 🚀
>>> To start Vector:

    vector --config /root/.vector/config/vector.yaml

>>> More information at https://vector.dev/docs/
Indexing data with Vector by Datadog

以下是如何将Vector与Manticore一起使用的简单示例。该示例演示了dpkg.log的索引,dpkg.log是Debian包管理器的标准日志文件:

cat /var/log/dpkg.log

以下是toml格式的Vector配置:

cat vector.toml
[sources.test_file]
type = "file"
include = [ "/var/log/dpkg.log" ]

[transforms.modify_test_file]
type = "remap"
inputs = [ "test_file" ]
source = """
.vec_timestamp = del(.timestamp)"""

[sinks.manticore]
type = "elasticsearch"
inputs = [ "modify_test_file" ]
endpoint = ["http://127.0.0.1:9308"]
bulk.index = "testlog_vector"

请注意,我们在配置中添加了transforms部分,以重命名默认的时间戳字段,因为它是Manticore中的保留字。
我们将使用一个名为testlog的manticore table来存储从每个beat代理接收的数据。

在后台运行代理:

nohup vector --config /root/.vector/config/vector.toml 2>/dev/null &

现在,请等待几秒钟以收集和处理数据,然后检查表的架构和内容:

mysql -P9306 -h0
show tables;
describe testlog_1;
select * from testlog_vector LIMIT 3\G
exit;

正如我们所看到的,Vector收集的数据被成功地索引并存储在Manticore表中。

练习4 ANY(), ALL() and IN()

准备测试表

Manticore有许多功能来处理the multi-value(MVA) data type。可以找到有关该数据类型的更多详细信息。
让我们看看ANY()、ALL()和IN()函数如何与MVA-attributes一起使用的示例。

首先,使用MySQL客户端连接到Manticore:

mysql -P9306 -h0

创建具有多值属性的测试表:

DROP TABLE IF EXISTS t;
CREATE TABLE t(m multi);

continue...


manticore语法

Sphinx

https://www.zzbaike.com/wiki/Sphinx


https://play.manticoresearch.com/


curl工具

https://blog.csdn.net/weixin_34413802/article/details/90276246

curl是一种命令行工具,作用是发出网络请求,然后得到和提取数据,显示在"标准输出"(stdout)上面


Tokenization of Chinese texts

https://play.manticoresearch.com/icu-chinese/

CREATE TABLE my01(id bigint, @version text, path text, host text, @timestamp text, message text) charset_table='non_cjk,chinese' morphology='icu_chinese';
 
insert into t_target  select * from t_source;
 
insert into my01(id, @version, path, host, @timestamp, message) 
values(1, '1', '/', '0552424a5cb5', '2024-04-23T02:51:13.025Z', '你好');

Manticore Search的批量插入功能???

create table testrt (title TEXT, content TEXT, gid INT) 
	charset_table='non_cjk,chinese' morphology='icu_chinese';

这条SQL语句是用于在Manticore Search中创建一个名为testrt的表,并定义了表的结构和一些特定的属性。下面是对这条语句各部分的详细解释:

  1. CREATE TABLE testrt:这是SQL语句的开始,用于创建一个新的表,表名为testrt

  2. (title TEXT, content TEXT, gid INT):这部分定义了表中的三个字段:

    • title TEXT:定义了一个名为title的字段,数据类型为文本(TEXT)。
    • content TEXT:定义了一个名为content的字段,数据类型同样为文本(TEXT),通常用于存储较长的文本内容,如文章正文。
    • gid INT:定义了一个名为gid的字段,数据类型为整数(INT),可能用于存储某种标识符。
  3. charset_table='non_cjk,chinese':这个属性指定了表的字符集non_cjk,chinese是一种字符集,用于处理中文字符。在Manticore Search中,正确处理中文字符是很重要的,因为中文字符的分词和索引与拉丁字符等其他语言不同。

  4. morphology='icu_chinese':这个属性定义了形态学分析器(morphology),icu_chinese是Manticore Search支持的一种针对中文的形态学分析器,它负责处理中文文本的分词。

综上所述,这条SQL语句创建了一个包含三个字段的表,并且为中文文本的存储和处理指定了合适的字符集和形态学分析器。这样的配置使得testrt表适合存储和索引中文内容,以便进行高效的搜索和检索操作。

insert into testrt (title, content, gid) values ( 'first record', '买新的Apple电脑', 1 );

要检查我们的中文内容是否如预期那样标记化,我们可以对我们的表运行CALL KEYWORDS

mysql> call keywords('买新的Apple电脑', 'testrt');
+------+-----------+------------+
| qpos | tokenized | normalized |
+------+-----------+------------+
| 1    | 买        | 买         |
| 2    | 新的      | 新的       |
| 3    | apple     | apple      |
| 4    | 电脑      | 电脑       |
+------+-----------+------------+
select * from testrt where match ('Apple电脑'); show meta;

Manticore Elasticsearch-like requests

https://play.manticoresearch.com/elasticlike-requests/

curl的全称是CommandLine Uniform Resource Locator(命令行统一资源定位器),是一款从远程服务器获取数据或向其发送数据命令行工具

curl [options] [URL...]  
-s: 即--silent,以静默模式执行命令,不显示进度条或错误信息。
-d/--data <data>	HTTP POST方式传送数据
-X/--request <command>	指定什么命令 eg.POST
curl -s localhost:9308/cli -d "CREATE TABLE products(title TEXT, price FLOAT)"

_create

curl -s localhost:9308/products/_create/1 -d ' { "title": "Red Bag with Tassel", "price": 19.85 } ' | jq

_doc

curl -s localhost:9308/products/_doc/2 -d ' { "title": "Red Bag with Tassel", "price": 19.85 } ' | jq
curl -s localhost:9308/cli -d "SELECT * FROM products"

_bulk

curl -s localhost:9308/_bulk -H 'Content-Type: application/x-ndjson' -d '
{ "index" : { "_index" : "products" } }
{ "title" : "Yellow Bag", "price": 12 }
{ "create" : { "_index" : "products" } }
{ "title" : "Red Bag", "price": 12.5, "id": 3 }
{ "create" : { "_index" : "products", "_id": "4" } }
{ "title" : "Red Bag", "price": 12.5 }
' | jq
curl -s localhost:9308/cli -d "DROP TABLE products"

Auto schema mechanism

https://play.manticoresearch.com/autoschema/

curl [options] [URL...]  
-s/--silent	静默模式。不输出任何东西
-X/--request <command>	指定什么命令
-d/--data <data>	HTTP POST方式传送数据

insert

curl -sX POST http://localhost:9308/insert  -d '
{
	"index":"t",
 	"id": 2,
 	"doc":
 	{
   		"i" : 123,
   		"f" : 1.23,
   		"t": "text here",
   		"s": "test@mail.com",
   		"j": {"a": 123},
   		"b": 1099511627776,
   		"m": [1,2],
   		"mb": [1099511627776,1099511627777]
 }
}'

这条命令是使用curl工具向Manticore Search服务器发送一个HTTP POST请求,用于插入一条新的文档到名为t的索引中。下面是对这条命令各部分的详细解释:

  1. curl:这是一个命令行工具,用于传输数据,支持多种协议,包括HTTP、HTTPS、FTP等。

  2. -sX POST-s表示在执行操作时不显示进度和错误信息,X后面跟的POST表示使用POST方法发送请求。

  3. http://localhost:9308/insert:这是请求的URL,指定了服务器的地址(localhost表示本地服务器)和端口(9308是Manticore Search的默认端口),以及处理插入操作的路径/insert

  4. -d '...'-d选项后面跟的是要发送的数据,这里使用了单引号包裹的JSON格式字符串。

  5. JSON数据:

    • "index": "t":指定要插入数据的索引名,这里是t
    • "id": 2:为这条记录指定一个唯一的标识符,这里是2
    • "doc":包含了要插入的文档数据,具体字段如下:
      • "i": 123:一个整型字段。
      • "f": 1.23:一个浮点型字段。
      • "t": "text here":一个文本字段。
      • "s": "test@mail.com":一个字符串字段,可能用于存储电子邮件地址。
      • "j": {"a": 123}:一个JSON对象字段,包含了另一个对象。
      • "b": 1099511627776:一个长整型字段,可能用于存储大整数。
      • "m": [1, 2]:一个数组字段,包含了整数值。
      • "mb": [1099511627776, 1099511627777]:一个包含长整数值的数组字段。

这个命令将一条包含多种数据类型的记录插入到Manticore Search的索引t中。这条记录拥有一个唯一标识符2,并且包含了数值、文本、对象、数组等多种类型的字段。这些字段可以用于全文搜索、过滤、排序等操作。

check the result

curl -sX POST http://localhost:9308/cli -d 'desc t;'
curl -sX POST http://localhost:9308/cli -d 'select * from t;'

这条curl命令用于向Manticore Search服务器发送一个HTTP POST请求,目的是执行Manticore Search的命令行界面(CLI)命令。具体来说,该命令尝试描述(describe)名为t的索引的信息。

下面是对这条命令各部分的详细解释:

  1. curl:这是一个命令行工具,用于与服务器进行通信。

  2. -sX POST

    • -s:表示静默模式,不输出错误和进度信息。
    • X POST:指定使用HTTP POST方法发送数据。
  3. http://localhost:9308/cli:这是请求的URL,指定了服务器的地址和端口。localhost:9308表示Manticore Search运行在本地服务器的9308端口上,/cli是用于执行命令行命令的端点。

  4. -d 'desc t;'

    • -d:指定要发送的数据。
    • 'desc t;':实际要发送的数据,这里是一个Manticore Search的命令,用于描述索引t的结构和属性。命令以分号;结束,这是命令结束的标识。

执行这条命令后,Manticore Search服务器应该会返回关于索引t的详细信息,包括它的字段、类型、设置等。

请注意,命令的具体输出会依赖于索引t的当前状态和配置。如果你需要执行这个命令,确保Manticore Search服务正在运行,并且你的用户权限足以执行描述索引的操作。


Introduction into Manticore Search full-text operators

Manticore中最简单的全文查询是单词的枚举。用于定义全文匹配的SQL语句是match(),它只有一个参数-查询字符串。

相比之下,例如在MySQL中,语法为MATCH(list_of_columns)AGAINST(query_string)

SELECT * FROM ftsindex WHERE MATCH('title,content') AGAINST('find me fast');

隐式运算符为“AND”,默认情况下,将在所有可用的全文字段中搜索单词:

SELECT * FROM testrt WHERE MATCH('find me fast');

对于布尔搜索,可以使用OR('|'):

select * from testrt where match('find | me fast');

OR运算符的优先级高于AND,因此查询“find me fast|slow”被翻译为“find me(fast|slow)”:

select * from testrt where match('find  me fast|slow');

对于否定,运算符NOT可以用“-”或“!”指定:

select * from testrt where match('find  me !fast');

continue...

If we want to limit to search to a field, the operator '@' can be used:

select * from testrt where match('@title find me fast');
select * from testrt where match('"the brown fox"  jumps')\G

这条SQL语句用于在Manticore Search的testrt索引中执行全文搜索,具体是搜索包含短语"the brown fox" jumps的文档。下面是对这条语句各部分的详细解释:

  1. select *:这表示选择所有字段。

  2. from testrt:这指定了要从名为testrt的索引中检索数据。

  3. where match('"the brown fox" jumps'):这是搜索条件,match是Manticore Search用于执行全文搜索的函数。被搜索的短语是"the brown fox" jumps,由于短语中的"the brown fox"被双引号包围,这意味着Manticore Search会将这个短语作为一个整体进行搜索,而不是分开的单词。

  4. \G:这个字符在MySQL中用于结束语句并告诉服务器执行它。在Manticore Search中,这个字符可能有不同的含义,或者可能不是必需的。在标准的SQL中,语句通常以分号;结束。

这条语句的目的是找到testrt索引中所有包含完整短语"the brown fox" jumps的文档。在Manticore Search中,全文搜索是非常强大的,它允许你搜索词组、单个词、以及使用各种搜索运算符来精细化搜索结果。

请注意,具体的搜索行为和结果会受到索引的分词器、搜索分析器和Manticore Search的配置设置的影响。如果你正在使用Manticore Search,并且想要执行这个查询,请确保你的索引和服务器配置能够支持这种类型的搜索。


开源全文索引

查询表的行数

select count(*) from log05;

先创建表,设置中文属性,再插入数据

CREATE TABLE tdlog1(id bigint, @version text, path text, host text, @timestamp text, message text) charset_table='non_cjk,chinese' morphology='icu_chinese';

 
insert into my01(id, @version, path, host, @timestamp, message) 
values(1, '1', '/', '0552424a5cb5', '2024-04-23T02:51:13.025Z', '你好');
# logstash.conf
input {
    file {
        path => ["/home/log_index/log/logs/log.log"]
        start_position => "beginning"
        sincedb_path => "/dev/null"
        mode => "read"
        exit_after_read => "true"
        file_completed_action => "log"
        file_completed_log_path => "/dev/null"
    }

}

output {
    elasticsearch {
        index => "my01"
        hosts => ["http://localhost:9308"]
        ilm_enabled => false
        manage_template => false
    }
}
# /home/log_index/log/logs/log.log
测试
test
中文字段
111
222


https://play.manticoresearch.com/go-sdk/

searchd --status
create table testrt (
    title TEXT, 
    content TEXT, 
    gid INT) 
	charset_table='non_cjk,chinese' morphology='icu_chinese';
curl -s localhost:9308/cli -d "create table testrt (title TEXT, content TEXT, gid INT) charset_table='non_cjk,chinese' morphology='icu_chinese'"
mysql> desc testrt;
+---------+--------+----------------+
| Field   | Type   | Properties     |
+---------+--------+----------------+
| id      | bigint |                |
| title   | text   | indexed stored |
| content | text   | indexed stored |
| gid     | uint   |                |
+---------+--------+----------------+
4 rows in set (0.01 sec)

SphinxQL
posted @ 2024-04-26 23:35  guanyubo  阅读(7)  评论(0编辑  收藏  举报