搜索服务器与频道
更新时间: 2024/03/07 11:11:47
网易云信即时通讯 NIM SDK 的QChatServerService
类提供搜索圈组的服务器的方法,QChatChannelService
类提供搜索频道和频道成员的方法。
SDK 还支持配置搜索结果的排序规则,如搜索出的服务器列表可按时间和人数等维度排序,也可自定义排序。
应用场景
圈组的搜索能力和配套的搜索结果排序能力,可满足您的应用的特定运营需求,如:
- 通过按人数排序,将热门社区(对应圈组服务器)展示在用户搜索结果的前列,方便用户加入热门社区。
- 通过自定义排序,将广告位性质的话题(对应频道)展示在用户搜索结果的前列,增加流量引入。
技术原理
下图左侧所示事件发生后,将触发相关消息通过消息队列(Message Queue)通知云信搜索服务器,搜索服务器把相关的事件数据保存或更新到 Elasticsearch。
由于整个数据传送过程都是通过消息队列生产消费,且 Elasticsearch 的数据每秒刷新一次,所以整体的搜索数据存在一定的延迟(正常 3 秒内)。
与服务器的关联逻辑
服务器创建、更新、查询等方法(包括createServer
和updateServer
),入参包含searchEnable
和searchType
。
参数 | 说明 |
---|---|
searchEnable |
服务器是否允许被搜索,true -允许,false -不允许,默认允许 |
searchType |
服务器搜索类型,客户自定义,大于等于 0 的整数。 0 代表无类型 |
前提条件
开始搜索功能集成前,请确保:
- 已开通圈组搜索功能。圈组搜索功能需要在开通圈组功能的基础上额外开通后才能使用。
- 创建圈组服务器。
- 创建频道。
实现方法
搜索服务器
调用searchServerByPage
方法可搜索服务器,返回在startTime
和endTime
之间的时间段内创建并与keyword
匹配的服务器。
该方法的入参如下表所示:
参数 | 必传 | 类型 | 说明 |
---|---|---|---|
keyword |
是 | String | 目标检索服务器名称的关键字 |
asc |
是 | bool | true -升序,false -降序 |
searchType |
是 | QChatSearchServerTypeEnum |
配置搜索类型: |
startTime |
否 | int | 查询时间范围的开始时间 |
endTime |
否 | int | 查询时间范围的结束时间,必须比开始时间晚 |
limit |
否 | int | 每页结果条数,最大和默认都是 100 |
serverTypes |
否 | List<int?> | 服务器类型,对应创建服务器时传入的searchType |
sort |
否 | QChatServerSearchSortEnum |
|
cursor |
否 | String | 游标, 搜索的起始位置 |
全局搜索服务器
全局搜索集成圈组的应用内的所有服务器,包括已加入的和未加入的服务器。
全局搜索仅能搜索到“允许被搜索”的服务器。可通过上文与服务器的关联逻辑中提及的searchEnable
参数进行设置。
示例代码如下:
var paramSearchServer = QChatSearchServerByPageParam("keyword", true, QChatSearchServerTypeEnum.square);
NimCore.instance.qChatServerService.searchServerByPage(paramSearchServer).then((value){
if(value.isSuccess){
//todo success
}else{
}
});
搜索已加入的服务器
示例代码代码如下:
var paramSearchServer = QChatSearchServerByPageParam("keyword", true, QChatSearchServerTypeEnum.personal);
NimCore.instance.qChatServerService.searchServerByPage(paramSearchServer).then((value){
if(value.isSuccess){
//todo success
}else{
}
});
搜索频道
调用searchChannelsByPage
方法搜索对当前用户可见的频道(即当前用户未被加入黑名单的公开频道和已被加入白名单的私密频道)。
入参 | 必传 | 类型 | 说明 |
---|---|---|---|
keyword |
是 | String | 目标检索服务器名称的关键字 |
asc |
是 | bool | 排序规则 1: ASC 2: DESC |
startTime |
否 | int | 查询时间范围的开始时间 |
endTime |
否 | int | 查询时间范围的结束时间,要求比开始时间大 |
limit |
否 | int | 每页结果条数,最大和默认都是 100 |
serverId |
否 | int | 不填时查询所有服务器,填写时查询指定服务器 |
sort |
否 | QChatChannelSearchSortEnum |
|
cursor |
否 | string | 游标, 搜索的起始位置 |
示例代码
var paramSearchChannel = QChatSearchChannelByPageParam(
keyword: "keyword",
asc: true,
sort: QChatChannelSearchSortEnum.CreateTime);
NimCore.instance.qChatChannelService
.searchChannelByPage(paramSearchChannel)
.then((value) {
if (value.isSuccess) {
//todo success
} else {}
});
搜索频道成员
调用searchChannelMembers
方法搜索频道成员。
参数 | 必传 | 类型 | 说明 |
---|---|---|---|
keyword |
是 | String | 目标成员的昵称或账号的关键字,最大 100 个字符 |
serverId |
是 | int | 服务器 ID |
channelId |
是 | int | 频道 ID |
limit |
否 | int | 检索返回的最大记录数,最大和默认都是 100 |
示例代码
var paramSearchChannelMembers = QChatSearchChannelMembersParam(
keyword: "keyword", serverId: serverId, channelId: channelId)
NimCore.instance.qChatChannelService.searchChannelMembers(
paramSearchChannelMembers).then((value) {
if (value.isSuccess) {
//todo success
}
});
搜索结果自定义排序
创建服务器成功后返回的QChatCreateServerResult
中的QChatServer
包含服务器的自定义排序权重信息(ReorderWeight
),默认为 0。同样的,创建频道成功后返回的QChatCreateChannelResult
中的QChatChannel
包含频道的自定义排序权重信息(ReorderWeight
),默认为 0。自定义排序权重值,目前仅支持通过服务器端 API 修改。
服务器自定义排序
实现服务器搜索结果自定义排序的流程如下:
-
调用服务端 API (
qchat/batchUpdateServerReorderWeight.action
)修改服务器的自定义排序权重值。调用该 API 单次可修改权重的服务器的数量上限默认为 10。如需调整该上限,请通过云信官网首页的在线聊天、微信和电话等联系方式咨询商务经理。
-
调用
searchServerByPage
方法搜索服务器。调用时除了必传的入参keyword
、searchType
和asc
外,还需传入sort
,且将其设置为ReorderWeight
。结果:
- 如
asc
为默认倒序,则匹配的服务器列表以权重值倒序排列,相同权重的服务器按serverId
倒序排列。 - 如
asc
为正序,则按权重值正序排序,相同权重的按serverId
倒序排列。
示例代码如下:
var paramSearchServer = QChatSearchServerByPageParam("keyword", true, QChatSearchServerTypeEnum.personal); paramSearchServer.sort = QChatServerSearchSortEnum.reorderWeight; NimCore.instance.qChatServerService.searchServerByPage(paramSearchServer).then((value){ if(value.isSuccess){ //todo success }else{ } });
- 如
频道自定义排序
实现频道搜索结果自定义排序的流程如下:
-
调用服务端 API (
qchat/batchUpdateChannelReorderWeight.action
)修改频道的自定义排序权重默认值。调用该 API 单次可修改权重值的频道的数量上限默认为 10。如需调整该上限,请通过云信官网首页的在线聊天、微信和电话等联系方式咨询商务经理。
-
调用
searchChannelByPage
方法搜索频道。调用时除了必传的入参keyword
和asc
外,还需传入sort
,且将其设置为ReorderWeight
。结果:
- 如
asc
为默认倒序,则匹配的频道列表以权重值倒序排列,相同权重的频道按channelId
倒序排列。 - 如
asc
为正序,则按权重值正序排序,相同权重的按channelId
倒序排列。
示例代码如下:
var paramSearchChannel = QChatSearchChannelByPageParam( keyword: "keyword", asc: true, sort: QChatChannelSearchSortEnum.ReorderWeight); NimCore.instance.qChatChannelService .searchChannelByPage(paramSearchChannel) .then((value) { if (value.isSuccess) { //todo success } else {} });
- 如