logo
当前页

搜索本地消息


功能简介

凭借 ZIM SDK,您可以通过关键字、用户 ID 等条件对单个或所有 单聊群聊 会话的本地消息进行搜索,获取符合条件的消息列表;也可以基于本地消息搜索会话。

搜索指定会话的本地消息

创建 ZIM 对象并登录后,调用 searchLocalMessages 接口,传入参数 conversationID、conversationType、config,设置搜索条件(如关键词),获取某个会话中符合条件的本地消息。

符合条件的消息列表,将通过 ZIMMessagesSearchedCallback 回调接口返回并。

示例代码
// 搜索单个会话 7 天内的包含 "zego" 的本地文本消息。
auto endTimestamp = std::chrono::duration_cast<std::chrono::milliseconds>(
                        std::chrono::system_clock::now().time_since_epoch())
                        .count();
auto startTimestamp = endTimestamp - (7 * 24 * 60 * 60 * 1000);

// 会话 ID
// 单聊会话的 conversationID 为对方的 userID。
// 群组会话的 conversationID 为群组的 groupID。
std::string conversationID = "conv";
auto conversationType = zim::ZIMConversationType::ZIM_CONVERSATION_TYPE_PEER;

auto searchConfig = zim::ZIMMessageSearchConfig();
// 搜索结果数量
searchConfig.count = 20;
// 指定搜索顺序为从本地存储的最后(时间)一条消息向前查询
searchConfig.order = zim::ZIMMessageOrder::ZIM_MESSAGE_ORDER_DESCENDING;
// 设置关键词为 “zego”,最多支持 5 个。当设置多个关键词后,搜索结果只展示同时包含所有关键词的本地消息
searchConfig.keywords.emplace_back("zego");
// 指定消息类型为文本
searchConfig.messageTypes.emplace_back(zim::ZIMMessageType::ZIM_MESSAGE_TYPE_TEXT);
// 搜索的起始时间点
searchConfig.startTime = startTimestamp;
// 搜索的结束时间点
searchConfig.endTime = endTimestamp;

zim_->searchLocalMessages(
    conversationID, conversationType, searchConfig,
    [=](const std::string &conversationID, zim::ZIMConversationType conversationType,
        const std::vector<std::shared_ptr<zim::ZIMMessage>> &messageList,
        const std::shared_ptr<zim::ZIMMessage> &nextMessage,
        const zim::ZIMError &errorInfo) {
        // 开发者可以通过该回调监听获取搜索到消息列表。
    });
1
Copied!

搜索全局本地消息

搜索结果按会话分类

创建 ZIM 对象并登录后,调用 searchGlobalLocalMessages 接口,传入参数 config,设置搜索条件(如关键词),全局搜索符合条件的本地消息。

符合条件的消息列表,将通过 ZIMMessagesGlobalSearchedCallback 回调接口返回并按会话分类。

示例代码
// 全局搜索 7 天内的包含 "zego" 的本地文本消息。
auto endTimestamp = std::chrono::duration_cast<std::chrono::milliseconds>(
                        std::chrono::system_clock::now().time_since_epoch())
                        .count();
auto startTimestamp = endTimestamp - (7 * 24 * 60 * 60 * 1000);

auto searchConfig = zim::ZIMMessageSearchConfig();
// 搜索结果数量
searchConfig.count = 20;
// 指定搜索顺序为从本地存储的最后(时间)一条消息向前查询
searchConfig.order = zim::ZIMMessageOrder::ZIM_MESSAGE_ORDER_DESCENDING;
// 设置关键词为 “zego”,最多支持 5 个。当设置多个关键词后,搜索结果只展示同时包含所有关键词的本地消息
searchConfig.keywords.emplace_back("zego");
// 指定消息类型为文本
searchConfig.messageTypes.emplace_back(zim::ZIMMessageType::ZIM_MESSAGE_TYPE_TEXT);
// 搜索的起始时间点
searchConfig.startTime = startTimestamp;
// 搜索的结束时间点
searchConfig.endTime = endTimestamp;

zim_->searchGlobalLocalMessages(
    searchConfig, [=](const std::vector<std::shared_ptr<zim::ZIMMessage>> &messageList,
                        const std::shared_ptr<zim::ZIMMessage> &nextMessage,
                        const zim::ZIMError &errorInfo) {
        // 开发者可以通过该回调监听获取搜索到消息列表。
    });
1
Copied!

基于本地消息搜索会话

创建 ZIM 对象并登录后,调用 searchLocalConversations 接口,传入参数 config,设置与本地消息相关的搜索条件,全局搜索符合条件的会话。

符合条件的会话列表,将通过 ZIMConversationsSearchedCallback 回调接口返回。

示例代码
auto endTimestamp = std::chrono::duration_cast<std::chrono::milliseconds>(
                        std::chrono::system_clock::now().time_since_epoch())
                        .count();
auto startTimestamp = endTimestamp - (7 * 24 * 60 * 60 * 1000);

// 搜索 7 天内包含关键字 "zego" 的本地文本消息,以此获取对应的会话列表
auto searchConfig = zim::ZIMConversationSearchConfig();
searchConfig.totalConversationCount = 10;
searchConfig.conversationMessageCount = 3;
searchConfig.nextFlag = 0;
searchConfig.keywords.emplace_back("zego");
searchConfig.messageTypes.emplace_back(zim::ZIMMessageType::ZIM_MESSAGE_TYPE_TEXT);
searchConfig.startTime = startTimestamp;
searchConfig.endTime = endTimestamp;

zim_->searchLocalConversations(
    searchConfig,
    [=](const std::vector<zim::ZIMConversationSearchInfo> &conversationSearchInfoList,
        unsigned int nextFlag, const zim::ZIMError &errorInfo) {
        // 开发者可以通过该回调监听获取搜索到的会话信息
    });
1
Copied!

Previous

设置消息拓展字段

Next

消息表态