转义反斜杠本身

问题描述 投票:0回答:1

反斜杠本身的转义在 Redis 中表现得很奇怪。上下文是我需要对文档进行索引,但如果文档包含反斜杠,希望避免对反斜杠(转义分隔符)的影响。

1 我尝试对文本“login\\ Today”建立索引。根据我的理解,文本应该被标记为两个世界“登录\”和“今天”,因为反斜杠本身的转义空格将保持原样,从而分隔单词。

ft.create test_idx on hash prefix 1 “test:doc:” schema detail text hset test:doc:doc1 detail “login\\\\ today”

然而,当我搜索“今天”时,却什么也没返回。

ft.search test_idx “today”

如果我搜索“login\\today”,就会检索到文档。

ft.search test_idx “login\\\\today”

我很困惑,不知道为什么。

2 我还发现了其他东西。

127.0.0.1:6379> ft.explaincli test_idx "login\\\\\\\\today"
1) UNION {
2)   login\today
3)   +login\today(expanded)
4) }

我虽然应该搜索“login\today”,但中间的一些反斜杠被删除了。我正在使用 redis_version:6.2.11 和 search:2.6.7

如果有人能回答我的问题,我将不胜感激。

非常感谢。

redisearch
1个回答
0
投票

了解 Redis 中反斜杠的行为,尤其是在 RediSearch 中的索引和搜索上下文中,确实可能很棘手,因为反斜杠在输入和处理过程中是如何处理的。以下是详细的细分,可帮助阐明您的场景中发生的情况:

1。使用反斜杠进行索引和搜索

索引“登录\今天”

当您使用以下方式索引文本“login\ Today”时:

hset test:doc:doc1 detail "login\\ today"

反斜杠 () 在许多编程环境中是一个特殊字符,通常用作转义字符。在 Redis CLI 和许多编程环境中,您需要转义反斜杠本身,这意味着您应该编写 \ 来表示单个 .

但是,您似乎正确地转义了反斜杠。如果空间保持原样,文本应标记为“登录”和“今天”。

但是由于反斜杠的处理方式,需要考虑一些细微差别:

  • Redis中的存储:文本login\today按原样存储,但是 在内部它可能会被解释为转义规则。
  • 标记化:RediSearch 可能会以特殊方式处理反斜杠, 影响它如何标记输入。

搜索“今天”

当您搜索“今天”时:

ft.search test_idx "today"

它不会返回任何内容,因为如果反斜杠处理影响标记化,标记生成器可能无法将“今天”识别为单独的标记。

搜索“今天登录”

当您搜索“今天登录”时:

ft.search test_idx "login\\\\today"

由于 Redis CLI 解析,这涉及双重转义。每个反斜杠都需要转义,因此 \ 变为 \。搜索会检索文档,因为它与索引期间解释的标记相匹配。

2。查询解析说明

跑步时:

ft.explaincli test_idx "login\\\\\\\\today"

你看:

1) UNION {
2)   login\today
3)   +login\today(expanded)
4) }

此输出指示内部如何解析和执行查询。详细内容如下:

  1. 输入处理:输入字符串“login\\today”包含 八个反斜杠。每对反斜杠 \ 代表一个 \ 在搜索字符串中。
  2. 查询解析:RediSearch 查询解析器解释这些 反斜杠。在这种情况下,\ 被解释为 \,这进一步 减少到 .因此,login\\today 变为login oday(四 由于双重转义,反斜杠变成两个)。

要记住的要点

  1. 转义反斜杠:始终考虑反斜杠需要被 逃脱了,并且需要在两个方面都考虑到这种加倍效应 索引和搜索。

  2. 标记化的细微差别:反斜杠的存在会影响文本的标记化方式。确保您的理解与 RediSearch 对这些字符的解释保持一致。

  3. 查询解释:解释命令显示如何解析和执行查询,揭示如何处理反斜杠。

建议

  • 使用不同的输入进行测试:尝试不同的变化 反斜杠以查看它们如何影响索引和搜索结果。
  • 参考文档:查看 RediSearch 的文档 转义和特殊字符以获得更详细的见解。
  • 社区和支持:参与 Redis 社区或寻求 Redis 维护者对此类边缘情况的支持。

通过彻底了解这些方面,您可以更好地处理Redis和RediSearch中包含反斜杠的文本。

© www.soinside.com 2019 - 2024. All rights reserved.