mirror of
https://github.com/chatmail/core.git
synced 2026-05-19 23:06:32 +03:00
LIMIT global search
This commit is contained in:
@@ -1272,6 +1272,12 @@ uint32_t dc_get_chat_ephemeral_timer (dc_context_t* context, uint32_t chat_id);
|
|||||||
* search results may just hilite the corresponding messages and present a
|
* search results may just hilite the corresponding messages and present a
|
||||||
* prev/next button.
|
* prev/next button.
|
||||||
*
|
*
|
||||||
|
* For global search, result is limited to 1000 messages,
|
||||||
|
* this allows incremental search done fast.
|
||||||
|
* So, when getting exactly 1000 results, the result may be truncated;
|
||||||
|
* the UIs may display sth. as "1000+ messages found" in this case.
|
||||||
|
* Chat search (if a chat_id is set) is not limited.
|
||||||
|
*
|
||||||
* @memberof dc_context_t
|
* @memberof dc_context_t
|
||||||
* @param context The context object as returned from dc_context_new().
|
* @param context The context object as returned from dc_context_new().
|
||||||
* @param chat_id ID of the chat to search messages in.
|
* @param chat_id ID of the chat to search messages in.
|
||||||
|
|||||||
@@ -503,6 +503,11 @@ impl Context {
|
|||||||
//
|
//
|
||||||
// Unlike chat view, sorting by `timestamp` is not necessary but slows down the query by
|
// Unlike chat view, sorting by `timestamp` is not necessary but slows down the query by
|
||||||
// ~25% according to benchmarks.
|
// ~25% according to benchmarks.
|
||||||
|
//
|
||||||
|
// To speed up incremental search, where queries for few characters usually return lots
|
||||||
|
// of unwanted results that are discarded moments later, we added `LIMIT 1000`.
|
||||||
|
// According to some tests, this limit speeds up eg. 2 character searches by factor 10.
|
||||||
|
// The limit is documented and UI may add a hint when getting 1000 results.
|
||||||
self.sql
|
self.sql
|
||||||
.fetch(
|
.fetch(
|
||||||
sqlx::query(
|
sqlx::query(
|
||||||
@@ -517,7 +522,7 @@ impl Context {
|
|||||||
AND c.blocked=0
|
AND c.blocked=0
|
||||||
AND ct.blocked=0
|
AND ct.blocked=0
|
||||||
AND m.txt LIKE ?
|
AND m.txt LIKE ?
|
||||||
ORDER BY m.id DESC",
|
ORDER BY m.id DESC LIMIT 1000",
|
||||||
)
|
)
|
||||||
.bind(str_like_in_text),
|
.bind(str_like_in_text),
|
||||||
)
|
)
|
||||||
|
|||||||
Reference in New Issue
Block a user