是否有可能找到以特定表达式开头或结尾的文档?例如,如果我们使用以下命令进行搜索:
FT.SEARCH "our.domain.DocumentIdx" "bar*"
字符串它将返回以下文档:“foo bar",“foo bar baz",“bar baz".但我无法缩小搜索范围,只找到“bar baz”。
ztyzrc3y1#
全文搜索在Redis中并不是这样工作的。您只能在文档中搜索术语。这些术语的通配符仍然搜索该术语的出现,只是匹配通配符的那些。因此,例如,如果您正在搜索bar*,这将匹配bar,barbarian和barrister等术语。它将匹配它们在文档中出现的任何位置。在Redis中,如果你想在一个字符串中的精确位置搜索精确的值,你可以使用TAG而不是TEXT。这将适用于上面的简单示例。但是,请记住,它将解析逗号,并将它们视为TAG中的单独值。因此,例如,如果您有字符串bar baz qux并在bar*上搜索,它将正常工作,而在qux*上搜索将返回任何内容。和你想的一样但是如果你有字符串bar,baz,qux,它会分别搜索每个TAG,搜索qux*会匹配并返回。为TAG创建索引时,可以覆盖用于解析TAG元素的字符。我通常使用|。此外,您可以为同一字段创建两次索引。因此,您可以将字段索引为TEXT字段 * 和TAG字段 *。这允许您以更多的方式搜索它,尽管您的索引当然会更大。所有这一切都表明,索引大块的人类可读文本作为TAG可能会导致大索引。可能是个问题。可能不会。这取决于规模和需求。所以,睁大你的眼睛去做吧。
bar*
bar
barbarian
barrister
bar baz qux
qux*
bar,baz,qux
|
1条答案
按热度按时间ztyzrc3y1#
全文搜索在Redis中并不是这样工作的。您只能在文档中搜索术语。这些术语的通配符仍然搜索该术语的出现,只是匹配通配符的那些。
因此,例如,如果您正在搜索
bar*
,这将匹配bar
,barbarian
和barrister
等术语。它将匹配它们在文档中出现的任何位置。在Redis中,如果你想在一个字符串中的精确位置搜索精确的值,你可以使用TAG而不是TEXT。这将适用于上面的简单示例。但是,请记住,它将解析逗号,并将它们视为TAG中的单独值。
因此,例如,如果您有字符串
bar baz qux
并在bar*
上搜索,它将正常工作,而在qux*
上搜索将返回任何内容。和你想的一样但是如果你有字符串bar,baz,qux
,它会分别搜索每个TAG,搜索qux*
会匹配并返回。为TAG创建索引时,可以覆盖用于解析TAG元素的字符。我通常使用
|
。此外,您可以为同一字段创建两次索引。因此,您可以将字段索引为TEXT字段 * 和TAG字段 *。这允许您以更多的方式搜索它,尽管您的索引当然会更大。
所有这一切都表明,索引大块的人类可读文本作为TAG可能会导致大索引。可能是个问题。可能不会。这取决于规模和需求。所以,睁大你的眼睛去做吧。