Manticore Search 中向渗透表添加规则的完整指南

Manticore Search 中向渗透表添加规则的完整指南

manticoresearch manticoresoftware/manticoresearch: 这是一个用于快速搜索和索引数据的搜索引擎。适合用于需要快速搜索和索引数据的场景。特点:易于使用,支持多种数据格式,具有高性能和可扩展性。 manticoresearch 项目地址: https://gitcode.com/gh_mirrors/ma/manticoresearch

什么是渗透表

渗透表(Percolate Table)是 Manticore Search 中的一种特殊表类型,它允许你将查询规则预先存储在表中,然后通过"渗透"操作来检查哪些规则与传入的文档匹配。这种反向搜索模式非常适合实现诸如警报系统、内容推荐等场景。

渗透表规则的基本结构

在渗透表中,每条规则必须遵循特定的字段结构:

| 字段名 | 类型 | 描述 | |-------|------|------| | id | bigint | 规则标识符(可省略,系统会自动分配) | | query | string | 全文查询表达式(可为空) | | filters | string | 非全文字段的附加过滤条件(可为空) | | tags | string | 一个或多个逗号分隔的标签,用于选择性管理规则 |

重要提示:不支持其他字段名称,使用非标准字段会引发错误。

添加规则的SQL方法

基本插入操作

-- 插入带有ID、查询和过滤条件的规则
INSERT INTO pq(id, query, filters) VALUES (1, '@title shoes', 'price > 5');

-- 插入带有ID、查询和标签的规则
INSERT INTO pq(id, query, tags) VALUES (2, '@title bag', 'Louis Vuitton');

-- 查看表中的所有规则
SELECT * FROM pq;

执行结果示例:

+------+--------------+---------------+---------+
| id   | query        | tags          | filters |
+------+--------------+---------------+---------+
|    1 | @title shoes |               | price>5 |
|    2 | @title bag   | Louis Vuitton |         |
+------+--------------+---------------+---------+

自动ID分配

如果省略ID字段,系统会自动分配一个ID:

-- 不指定ID的插入
INSERT INTO pq(query, filters) VALUES ('wristband', 'price > 5');

-- 查看结果
SELECT * FROM pq;

执行结果示例:

+---------------------+-----------+------+---------+
| id                  | query     | tags | filters |
+---------------------+-----------+------+---------+
| 1657843905795719192 | wristband |      | price>5 |
+---------------------+-----------+------+---------+

简化插入语法

在SQL中,可以省略字段名,但必须按特定顺序提供值:

-- 顺序为:ID, 查询, 标签, 过滤器
-- 使用0作为ID触发自动ID生成
INSERT INTO pq VALUES (0, '@title shoes', '', '');
INSERT INTO pq VALUES (0, '@title shoes', 'Louis Vuitton', '');

添加规则的JSON方法

Manticore Search 提供了两种JSON格式来添加渗透规则:

1. 原生JSON查询格式

这种格式与搜索API兼容:

PUT /pq/pq_table/doc/1
{
  "query": {
    "match": {
      "title": "shoes"
    },
    "range": {
      "price": {
        "gt": 5
      }
    }
  },
  "tags": ["Louis Vuitton"]
}

2. SQL风格查询格式

这种格式更接近SQL语法:

PUT /pq/pq_table/doc/2
{
  "query": {
    "ql": "@title shoes"
  },
  "filters": "price > 5",
  "tags": ["Louis Vuitton"]
}

重要区别:通过SQL接口插入JSON格式的规则时,JSON操作符会被视为普通文本,不会作为查询条件解析。如果需要使用JSON语法,必须通过HTTP JSON接口添加。

编程语言示例

PHP示例

$newstoredquery = [
    'table' => 'test_pq',
    'body' => [
        'query' => [
            'match' => ['title' => 'shoes'],
            'range' => ['price' => ['gt' => 5]]
        ],
        'tags' => ['Louis Vuitton']
    ]
];
$client->pq()->doc($newstoredquery);

Python示例

