转义字符重新搜索

时间:2019-07-30 15:34:52

标签: escaping redisearch

下午好,

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

示例: 记录_1:   名称:托托   职位:产品经理   镇:洛洛-巴巴

当我执行'ft.search“ lolo-baba”'时,在redis-cli中

,这给了我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个标记的查询。

1 个答案:

答案 0 :(得分:1)

如果您使用redis-cli,则需要进行两次转义,第一个转义是让cli告诉它转义下一个字符,第二个转义是使转义字符实际上发送到redis:

ft.search lolo\\-baba

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

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

ft.search @field_name:{lolo\\-baba}