将 Redis-Python 管道与 JSON 相结合

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

Redis 提供了一种输入结构化 JSON 文档并按内容检索它们的方法(例如,这可以增强自动完成搜索体验)。所以我正在这样做,而且效果很好:

test = "{'key': 'glooler-61245', 'val': 'sighgh'}"
r.json().set("a:glooler-61245", Path.root_path(), ast.literal_eval(test))
rs.search(Query(f"glooler"))

Redis 还允许使用管道将许多插入流式传输到一起并在一大批中执行,如下所示:

pipe = r.pipeline()
pipe.set("a", "a value")
pipe.set("b", "b value")
pipe.execute()
pipe.get("a")

但是,管道允许用户仅通过键进行检索,这与 JSON 不同,在 JSON 中可以通过内容进行检索。我如何合并这两个,以便我可以像第一个示例一样推送 10k 结构化 JSON,然后一次性执行管道,然后能够按值检索?

我试过这个:

pipe.set('a:glooler-61246', "{'key': 'glooler-61246', 'val': 'loltest'}")
pipe.set('a:glooler-61247', "{'key': 'glooler-61247', 'val': 'loltest2'}")
pipe.set('a:glooler-61248', "{'key': 'glooler-61248', 'val': 'loltest3'}")
pipe.set('a:glooler-61249', "{'key': 'glooler-61249', 'val': 'loltest4'}")
pipe.execute()

但是,

rs.search(Query(f"glooler"))
仍然只返回我之前插入的第一个值。

redis redis-py redisearch
1个回答
0
投票

我无法访问redis,但我对它有一些了解。您只需将值设置为字符串即可。您需要将它们设置为 json 文档。

试试这个,

pipe = r.pipeline()

pipe.set('a:glooler-61246', ast.literal_eval("{'key': 'glooler-61246', 'val': 'loltest'}"))
pipe.set('a:glooler-61247', ast.literal_eval("{'key': 'glooler-61247', 'val': 'loltest2'}"))
………

pipe.execute()

result = rs.search(Query(f"glooler"))
print(result)

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