newstoredquery = {
    "table": "test_pq",
    "id": 2,
    "doc": {
        "query": {"ql": "@title shoes"},
        "filters": "price > 5",
        "tags": ["Louis Vuitton"]
    }
}
indexApi.insert(newstoredquery)

Java示例

Map<String, Object> query = new HashMap<>();
query.put("ql", "@title shoes");
query.put("filters", "price>5");
query.put("tags", new String[] {"Louis Vuitton"});

Map<String, Object> newstoredquery = new HashMap<>();
newstoredquery.put("query", query);

InsertDocumentRequest newdoc = new InsertDocumentRequest("test_pq", 2L, newstoredquery);
indexApi.insert(newdoc);

更新现有规则

SQL方式

使用REPLACE命令更新规则:

-- 查看现有规则
SELECT * FROM pq;

-- 替换规则
REPLACE INTO pq(id,query) VALUES(2810823411335430148,'@title boots');

-- 验证更新
SELECT * FROM pq;

JSON方式

在HTTP JSON接口中使用?refresh=1参数:

PUT /pq/pq/doc/2810823411335430149?refresh=1 -d '{
  "query": {
    "match": {
      "title": "boots"
    }
  }
}'

最佳实践建议

  1. 合理使用标签:为规则添加有意义的标签,便于后续管理和批量操作
  2. ID管理:考虑是否让系统自动分配ID还是自行管理
  3. 性能考虑:复杂的查询规则会影响渗透性能,尽量保持规则简洁
  4. 测试规则:添加新规则后,使用实际文档测试渗透效果
  5. 文档化:为重要规则添加注释或通过标签系统记录其用途

通过掌握这些添加和更新渗透规则的技巧,你可以充分利用Manticore Search的渗透功能来构建强大的实时内容匹配系统。

manticoresearch manticoresoftware/manticoresearch: 这是一个用于快速搜索和索引数据的搜索引擎。适合用于需要快速搜索和索引数据的场景。特点:易于使用,支持多种数据格式,具有高性能和可扩展性。 manticoresearch 项目地址: https://gitcode.com/gh_mirrors/ma/manticoresearch

创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

