#6027 - Exhaustive conversation search #6078
Open
Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
First time contributor checklist
Contributor checklist
*iPhone 16 Pro, iOS 18.5
Description
This pull request fixes #6027 by making conversation search truly exhaustive. Originally, searching within a conversation would perform a global FTS search across all conversations (limited to 500 results), then filter by thread ID at the application level.
Problem
A conversation search that looks like:
This was impossible since "https" is more specific than "http", indicating the search was not exhaustive.
Root Cause
The original flow was:
SELECT * FROM fts_table WHERE content MATCH 'https' LIMIT 500message.uniqueThreadId == targetThreadIdIf most of the 500 global matches were from other conversations, the target conversation would get incomplete results.
Solution
Move the thread filtering to the database level using SQL JOINs:
Now the LIMIT applies only to messages within the target conversation, ensuring exhaustive results.
Changes Made
Enhanced
FullTextSearchIndexer.swiftsearch()method with optionalthreadUniqueIdparameterthreadUniqueIdis provided, uses thread-specific SQL query with JOINUpdated
FullTextSearcher.swiftsearchWithinConversation()now uses the new thread-specific search methodAdded comprehensive tests
FullTextSearchIndexerTest.swiftwhich covers: