Skip to main content

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 getSearchableWords to be indexed and searchable.

Search channels by keyword

Find all channels containing messages that match a keyword using searchChannels:

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
}

Search messages across channels (paginated)

Use createSearchMessagesQuery to search messages across multiple channels with full-text keyword filtering:

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
}

NCSearchMessagesQueryParams properties:

PropertyTypeDescription
keywordNSString *Search keyword. nil means no keyword filter.
pageSizeNSIntegerResults per page. Default: 20.
isAscendingBOOLSort order. Default: NO (descending).
startTimeint64_tStart timestamp in milliseconds.
endTimeint64_tEnd timestamp in milliseconds. 0 = current time.
channelTypesNSArray<NSNumber *>Channel type filter. Empty = all types.
channelIdsNSArray<NSString *>Channel ID filter. Empty = all channels.
senderUserIdsNSArray<NSString *>Sender user ID filter. Empty = all senders.
messageTypesNSArray<NSString *>Message type filter. Empty = all types.
subChannelIdsNSArray<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
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
}

Search messages by sender (paginated)

Use createSearchMessagesByUserQuery to retrieve messages sent by a specific user in a channel:

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
}