docs-matrix-spec/locales/zh-Hans/client-server-api/modules/search.md
2025-04-20 16:13:37 +08:00

2.5 KiB
Raw Blame History

服务器端搜索

搜索 API 允许客户端对用户所加入过的所有房间中的事件进行全文搜索,包括用户已经离开的房间。仅搜索用户有权限查看的事件,例如,用户离开房间后发生的事件将不会被包含。

客户端行为

服务器端搜索有一个统一的 HTTP API具体文档如下。

{{% http-api spec="client-server" api="search" %}}

搜索类别

搜索 API 允许客户端按不同类别进行搜索。目前唯一被明确定义的类别是 room_events

room_events

该类别包含所有用户有权限查看的事件,包括用户已经离开的房间中的事件。搜索会在特定事件类型的特定键值上进行。

支持检索的字段包括:

  • m.room.message 事件的 content.body
  • m.room.name 事件的 content.name
  • m.room.topic 事件的 content.topic

加密的房间(端对端加密)不会被包含在搜索范围内。

搜索结果包含一个 rank 键,可用于按相关度排序结果。rank 值越高,结果越相关。

count 字段用于大致表示总结果数。Homeserver 可能会返回一个估计值,而非精确值。

排序方式

客户端可以指定服务器返回结果的排序方式。允许的两种排序方式为:

  • rank:首先返回最相关的结果。
  • recent:首先返回最新的结果。

默认排序方式为 rank

分组

客户端可以请求返回带有分组信息的结果,例如按 room_id 分组。在这种情况下,响应中会包含每个不同 room_id 的分组条目。每个分组条目至少包含该分组内的 event_id 列表,也可能包含关于该分组的其他元数据。

当前要求支持的分组方式有:

  • room_id
  • sender

分页

服务器响应中各处可能会返回一个 next_batch 键。它用于对结果进行分页。若需获取更多结果,客户端应使用相同的请求,并将 next_batch 查询参数设置为该标记。

分页的范围取决于 next_batch 标记返回的位置。例如,在分组内使用该标记将返回该分组中的更多结果。

目前支持的 next_batch 标记位置有:

  • search_categories.<category>.next_batch
  • search_categories.<category>.groups.<group_key>.<group_id>.next_batch

即使存在更多匹配结果,服务器也可以选择不支持分页。在这种情况下,响应中不得返回 next_batch 标记。

安全性注意事项

服务器只能返回用户有权限查看的结果。