如何在redis搜索中使用多个通配符?

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

密钥格式为客户|项目|任务|地点

我想搜索像这样的客户|* |任务| *

这可能吗?

redis
1个回答
0
投票

我相信 KEYSSCAN 命令将允许您找到与此类模式匹配的键。它支持像这样的 glob 样式模式:

  • h?llo 匹配 hello、hallo 和 hxllo
  • h*llo 匹配 hllo 和 heeeello
  • h[ae]llo 匹配 hello 和 Hallo,但不匹配 hillo
  • h[^e]llo 匹配hallo, hbllo, ...但不匹配hello
  • h[a-b]llo 匹配 Hallo 和 hbllo

如果您走这条路,请使用 SCAN。 KEYS 会阻止 Redis 命令在整个运行过程中运行的单个线程。 SCAN 批量拉回数据并更好地扩展。

redis.cloud:6379> SCAN 0 MATCH customer|*|task|* COUNT 100
1) "876"
2) 1) "customer|word|task|asdf"

您需要使用返回的号码多次调用 SCAN,直到返回 0。并非所有调用都会返回值:

redis.cloud:6379> SCAN 876 MATCH customer|*|task|* COUNT 100
1) "1023"
2) (empty array)

但是,您可能需要考虑将其存储为哈希或 JSON 而不是字符串并使用搜索。您可以使用 FT.CREATE 命令定义索引,然后使用 FT.SEARCH 命令查找您要查找的内容。

redis.cloud:6379> HSET customer:1 customer "Willy Wonka" project "Chocolate Consumption" task "Eat More Chocloate" location "United Kingdon"

redis.cloud:6379> FT.CREATE customer:index PREFIX 1 customer: SCHEMA customer TAG project TAG task TAG location TAG

redis.cloud:6379> FT.SEARCH customer:index "@project:{Choco*} @task:{Eat More Chocolate}"

希望有帮助。

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