2

下午好,

我今天下午在工作时遇到了重新搜索的问题。我想搜索其键中具有特定值的记录,但该键中有一个特殊字符。

示例:Record_1:姓名:toto 工作:产品经理城镇:lolo-baba

在 redis-cli 中,当我执行 'ft.search "lolo-baba"' 这给了我 redisearch 执行的查询。-> 它在做lolo OR -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 个标记的查询。

4

1 回答 1

3

如果你使用 redis-cli,你就需要双重转义,第一次转义是让 cli 告诉它转义下一个字符,第二次转义是为了让转义字符实际上被发送到 redis:

ft.search lolo\\-baba

这将创建您正在寻找的确切查询,但请注意它仍然不会返回任何结果,因为您还必须在索引时转义(否则这两个词也将在索引时被标记化并且不会被索引为单个术语)。

另一种可能性是将这个字段索引为 TAG 字段。TAGS 仅由 SEPERATOR 标记(默认为',')。然后您的查询将如下所示:

ft.search @field_name:{lolo\\-baba}
于 2019-08-01T11:19:18.740 回答