配置参数
在Redis Stack中进行查询和搜索可以通过多个配置参数进行调整。其中一些参数只能在加载时设置,而其他参数可以在加载时或运行时设置。
在模块加载时设置配置参数
在加载时设置配置参数是通过在从命令行启动服务器时在--loadmodule
参数后附加参数,或在Redis配置文件中loadmodule
指令后附加参数来完成的。例如:
在redis.conf中:
loadmodule ./redisearch.so [OPT VAL]...
从Redis CLI中,使用MODULE LOAD命令:
127.0.0.6379> MODULE LOAD redisearch.so [OPT VAL]...
从命令行:
$ redis-server --loadmodule ./redisearch.so [OPT VAL]...
在运行时设置配置参数(适用于支持的参数)
RediSearch 提供了 FT.CONFIG
端点,允许在运行时设置和检索配置参数。
要在运行时设置配置参数的值(对于支持的参数),只需运行:
FT.CONFIG SET OPT1 VAL1
同样地,您可以使用以下方式检索当前配置参数值:
FT.CONFIG GET OPT1
FT.CONFIG GET *
使用FT.CONFIG SET
设置的值在服务器重启后不会保留。
RediSearch 配置参数
下表总结了哪些配置参数可以在模块加载时和运行时设置:
配置参数 | 加载时间 | 运行时间 |
---|---|---|
TIMEOUT | ✅ | ✅ |
ON_TIMEOUT | ✅ | ✅ |
SAFEMODE 在 v1.6 中已弃用 | ✅ | ✅ |
CONCURRENT_WRITE_MODE | ✅ | ✅ |
EXTLOAD | ✅ | ✅ |
MINPREFIX | ✅ | ✅ |
MINSTEMLEN | ✅ | ✅ |
MAXPREFIXEXPANSIONS | ✅ | ✅ |
MAXDOCTABLESIZE | ✅ | ✅ |
MAXSEARCHRESULTS | ✅ | ✅ |
MAXAGGREGATERESULTS | ✅ | ✅ |
FRISOINI | ✅ | ✅ |
CURSOR_MAX_IDLE | ✅ | ✅ |
PARTIAL_INDEXED_DOCS | ✅ | ✅ |
GC_SCANSIZE | ✅ | ⬜ |
GC_POLICY | ✅ | ✅ |
NOGC | ✅ | ✅ |
FORK_GC_RUN_INTERVAL | ✅ | ✅ |
FORK_GC_RETRY_INTERVAL | ✅ | ✅ |
FORK_GC_CLEAN_THRESHOLD | ✅ | ✅ |
UPGRADE_INDEX | ✅ | ✅ |
OSS_GLOBAL_PASSWORD | ✅ | ⬜ |
DEFAULT_DIALECT | ✅ | ✅ |
VSS_MAX_RESIZE | ✅ | ✅ |
INDEX_CURSOR_LIMIT | ✅ | ✅ |
超时
搜索查询允许运行的最大时间(以毫秒为单位)。如果超过此时间,Redis将返回迄今为止累积的顶部结果,或者根据ON_TIMEOUT
设置的策略返回错误。通过将其设置为0可以禁用超时。
TIMEOUT
仅指查询时间。- 解析查询不计入
TIMEOUT
。 - 如果在搜索过程中未达到
TIMEOUT
,则继续执行诸如加载文档内容或reducers之类的最终操作。
默认
500
Example
$ redis-server --loadmodule ./redisearch.so TIMEOUT 100
超时
对于超过TIMEOUT
设置的查询,响应策略可以是以下之一:
- RETURN: 此策略将返回查询累积的顶部结果,直到超时。
- FAIL: 当查询超过超时值时将返回错误。
默认
返回
Example
$ redis-server --loadmodule ./redisearch.so ON_TIMEOUT fail
安全模式
如果参数列表中存在,RediSearch 将关闭并发查询处理并在单线程中工作。
如果数据一致性极为重要,这非常有用,并且可以避免在查询文档时删除文档可能导致瞬间不一致结果的情况。例如,在查询调用期间有效的文档由于在查询处理期间被删除而未被返回。
默认
关闭(不存在)
Example
$ redis-server --loadmodule ./redisearch.so SAFEMODE
并发写入模式
如果启用,写查询将并发执行,但只有分词部分会并发执行。实际的写操作仍然需要持有Redis全局锁。
默认
未设置 - "禁用"
Example
$ redis-server --loadmodule ./redisearch.so CONCURRENT_WRITE_MODE
- 在v1.6版本中添加
EXTLOAD
如果存在,RediSearch 将尝试从其指定的文件路径加载扩展动态库。详情请参阅 Extensions。
默认
无
Example
$ redis-server --loadmodule ./redisearch.so EXTLOAD ./ext/my_extension.so
MINPREFIX
前缀查询允许的最小字符数(例如,hel*
)。将其设置为1可能会影响性能。
默认
2
Example
$ redis-server --loadmodule ./redisearch.so MINPREFIX 3
最小词干长度
词干提取的最小词长。默认值为4
。将其设置为低于4
可能会降低性能。
默认
4
Example
$ redis-server --loadmodule ./redisearch.so MINSTEMLEN 3
MAXPREFIXEXPANSIONS
查询前缀允许的最大扩展数。设置过高可能会导致性能问题。如果达到MAXPREFIXEXPANSIONS,查询将继续使用最初获取的结果。该配置适用于所有词缀查询,包括前缀、后缀和中缀(包含)查询。
默认
200
Example
$ redis-server --loadmodule ./redisearch.so MAXPREFIXEXPANSIONS 1000
MAXDOCTABLESIZE
用于存储文档的内部哈希表的最大大小。 注意:此配置选项不限制可以存储的文档数量。它仅影响哈希表内部数组的最大大小。 在索引持有少量不断更新的文档的情况下,减少此属性可以减少内存开销。
默认
1000000
Example
$ redis-server --loadmodule ./redisearch.so MAXDOCTABLESIZE 3000000
最大搜索结果
如果使用了LIMIT,FT.SEARCH
命令返回的最大结果数。
将值设置为-1
将移除限制。
默认
1000000
Example
$ redis-server --loadmodule ./redisearch.so MAXSEARCHRESULTS 3000000
最大聚合结果
如果使用了LIMIT,FT.AGGREGATE
命令返回的最大结果数。
将值设置为-1
将移除限制。
默认
无限制
Example
$ redis-server --loadmodule ./redisearch.so MAXAGGREGATERESULTS 3000000
FRISOINI
如果存在,从指定路径加载自定义中文词典。详情请参阅使用自定义词典。
默认
未设置
Example
$ redis-server --loadmodule ./redisearch.so FRISOINI /opt/dict/friso.ini
游标最大空闲时间
可以设置给cursor api的最大空闲时间(以毫秒为单位)。
默认
300000
Example
$ redis-server --loadmodule ./redisearch.so CURSOR_MAX_IDLE 500000
- 在v1.6版本中添加
部分索引文档
启用/禁用Redis命令过滤器。该过滤器优化了哈希的部分更新,如果更改的字段不是模式的一部分,可能会避免重新索引哈希。
注意事项
Redis命令过滤器将在每个Redis命令执行时被调用。尽管过滤器已经过优化,但这仍会在所有命令上引入轻微的延迟增加。
此配置最适合用于部分索引的文档,其中非索引字段经常更新。
默认
0
Example
$ redis-server --loadmodule ./redisearch.so PARTIAL_INDEXED_DOCS 1
- 在v2.0.0版本中添加
GC_SCANSIZE
用于清理索引的内部GC的批量大小。
默认
100
Example
$ redis-server --loadmodule ./redisearch.so GC_SCANSIZE 10
GC_POLICY
垃圾回收策略。支持的策略有:
- FORK: 使用一个分叉线程进行垃圾回收(v1.4.1及以上版本)。 这是自1.6.1版本以来的默认GC策略,非常适合通用工作负载。
- LEGACY: 使用同步的进程内分叉。这对于以读取为主和追加为主的工作负载非常理想,且更新/删除操作非常少。 在v2.6.0中已弃用。
默认
FORK
Example
$ redis-server --loadmodule ./redisearch.so GC_POLICY FORK
- 当
GC_POLICY
为FORK
时,可以与以下选项结合使用。
NOGC
如果设置,所有索引的垃圾回收将被禁用。这主要用于调试和测试,用户不应设置此选项。
默认
未设置
Example
$ redis-server --loadmodule ./redisearch.so NOGC
FORK_GC_RUN_INTERVAL
两次连续fork GC
运行之间的间隔(以秒为单位)。
默认
30
Example
$ redis-server --loadmodule ./redisearch.so GC_POLICY FORK FORK_GC_RUN_INTERVAL 60
- 只能与
GC_POLICY FORK
结合使用
FORK_GC_RETRY_INTERVAL
RediSearch 在失败时重试运行 fork GC
的时间间隔(以秒为单位)。通常,当 Redis fork API 不允许同时创建多个 fork 时,可能会发生失败。
默认
5
Example
$ redis-server --loadmodule ./redisearch.so GC_POLICY FORK FORK_GC_RETRY_INTERVAL 10
- 只能与
GC_POLICY FORK
结合使用 - 在v1.4.16版本中添加
FORK_GC_CLEAN_THRESHOLD
当未清理的文档数量超过此阈值时,fork GC
才会开始清理,否则将跳过此次运行。虽然默认值为100,但强烈建议将其更改为更高的数值。
默认
100
Example
$ redis-server --loadmodule ./redisearch.so GC_POLICY FORK FORK_GC_CLEAN_THRESHOLD 10000
- 只能与
GC_POLICY FORK
结合使用 - 在v1.4.16版本中添加
升级索引
此配置是一个特殊的配置选项,用于从v1.x版本的RediSearch升级索引,也称为旧版索引。需要为每个旧版索引提供此配置选项,后跟索引名称和索引描述的所有有效选项(也称为ft.create api中描述的ON
参数的后续哈希)。
默认
索引名称没有默认值,其他参数的默认值与FT.CREATE
API相同。
Example
$ redis-server --loadmodule ./redisearch.so UPGRADE_INDEX idx PREFIX 1 tt LANGUAGE french LANGUAGE_FIELD MyLang SCORE 0.5 SCORE_FIELD MyScore PAYLOAD_FIELD MyPayload UPGRADE_INDEX idx1
- 如果RDB文件中不包含配置中指定的旧索引,将会在日志文件中添加一条警告信息,并继续加载。
- 如果RDB文件包含配置中未指定的旧索引,加载将失败,服务器将无法启动。
OSS全局密码
用于连接到其他分片的全局Redis社区版集群密码。
默认
未设置
Example
$ redis-server --loadmodule ./redisearch.so OSS_GLOBAL_PASSWORD password
- 仅在使用Coordinator时相关
- 在v2.0.3版本中添加
DEFAULT_DIALECT
默认的
DIALECT
将被FT.CREATE
, FT.AGGREGATE
, FT.EXPLAIN
, FT.EXPLAINCLI
, 和 FT.SPELLCHECK
使用。
更多信息请参见查询方言。
默认
1
Example
$ redis-server --loadmodule ./redisearch.so DEFAULT_DIALECT 2
VSS_MAX_RESIZE
向量相似度索引的最大内存调整大小(以字节为单位)。如果您需要允许较大的BLOCK_SIZE
,此值将覆盖默认的内存限制。
默认
0
Example
$ redis-server --loadmodule ./redisearch.so VSS_MAX_RESIZE 52428800 # 50MB
- 在v2.4.8版本中添加
INDEX_CURSOR_LIMIT
在任何给定时间,每个分片可以打开的最大游标数。用户可以通过FT.AGGREGATE WITHCURSOR
打开游标。Redis查询引擎也会为长时间运行的查询内部打开游标。一旦达到INDEX_CURSOR_LIMIT
,任何进一步尝试打开游标的操作都将导致错误。
-
在修改此参数时应谨慎。每个打开的游标都会导致额外的内存使用。
-
在使用
INDEX_CURSOR_LIMIT
之前,应首先通过使用FT.CURSOR DEL
和/或MAXIDLE
来规范游标的使用。 -
详情请参阅Cursor API。
-
在2.10.8版本中添加
默认
128
Example
$ redis-server --loadmodule ./redisearch.so INDEX_CURSOR_LIMIT 180