如何将文档添加到 redis-stack 中的键而不被其他键“找到”

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

我开始使用 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 *

  1. (整数)1
  2. “文档1”
    1. “标题”
    2. “你好世界”
    3. “身体”
    4. “lorem ipsum”
    5. “网址”
    6. “http://redis.io”

然后我创建了另一个密钥:

FT.CREATE myIdx2 SCHEMA tag TEXT  number TEXT address TEXT

然后

FT.SEARCH myIdx2 *
  1. (整数)1
  2. “文档1”
    1. “标题”
    2. “你好世界”
    3. “身体”
    4. “lorem ipsum”
    5. “网址”
    6. “http://redis.io”``

也许我不理解有关文档和密钥的概念,但我希望仅在密钥“myIdx”中看到“doc1”

如果我在第二个键中添加另一个文档:

FT.ADD myIdx2 doc2 1.0  FIELDS tag "second doc" body "random" url "http://dis.io"

然后,如果我检查“myIdx”或“myIdx2”,都会向我显示文档,就像我用哪个键添加文档一样:

FT:ADD


(整数)2
  1. “文档2”
  2. “标签”
    1. “第二个医生”
    2. “身体”
    3. “随机”
    4. “网址”
    5. “http://dis.io”
    “文档1”
  3. “身体”
    1. “lorem ipsum”
    2. “网址”
    3. “http://redis.io”
    4. “标题”
    5. “你好世界”
  4. 有人可以向我解释一下为什么我看到所有键中的文档吗?我需要处理 redis-stack 中的某些配置吗? 我是否需要向
FT.SEARCH myIdx *

传递另一个参数以确保该文档只能在我添加的一个键中“找到”?

这就是我来到这里的方式:

Macos(Ventura、macbook pro M1)中 Docker 桌面(4.32.0)中容器中的 Redis 堆栈,我简单地执行了: docker pull redis/redis-stack:latest ,然后在 Docker 桌面中运行它。然后通过UI访问容器,输入redis-cli后的命令。

docker redis redis-search redis-stack
1个回答
0
投票
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: …

选项对文档中的值设置条件,以决定是否对其建立索引。

在此处的文档中查看这两个选项

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