搜索消息
SDK 从 1.1.0 版本开始提供了本地消息搜索功能,允许 App 用户通过关键词、用户 userId 等条件搜索指定的单个会话中的消息,支持按时间段搜索。消息搜索仅查询本地数据库中的消息,返回包含指定关键字或符合全部搜索条件的消息列表。
支持关键字搜索的消息:
- 内置的消息类型中文本消息(TextMessage),文件消息(FileMessage).
- 自定义消息类型实现
getSearchableWord也可以支持关键字搜索,需要您参考文档自行实现。详见自定义消息类型。
如何实现基于关键字的全局搜索:
- 根据关键字搜索本地存储的全部会话,获取包含关键字的会话列表。
- 根据搜索会话返回的会话列表数据,调用搜索单个会话的方法,搜索符合条件的消息。
根据关键字搜索本地会话
按关键字搜索本地存储的所有会话,获取符合条件的会话列表。请使用 searchConversationsWithResult 方法。
接口原型
TypeScript
/**
* 根据关键字搜索本地会话。
* @param conTypes 搜索的会话类型列表
* @param keyword 搜索的关键字,长度范围 [1, 256]
* @param objNameList 消息类型数组。用于搜索指定类型的消息;为空代表所有所有类型消息
* @returns 搜索到的会话列表
* @version 1.2.0
*/
public searchConversationsWithResult(
typeList: List<ConversationType>,
keyword: string,
objNameList: List<string> | null,
): Promise<IAsyncResult<List<SearchConversationResult>>>
参数说明
| 参数名 | 类型 | 详细说明 |
|---|---|---|
| typeList | List | 要搜索的会话类型列表(如单聊/群聊/系统会话等) |
| keyword | string | 搜索的关键字,长度范围 [1, 256]) |
| objNameList | List | 消息类型数组。用于搜索指定类型的消息;为空代表所有所有类型消息 |
示例代码
TypeScript
let conTypeList = new List<ConversationType>();
conTypeList.add(ConversationType.Private);
conTypeList.add(ConversationType.Group);
let keyword = "关键字";
IMEngine.getInstance().searchConversationsWithResult(conTypeList, keyword, null).then(result => {
if (EngineError.Success !== result.code) {
// 搜索会话失败
return;
}
if (!result.data) {
// 搜索的会话内容为空
return;
}
// 搜索的结果
let searchResultList = result.data as List<SearchConversationResult>;
});