如何在Redis搜索中使用start-with和end-with查询

kpbpu008  于 2023-08-02  发布在  Redis
关注(0)|答案(1)|浏览(142)

是否有可能找到以特定表达式开头或结尾的文档?
例如,如果我们使用以下命令进行搜索:

FT.SEARCH "our.domain.DocumentIdx" "bar*"

字符串
它将返回以下文档:“foo bar",“foo bar baz",“bar baz".
但我无法缩小搜索范围,只找到“bar baz”。

ztyzrc3y

ztyzrc3y1#

全文搜索在Redis中并不是这样工作的。您只能在文档中搜索术语。这些术语的通配符仍然搜索该术语的出现,只是匹配通配符的那些。
因此,例如,如果您正在搜索bar*,这将匹配barbarbarianbarrister等术语。它将匹配它们在文档中出现的任何位置。
在Redis中,如果你想在一个字符串中的精确位置搜索精确的值,你可以使用TAG而不是TEXT。这将适用于上面的简单示例。但是,请记住,它将解析逗号,并将它们视为TAG中的单独值。
因此,例如,如果您有字符串bar baz qux并在bar*上搜索,它将正常工作,而在qux*上搜索将返回任何内容。和你想的一样但是如果你有字符串bar,baz,qux,它会分别搜索每个TAG,搜索qux*会匹配并返回。
为TAG创建索引时,可以覆盖用于解析TAG元素的字符。我通常使用|
此外,您可以为同一字段创建两次索引。因此,您可以将字段索引为TEXT字段 * 和TAG字段 *。这允许您以更多的方式搜索它,尽管您的索引当然会更大。
所有这一切都表明,索引大块的人类可读文本作为TAG可能会导致大索引。可能是个问题。可能不会。这取决于规模和需求。所以,睁大你的眼睛去做吧。

相关问题