资源下载链接为: https://pan.quark.cn/s/6b3e936ec683 在英语学习过程中,一款优秀的词典工具至关重要。Vocabulary.com Dictionary 和欧陆词典(EuroDict)作为两款备受推崇的在线词汇资源,各具特色且能够相互补充,为用户打造全面的词汇学习体验。 Vocabulary.com Dictionary 不仅提供单词的标准释义,还特别注重词汇的实际运用。它涵盖了丰富的例句、短语和习语,帮助用户掌握词汇在不同语境中的使用方式。此外,Vocabulary.com 设有互动学习功能,通过游戏和挑战的形式,让学习者在趣味中巩固新词汇。其“智能学习计划”能够根据用户的学习进度和能力定制个性化学习路径,是提升词汇量的有效工具。 与之配合的欧陆词典则以多语言支持和深度词汇解析闻名。它不仅提供英文词汇的解释,还涵盖多种语言对照,非常适合多语种学习者。欧陆词典还提供同义词、反义词、派生词等扩展信息,以及丰富的短语和习语,帮助用户全面理解词汇的多维度含义。 在实际使用时,学习者可以先通过 Vocabulary.com Dictionary 查找单词的基本信息和应用场景,再借助欧陆词典拓展对词汇的多语言理解,尤其是对比不同语言中词汇的对应关系。Vocabulary.com 的互动学习模式适合日常学习,而欧陆词典则更适合深度研究和词汇拓展。 压缩包中的文件可能包括“Vocabulary.com Dictionary.jpg”,这可能是词典的截图或封面,用于视觉介绍;“Vocabulary.com Dictionary.mdd”和“.mdx”文件则是欧陆词典的数据文件,用于存储索引和数据,方便离线查询。将这些文件下载到本地,即使在无网络的情况下,也能使用部分功能。 Vocabulary.com Dictionary 和欧陆词典的结合使用,能为学习者
### Manticore Search 配置方法与参数说明 Manticore Search 是一种高性能全文搜索引擎,其核心功能之一是对数据进行定义和配置。这些配置主要通过 `manticore.conf` 文件完成,该文件基于模板 `manticore.conf.in` 创建[^1]。 #### 配置文件结构概述 Manticore Search 的配置文件由多个部分组成,其中最重要的部分是 **source** 和 **index** 定义。以下是这两个关键部分的详细介绍: --- #### Source 部分 Source 定义了数据源的信息,通常用于指定数据库连接或其他外部数据源。以下是一个典型的 source 配置示例及其参数解释: ```plaintext source my_source { type = mysql # 数据源类型,支持mysql、pgsql等[^1] sql_host = localhost # 数据库主机名或IP地址 sql_user = root # 数据库用户名 sql_pass = password # 数据库密码 sql_db = testdb # 数据库名称 sql_port = 3306 # 数据库端口,默认为MySQL的3306 sql_query_pre = SET NAMES utf8 # 查询前执行的SQL语句 sql_query_post = COMMIT # 查询后执行的SQL语句 sql_query = SELECT id, title, content FROM documents # 主查询语句 } ``` - **type**: 指定数据源类型,常见的有 MySQL 或 PostgreSQL。 - **sql_* 参数**: 这些参数定义了如何连接到数据库以及获取数据的方式。 - **sql_query**: 关键字段,指定了从数据库中提取数据的具体 SQL 查询语句。 --- #### Index 部分 Index 定义了索引的数据结构和存储方式。以下是一个 index 配置示例及其参数解释: ```plaintext index my_index { source = my_source # 对应的source名称 path = /var/lib/manticore/my_index # 存储路径 docinfo = extern # 文档信息存储位置 (extern|inline) charset_table = 0..9, A..Z->a..z, _, a..z # 字符集映射规则 min_word_len = 1 # 最小单词长度 morphology = stem_en # 形态学分析器设置 stopwords = /etc/manticore/stopwords.txt # 停用词列文件 } ``` - **source**: 指向对应的 data source 名称。 - **path**: 索引文件的存储路径。 - **docinfo**: 控制文档元信息的存储方式,可以选择 `extern`(单独存储)或 `inline`(嵌入存储)。 - **charset_table**: 定义字符编码转换规则,主要用于处理特殊字符或大小写敏感问题。 - **min_word_len**: 设置最小可被索引的单词长度。 - **morphology**: 启用形态学分析工具,例如英语中的词干提取 (`stem_en`)。 - **stopwords**: 提供停用词列文件路径,防止某些常见词语影响搜索质量。 --- #### Real-Time Indexes 实时索引 除了传统的静态索引外,Manticore 支持实时索引(Real-Time Index),允许动态更新数据而无需重新构建整个索引。以下是一个 RT 索引的简单配置示例: ```plaintext rt_index rt_my_index { path = /var/lib/manticore/rt_my_index rt_field = title # 动态字段定义 rt_attr_uint = price # 属性定义,整数型 rt_attr_string = category # 属性定义,字符串型 } ``` - **rt_field**: 定义全文检索字段。 - **rt_attr_***: 定义属性字段,支持多种数据类型(如 uint、string 等)。 --- #### 测试与验证 完成配置后,可以通过命令行启动 Manticore 并验证配置是否生效: ```bash sudo systemctl start manticored curl 'http://localhost:9312/?t=test' # 测试服务状态 ``` 如果一切正常,则可以继续创建索引并加载数据[^1]。 --- #### 示例代码:Python 中使用 Manticore API 以下是如何通过 Python 调用 Manticore 的 RESTful 接口实现基本搜索操作: ```python import requests def perform_search(index_name="my_index"): url = f"http://localhost:9308/{index_name}/_search" body = {"query": {"match_all": {}}}.to_json() headers = {'Content-Type': 'application/json'} response = requests.post(url, data=body, headers=headers) result = response.json() return result['hits']['hits'] print(perform_search()) ``` 此脚本发送了一个匹配所有记录的请求,并返回结果集合。 ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

陶真蔷Scott

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值