rai*_*526 2 escaping redisearch
下午好,
今天下午我在工作中遇到了重新研究的问题。我想搜索其键中具有特定值的记录,但该键中有一个特殊字符。
示例:Record_1:姓名:toto 工作:产品经理 城镇:lolo-baba
在 redis-cli 中,当我执行 'ft.search "lolo-baba"' 时,它给出了由 redisearch 执行的查询。-> 它在做 lolo 或 -baba。
经过一番研究后,我发现这是由于 redisearch 如何将单词划分为标记而造成的。解决方案是在“特殊字符”之前使用一个或两个“\”来转义它,但在我的情况下它不起作用。
我已经尝试过: ft.search "lolo-baba" -> "lolo OR -baba" 不是我想要的
ft.search“lolo-baba” -> 这个给了我我想要的“lolo-baba 而不是 lolo OR -baba”,但我不知道为什么它什么也没返回。
ft.search“lolo\-baba” -> 用多次同一个单词做了一些奇怪的事情,我不知道奇怪。
我想要一个将“lolo-baba”作为单个字符串而不是 2 个标记执行的查询。
小智 5
如果你使用redis-cli,你就需要双重转义,第一次转义是让cli告诉它转义下一个字符,第二次转义是这样转义字符实际上会被发送到redis:
ft.search lolo\\-baba
Run Code Online (Sandbox Code Playgroud)
这将创建您正在查找的确切查询,但请注意,它仍然不会返回任何结果,因为您还必须在索引时转义(否则这两个单词也将在索引时被标记,并且不会被索引为单个术语)。
另一种可能性是将此字段索引为 TAG 字段。标签仅由 SEPERATOR 标记(默认为“,”)。那么你的查询将如下所示:
ft.search @field_name:{lolo\\-baba}
Run Code Online (Sandbox Code Playgroud)