浏览 SDKs · Android
平台
SDKsAndroid

搜索消息

在本地已同步的历史消息中进行多维度关键字检索。

复制

在本地已落盘的历史消息中按关键字搜索。支持限定特定会话、指定发送人、过滤消息类型(如文本、文件等)以及时间范围;conversationID 传 null 时将对当前账号的所有本地会话进行全局消息检索。

String conversationID = null; // 传 null 为全局搜索,传特定 ID 为单会话内搜索
List<String> keywords = Collections.singletonList("需求评审");
int keywordMatchType = 1; // 1 为任一匹配(OR),0 为全部匹配(AND)
List<String> senderIDs = null;
List<Integer> messageTypes = null;
int searchTimePosition = 0;
int searchTimePeriod = 0;
int pageIndex = 0;
int count = 20;

OpenIMClient.getInstance().messageManager.searchLocalMessages(
    new OnBase<SearchResult>() {
        @Override
        public void onSuccess(SearchResult result) {
            // result.getSearchResultItems() 按会话组织匹配消息
        }

        @Override
        public void onError(int code, String error) {
            // 处理搜索失败
        }
    },
    conversationID,
    keywords,
    keywordMatchType,
    senderIDs,
    messageTypes,
    searchTimePosition,
    searchTimePeriod,
    pageIndex,
    count
);

关键词匹配模式

keywordListMatchType 字段取值说明如下:

枚举值数值含义
全部匹配(AND)0消息正文中必须同时包含关键词列表中的所有词项。
任一匹配(OR)1消息正文中只要命中关键词列表中的任意一个词项即可。

参数说明

参数类型是否必填说明
baseOnBase<SearchResult>是异步请求回调。
conversationIDString否限定搜索的目标会话 ID;传 null 表示搜索全部本地会话。
keywordListList<String>是搜索关键字列表。两项搜索开关均关闭或关键字为空时不应发起请求。
keywordListMatchTypeint是关键词匹配方式:0 全部匹配,1 任一匹配。
senderUserIDListList<String>否仅搜索指定用户发送的消息;不限制时传空列表或 null。
messageTypeListList<Integer>否仅搜索指定消息类型(如文本、图片等);不限制时传空列表或 null。
searchTimePositionint是搜索时间起点(秒级时间戳);0 表示从当前时间开始。
searchTimePeriodint是从起点向过去回溯搜索的秒数;0 表示不限制时间范围。
pageIndexint是分页页码,首页从 0 开始。
countint是每页最多返回的结果条目数。

返回结果

成功回调返回 SearchResult 对象。核心属性包含:

字段说明
totalCount匹配到的消息记录总数。
searchResultItems按会话组织的结果列表 List<SearchResultItem>。

每个 SearchResultItem 包含对应会话的 conversationID、会话展示名称、头像、该会话内命中的记录数 messageCount 以及消息列表 messageList。点击单条消息时,可调用读取消息上下文快速定位并还原上下文消息。