1 基本检索规则
功能 | 语法示例 | 说明 | |||
---|---|---|---|---|---|
词交集 (AND) | foo bar baz |
多词即隐式 AND | |||
短语 | "hello world" |
精确顺序匹配 | |||
并集 (OR) | `hello | hallo | hola` | ` | ` 表示 OR(在 DIALECT 2+ 优先级更高) |
否定 | hello -world |
仅排除 world (DIALECT 1 为整体否;DIALECT 2+ 只否定紧邻词) |
|||
通配符 | hel* , *sun* |
前/后/中缀匹配;受最小长度和最大展开数限制 | |||
通配符模式 | "w'foo*bar?'" |
DIALECT 2+ "w''" 语法,支持 ? 单字符、* 多字符 |
|||
模糊匹配 | %hello% , %%hello%% |
Levenshtein 距离 1 或 2(最多 3) | |||
可选词 | foo ~bar |
含 bar 文档得分更高 |
|||
括号分组 | `(foo | bar) baz` | 消歧义、组合逻辑 |
2 字段过滤与多字段
text
@title:"hello world" // 只在 title 中找完整短语
@name:(James Brown) // DIALECT 2+:等价 @name:James @name:Brown
@country:korea @engine:(hybrid|diesel) @class:suv
@field:expr
仅筛选指定字段- 多字段并集:
@title|body:(hello world)
- 重复字段过滤可做交集
3 数值 / 地理 / 标签过滤
text
@price:[100 200] // 数值范围 100~200(含端点)
@age:[(18 +inf] // >18
@location:[-122.41 37.77 5 km] // 半径 5 km
@cities:{New York | LA} // Tag 字段 union
@cities:{NY} @cities:{LA} // Tag 字段交集
(N
表示排除端点;-inf / +inf
表示无穷- Tag 值需
{}
,多值|
并集;重复 tag 子句做交集 - GEO 支持半径;DIALECT 3 新增 GEOSHAPE 多边形包含/相交检索
4 向量检索 (v2.4+)
text
*=>[KNN 10 @vec $q] // Top-10 最近邻
@year:[2020 2022]=>[KNN 10 @vec $q] // 混合过滤
@vec:[VECTOR_RANGE 0.4 $q] // 距离≤0.4
- KNN 每次查询最多 1 条;VECTOR_RANGE 可多次
- 可用
$yield_distance_as
指定距离字段以便排序返回
5 查询属性 (子句调权等)
text
(foo bar) => { $weight: 2.0; $slop: 1; $inorder: true; }
$weight
调节相关度$slop
允许词间距,$inorder
控制词序- Vector 查询可额外带自定义参数与距离字段名
6 SQL 谓词对照
SQL | RediSearch |
---|---|
x='foo' AND y!='bar' |
@x:foo -@y:bar |
num BETWEEN 10 AND 20 |
@num:[10 20] |
name LIKE 'john%' |
@name:john* |
更多...见官方对照表 |
性能提示
- 前/中/后缀与 wildcard 会展开大量词条;生产环境应设好
MINPREFIX
、MAXEXPANSIONS
或使用 WITHSUFFIXTRIE。 - 纯负查询
-term
可能触发全量扫描。 - 合理为数值、标签、Geo、向量字段建索引& HNSW 参数,以免查询退化。