停用词
停用词支持
Redis Stack 有一个默认的停用词列表。这些词通常非常常见,以至于它们不会为搜索增加太多信息,但会在索引中占用大量空间和CPU时间。
在索引时,停用词会被丢弃且不会被索引。在搜索时,它们也会被忽略,并被视为未发送到查询处理器。这是在解析查询时完成的。
目前,默认的停用词列表适用于所有语言的所有全文索引,并且可以在创建索引时手动覆盖。
默认停用词列表
默认情况下,以下单词被视为停用词:
a, is, the, an, and, are, as, at, be, but, by, for,
if, in, into, it, no, not, of, on, or, such, that, their,
then, there, these, they, this, to, was, will, with
覆盖默认的停用词列表
在创建索引时,可以使用STOPWORDS
参数来定义(或完全禁用)索引的停用词,该参数与[FT.CREATE
命令一起使用。
格式为 STOPWORDS {number} {stopword} ...
,其中 number 是给定的停用词数量。STOPWORDS
参数必须在 SCHEMA
参数之前。例如:
FT.CREATE myIndex STOPWORDS 3 foo bar baz SCHEMA title TEXT body TEXT
禁用停用词的使用
完全禁用停用词可以通过将STOPWORDS 0
传递给FT.CREATE
来实现。
避免在搜索查询中检测停用词
在极少数使用情况下,如果查询非常长,并且客户端应用程序保证不包含停用词,那么在解析查询时可以避免检查它们。这节省了一些CPU时间,并且只有在查询中包含数十个或更多术语时才值得这样做。如果不验证查询是否包含停用词就使用此方法,可能会导致空查询。