有效负载

有效负载支持(已弃用)

文档有效负载

警告

有效负载功能在 2.0 中已弃用

通常,Redis Stack 将文档存储为哈希或 JSON。但是,如果你想访问某些数据以进行聚合或评分功能,Redis 可以将该数据存储为内联有效负载。这将允许我们以非常低的成本评估文档的属性以进行评分。

由于评分功能已经可以访问包含文档标志和分数的 DocumentMetaData,因此 Redis 可以添加可以在运行时评估的自定义有效负载。

有效负载不会被索引,也不会以任何方式被引擎处理。它们只是为了在查询时对其进行评估,并可以选择性地检索它们。它们可以是 JSON 对象、字符串,或者如果你对快速评估感兴趣,最好是某种易于解码的二进制编码数据。

为文档添加有效负载

使用 FT.ADD 插入文档时,你可以要求 RediSearch 将任意二进制安全字符串存储为文档有效负载。这是通过 PAYLOAD 关键字完成的

FT.ADD {index_name} {doc_id} {score} PAYLOAD {payload} FIELDS {field} {data}...

在查询时评估有效负载

在实现评分功能时,公开的功能签名是

double (*ScoringFunction)(DocumentMetadata *dmd, IndexResult *h);
注意

目前,评分功能无法动态添加,需要分叉引擎并替换它们。

DocumentMetaData 包含几个字段,其中之一是有效负载。它包装了一个长度任意的简单字节数组

typedef struct  {
    char *data,
    uint32_t len;
} DocumentPayload;

如果未将有效负载设置为文档,则它只是 NULL。如果不是,你可以继续对其进行解码。建议在其中对有效负载的一些元数据进行编码,例如前导版本号等。

从文档中检索有效负载

在搜索时,可以从引擎请求文档有效负载。

通过将关键字 WITHPAYLOADS 添加到 FT.SEARCH 来完成此操作。

如果设置了 WITHPAYLOADS,则有效负载在返回的结果中跟随文档 ID。如果也设置了 WITHSCORES,则有效负载跟随分数。例如:

127.0.0.1:6379> FT.CREATE foo SCHEMA bar TEXT
OK
127.0.0.1:6379> FT.ADD foo doc2 1.0 PAYLOAD "hi there!" FIELDS bar "hello"
OK
127.0.0.1:6379> FT.SEARCH foo "hello" WITHPAYLOADS WITHSCORES
1) (integer) 1
2) "doc2"           # id
3) "1"              # score
4) "hi there!"      # payload
5) 1) "bar"         # fields
   2) "hello"
对本页评分