# NIP12

## 通用标记查询

`draft` `optional` `author:scsibug` `author:fiatjaf`

中继可以支持任意标签上的订阅。 `NIP-01` 要求中继响应对 `e` 和 `p` 标记的查询。此 NIP 允许查询事件中存在的任何单字母标记。

中 `NIP-01` 描述的 `<filters>` 对象将扩展为包含带 `#` 前缀的任意键。筛选器中以 `#` 开头的任何单字母键都是标记查询，并且必须具有字符串数组的值。如果事件具有相同名称的标记，并且至少有一个与筛选器和事件相同的标记值，则筛选条件匹配。标记名是不带 `#` 的字母，标记值是第二个元素。出于标记查询的目的，将忽略后续元素。

## 订阅筛选器示例

下面提供了一个过滤器示例，该过滤器匹配 `r` 标记设置为或 `foo` `bar` 的事件种类 `1`。

```
{
  "kinds": [1],
  "#r": ["foo", "bar"]
}
```

## 客户行为

客户端应使用该 `supported_nips` 字段来了解中继是否支持通用标记查询。如果客户端准备过滤掉来自不支持此 NIP 的中继的无关响应，则客户端可以向任何中继发送通用标记查询。

## 基本原理

只保留单字母标记以便在查询中使用的决定允许应用程序将标记用于各种元数据，因为这是它们的主要用途，而不用担心它们可能会使中继索引膨胀。当然，这也使得继电器更加轻便。如果某些应用程序或用户正在滥用单字母标签，意图使中继膨胀，这将变得更容易检测，因为单字母标签几乎不会与某些实际有意义的元数据混淆，某些应用程序确实想要附加到事件，而没有垃圾邮件的意图。

## 建议的使用情形

下面提供了通用标记查询的激发示例。本 NIP 不会出于任何目的推广或标准化任何特定标签的使用。

* 分散式评论系统：客户可以对任意网页进行评论，并通过使用 `r`（"引用"，在这种情况下是 URL）标签和值轻松搜索其他评论。
* 特定于位置的帖子：客户端可以使用 `g`（" geohash "）标签将帖子与物理位置相关联。客户端可以搜索其附近的一组不同精度的地理哈希，以查找本地内容。
* 标签：客户可以使用简单的 `t`（"标签"）标签将事件与易于搜索的主题名称相关联。由于 NOSTR 事件本身不能通过协议进行搜索，因此这为用户驱动的搜索提供了一种机制。
