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 字段过滤与多字段
@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 数值 / 地理 / 标签过滤
@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+)
*=>[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 查询属性 (子句调权等)
(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 参数,以免查询退化。