全文搜索

执行全文搜索

全文搜索用于在较长的文本中查找单词或短语。您可以在特定的文本字段内搜索,也可以跨所有文本字段进行搜索。

本文提供了最相关的全文搜索功能的良好概述。有关所有全文搜索功能的更多详细信息,请参见参考文档

本文中的示例使用具有以下字段的模式

字段名称 字段类型
brand TEXT
model TEXT
description TEXT

单个单词

要在所有文本字段中搜索单词(或词干),您可以构建以下简单查询

FT.SEARCH index "word"

您可能希望将搜索限制到特定的文本字段,而不是在所有文本字段中搜索。

FT.SEARCH index "@field: word"

自然语言中非常常见的单词,例如英语中的 thea,不会被索引,也不会返回搜索结果。您可以在停用词文章中找到更多详细信息。

以下示例搜索描述中包含单词 'kids' 的所有自行车

短语

短语是一个句子、句子片段或一小组单词。您可以在精确匹配文章中找到有关如何查找精确短语的更多详细信息。

单词前缀

您还可以搜索匹配给定前缀的单词。

FT.SEARCH index "prefix*"
FT.SEARCH index "@field: prefix*"
重要提示
前缀至少需要包含两个字符。

以下示例展示了如何搜索以 'ka' 开头的品牌的自行车

单词后缀

与前缀类似,也可以搜索共享相同后缀的单词。

FT.SEARCH index "*suffix"

您还可以在查询表达式中结合使用基于前缀和后缀的搜索。

FT.SEARCH index "*infix*"

以下示例查找所有以 'bikes' 结尾的品牌

模糊搜索允许您查找包含与您的搜索词大致匹配的单词的文档。要执行模糊搜索,您需要用一对 % 字符包围搜索词。一对代表(Levenshtein)距离一,两对代表距离二,三对(最大距离)代表距离三。

这是在所有文本字段中搜索距离为一的命令

FT.SEARCH index "%word%"

以下示例查找所有包含与拼写错误的单词 'optamized' 距离为一的单词的文档。您可以看到这匹配了单词 'optimized'。

如果您想将最大单词距离增加到二,可以使用以下查询

Unicode 考量

Redis 查询引擎仅支持基本多语言平面中的 Unicode 字符;U+0000 到 U+FFFF。不支持 U+FFFF 之外的 Unicode 字符(例如 Emoji),包含此类字符的查询在以下用例中将无法检索到结果

  • 使用前缀/后缀/中缀查询 TEXT 字段
  • 使用模糊搜索查询 TEXT 字段

示例

redis> FT.CREATE idx SCHEMA tag TAG text TEXT
OK
redis> HSET doc:1 tag '😀😁🙂' text '😀😁🙂'
(integer) 2
redis> HSET doc:2 tag '😀😁🙂abc' text '😀😁🙂abc'
(integer) 2
redis> FT.SEARCH idx '@text:(*😀😁🙂)' NOCONTENT
1) (integer) 0
redis> FT.SEARCH idx '@text:(*😀😁🙂*)' NOCONTENT
1) (integer) 0
redis> FT.SEARCH idx '@text:(😀😁🙂*)' NOCONTENT
1) (integer) 0

redis> FT.SEARCH idx '@text:(%😀😁🙃%)' NOCONTENT
1) (integer) 0
评价此页面
回到顶部 ↑