NIP-91 为 Nostr 中继订阅中的标签数组添加了 AND 过滤语义。该提案在多个中继实现后于 2026-03-03 合并。

问题所在

Nostr 的过滤系统(NIP-01)使用 OR 逻辑组合单个标签过滤器中的多个值。如果客户端在过滤器中指定两个 p 标签值,中继会返回匹配任一公钥的事件。此前没有办法请求同时引用两个公钥的事件。

这迫使客户端从中继过度获取事件并在本地过滤,增加了带宽使用和处理时间。

工作原理

NIP-91 为标签数组引入了 AND 语义。当客户端需要匹配所有指定标签值的事件时,可以选择使用交集匹配而非默认的并集行为。

这对于"标记了对话中两个参与者的事件"或"同时携带两个必需标签的事件"等查询很重要。在此更改之前,中继只能返回更大的超集,将精确的交集运算留给客户端。

重要意义

AND 过滤器使中继端索引更加实用。客户端可以向中继请求更小的、已经相关的结果集,从而减少带宽和本地后处理。这种优势在移动客户端和针对大量标签密集型数据集的查询上最为明显。

互操作说明

合并时,nostr-rs-relay、satellite-node、worker-relay 和 applesauce 中已有可用实现。该提案此前编号为 NIP-119,后来重新编号。

在中继逐步采用期间,客户端应预期支持程度参差不齐。一个实用的回退方案是为尚未实现新语义的中继保留旧的客户端交集处理路径。


主要来源:

提及于:

另请参阅: