ManticoreSearch 文档更新操作详解

ManticoreSearch 文档更新操作详解

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

概述

ManticoreSearch 提供了强大的文档更新功能,允许用户在不重新索引整个文档的情况下修改特定属性。本文将详细介绍如何使用 UPDATE 命令来修改文档属性,包括基本用法、多属性更新、JSON 数据操作等核心功能。

UPDATE 命令基础

UPDATE 命令用于修改指定表中现有文档的属性值,但需要注意以下几点限制:

  1. 只能更新存储在行式存储(row-wise)中的属性
  2. 无法更新全文检索字段内容
  3. 不能修改文档ID
  4. 更新操作会禁用该属性的二级索引

基本语法

UPDATE 表名 SET 属性名=新值 WHERE 条件;

简单示例

UPDATE products SET enabled=0 WHERE id=10;

这条语句将 products 表中 id 为 10 的文档的 enabled 属性设置为 0。

多属性更新

ManticoreSearch 支持在单个 UPDATE 语句中同时更新多个属性,这比单独更新每个属性更高效。

示例

UPDATE products
SET price=100000000000,
    coeff=3465.23,
    tags1=(3,6,4),
    tags2=()
WHERE MATCH('phone') AND enabled=1;

这个例子会同时更新匹配条件的所有文档的四个属性:price、coeff、tags1 和 tags2。

数值处理注意事项

当给32位属性赋值超出范围的值时,ManticoreSearch 会自动截取低32位:

  • 例如赋值 4294967297 (0x100000001) 给32位无符号整数属性
  • 实际存储的值将是 1 (0x00000001)

JSON 数据操作

ManticoreSearch 提供了对 JSON 类型属性的灵活操作支持。

部分更新 JSON

可以对 JSON 中的数值类型或数值数组进行部分更新:

-- 插入包含JSON数组的文档
INSERT INTO products (id, title, meta) 
VALUES (1,'title','{"tags":[1,2,3]}');

-- 更新JSON数组中的特定元素
UPDATE products SET meta.tags[0]=100 WHERE id=1;

完整更新 JSON

如果需要更新非数值类型或改变属性类型,必须进行完整 JSON 更新:

-- 插入初始文档
INSERT INTO products VALUES (1,'title','{"tags":[1,2,3]}');

-- 完整更新JSON内容
UPDATE products SET data='{"tags":["one","two","three"]}' WHERE id=1;

编程语言接口示例

ManticoreSearch 支持多种编程语言接口进行文档更新操作:

PHP 示例

// 更新单个属性
$index->updateDocument(['enabled'=>0], 10);

// 更新多个属性
$query = new BoolQuery();
$query->must(new Match('phone','*'));
$query->must(new Equals('enabled',1));
$index->updateDocuments([
    'price' => 100000000000,
    'coeff' => 3465.23,
    'tags1' => [3,6,4],
    'tags2' => []
], $query);

Python 示例

# 更新文档
indexApi.update({
    "table": "products", 
    "id": 1, 
    "doc": {
        "price": 100000000000,
        "coeff": 3465.23,
        "tags1": [3,6,4],
        "tags2": []
    }
})

Java 示例

// 创建更新请求
UpdateDocumentRequest updateRequest = new UpdateDocumentRequest();
Map<String, Object> doc = new HashMap<>();
doc.put("price", 10);
doc.put("coeff", 3465.23);
doc.put("tags1", new int[]{3,6,4});
doc.put("tags2", new int[]{});
updateRequest.index("products").id(1L).setDoc(doc);

// 执行更新
indexApi.update(updateRequest);

最佳实践

  1. 批量更新:尽可能批量更新多个属性,减少操作次数
  2. 条件精确:确保 WHERE 条件足够精确,避免意外更新不需要修改的文档
  3. 索引影响:注意更新操作会禁用属性的二级索引,必要时考虑使用 REPLACE
  4. 数据类型:确保更新值的数据类型与属性定义匹配
  5. 性能监控:对大表进行大量更新时,监控系统性能

通过合理使用 UPDATE 命令,可以高效地维护 ManticoreSearch 中的数据,确保搜索结果的准确性和实时性。

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

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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

樊声嘉Jack

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

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

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

打赏作者

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

抵扣说明:

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

余额充值