我开始使用 redis-stack,因此我(在 redis-stack 容器内)创建了下一个密钥和文档:
FLUSHALL
FT.CREATE myIdx SCHEMA title TEXT WEIGHT 5.0 body TEXT url TEXT
然后给它一个文档:
FT.ADD myIdx doc1 1.0 FIELDS title "hello world" body "lorem ipsum" url "http://redis.io"
然后我看到创建成功了:
127.0.0.1:6379> FT.SEARCH myIdx *
然后我创建了另一个密钥:
FT.CREATE myIdx2 SCHEMA tag TEXT number TEXT address TEXT
然后
FT.SEARCH myIdx2 *
也许我不理解有关文档和密钥的概念,但我希望仅在密钥“myIdx”中看到“doc1”
如果我在第二个键中添加另一个文档:
FT.ADD myIdx2 doc2 1.0 FIELDS tag "second doc" body "random" url "http://dis.io"
然后,如果我检查“myIdx”或“myIdx2”,都会向我显示文档,就像我用哪个键添加文档一样:
FT:ADD
:
(整数)2FT.SEARCH myIdx *
传递另一个参数以确保该文档只能在我添加的一个键中“找到”?
这就是我来到这里的方式:Macos(Ventura、macbook pro M1)中 Docker 桌面(4.32.0)中容器中的 Redis 堆栈,我简单地执行了: docker pull redis/redis-stack:latest ,然后在 Docker 桌面中运行它。然后通过UI访问容器,输入redis-cli后的命令。
FT.ADD
已弃用,将文档添加到索引的正确方法是直接使用 Redis 哈希或 JSON(如果您有模块(它是 Redis 堆栈的一部分)并且为 JSON 定义索引。
)HSET是在redis上设置hash的命令。今天,
FT.ADD
已重定向并调用 HSET,同时保留旧的 API 行为和选项。
为了仅对每个索引上的特定哈希值建立索引,您应该在创建索引时使用FT.ADD
选项,否则每个索引将尝试加载数据库中的所有哈希值(或 JSON)。
例如,您可以定义PREFIX
您还可以使用
FT.CREATE myIdx1 PREFIX 1 doc:idx1: …
FT.CREATE myIdx2 PREFIX 1 doc:idx2: …
FT.CREATE allMyDocs PREFIX 1 doc: …
选项对文档中的值设置条件,以决定是否对其建立索引。
在此处的文档中查看这两个选项