Search messages
Search messages stored in the local database by keyword, message type, time range, or sender.
tip
- Search operates on local data only.
- Custom messages must implement
getSearchableWordsto be indexed and searchable.
Search channels by keyword
Find all channels containing messages that match a keyword using searchChannels:
- Swift
- Objective-C
swift
import NexconnChatSDK
let params = SearchChannelsParams()
params.keyword = "search term"
params.setChannelTypes([.direct, .group])
// params.messageTypes = [MessageType.text] // Optional: filter by message type
BaseChannel.searchChannels(params: params) { channels, error in
// channels: matched channel list, ordered by latest message time
}
Objective C
NCSearchChannelsParams *params = [[NCSearchChannelsParams alloc] init];
params.keyword = @"search term";
params.channelTypes = @[@(NCChannelTypeDirect), @(NCChannelTypeGroup)];
// params.messageTypes = @[@"RC:TxtMsg"]; // Optional: filter by message type
[NCBaseChannel searchChannelsWithParams:params
completion:^(NSArray<NCBaseChannel *> *channels, NCError *error) {
// channels: matched channel list, ordered by latest message time
}];
Search messages across channels (paginated)
Use createSearchMessagesQuery to search messages across multiple channels with full-text keyword filtering:
- Swift
- Objective-C
swift
import NexconnChatSDK
let params = SearchMessagesQueryParams()
params.keyword = "search term"
params.setChannelTypes([.direct])
params.pageSize = 20
params.startTime = 0
params.endTime = 0 // 0 = current time
let query = BaseChannel.createSearchMessagesQuery(params: params)
query.loadNextPage { page, error in
// page?.data: current page of matching messages
}
Objective C
NCSearchMessagesQueryParams *params = [[NCSearchMessagesQueryParams alloc] init];
params.keyword = @"search term";
params.channelTypes = @[@(NCChannelTypeDirect)];
params.pageSize = 20;
params.startTime = 0;
params.endTime = 0; // 0 = current time
NCSearchMessagesQuery *query = [NCBaseChannel createSearchMessagesQueryWithParams:params];
[query loadNextPageWithCompletion:^(NSArray<NCMessage *> *messages, NCError *error) {
// messages: current page of matching messages
}];
NCSearchMessagesQueryParams properties:
| Property | Type | Description |
|---|---|---|
keyword | NSString * | Search keyword. nil means no keyword filter. |
pageSize | NSInteger | Results per page. Default: 20. |
isAscending | BOOL | Sort order. Default: NO (descending). |
startTime | int64_t | Start timestamp in milliseconds. |
endTime | int64_t | End timestamp in milliseconds. 0 = current time. |
channelTypes | NSArray<NSNumber *> | Channel type filter. Empty = all types. |
channelIds | NSArray<NSString *> | Channel ID filter. Empty = all channels. |
senderUserIds | NSArray<NSString *> | Sender user ID filter. Empty = all senders. |
messageTypes | NSArray<NSString *> | Message type filter. Empty = all types. |
subChannelIds | NSArray<NSString *> | Sub-channel ID filter (for community channels). |
Search messages by time range (paginated)
Use createSearchMessagesByTimeRangeQuery to search messages in a specific channel within a time range:
- Swift
- Objective-C
swift
import NexconnChatSDK
let identifier = ChannelIdentifier(channelType: .direct, channelId: "targetUserId")
let params = SearchMessagesByTimeRangeQueryParams()
params.channelIdentifier = identifier
params.keyword = "search term" // Optional
params.pageSize = 20
let query = BaseChannel.createSearchMessagesByTimeRangeQuery(params: params)
query.loadNextPage { page, error in
// page?.data: matching messages in this time range
}
Objective C
NCChannelIdentifier *identifier = [[NCChannelIdentifier alloc]
initWithChannelType:NCChannelTypeDirect
channelId:@"targetUserId"];
NCSearchMessagesByTimeRangeQueryParams *params = [[NCSearchMessagesByTimeRangeQueryParams alloc] init];
params.channelIdentifier = identifier;
params.keyword = @"search term"; // Optional
params.pageSize = 20;
NCSearchMessagesByTimeRangeQuery *query = [NCBaseChannel createSearchMessagesByTimeRangeQueryWithParams:params];
[query loadNextPageWithCompletion:^(NSArray<NCMessage *> *messages, NCError *error) {
// messages: matching messages in this time range
}];
Search messages by sender (paginated)
Use createSearchMessagesByUserQuery to retrieve messages sent by a specific user in a channel:
- Swift
- Objective-C
swift
import NexconnChatSDK
let params = SearchMessagesByUserQueryParams()
params.channelId = "targetUserId"
params.channelType = .direct
params.userId = "senderId"
params.pageSize = 20
let query = BaseChannel.createSearchMessagesByUserQuery(params: params)
query.loadNextPage { page, error in
// page?.data: messages sent by the specified user
}
Objective C
NCSearchMessagesByUserQueryParams *params = [[NCSearchMessagesByUserQueryParams alloc] init];
params.channelId = @"targetUserId";
params.channelType = NCChannelTypeDirect;
params.userId = @"senderId";
params.pageSize = 20;
NCSearchMessagesByUserQuery *query = [NCBaseChannel createSearchMessagesByUserQueryWithParams:params];
[query loadNextPageWithCompletion:^(NSArray<NCMessage *> *messages, NCError *error) {
// messages: messages sent by the specified user
}];