Skip to content
Snippets Groups Projects
Commit 4c05a024 authored by Janne Mareike Koschinski's avatar Janne Mareike Koschinski
Browse files

Further performance and UI improvements

parent 26208750
No related branches found
No related tags found
No related merge requests found
......@@ -77,7 +77,6 @@ class Database
public function find(string $query, int $since = null, int $before = null, string $buffer = null, string $network = null, string $sender = null, int $limitPerBuffer = 4): array
{
$truncatedLimit = max(min($limitPerBuffer, 10), 0);
$truncatedLimit = 20;
$messages = $this->findInBufferMultiple($query, $since, $before, $buffer, $network, $sender, $truncatedLimit);
$hasMore = $this->findInBufferMultipleCount($query, $since, $before, $buffer, $network, $sender, 0, $truncatedLimit);
......
......@@ -27,13 +27,26 @@ class PostgresSmartBackend implements Backend
{
return $this->db->prepare("
SELECT
tmp.bufferid,
tmp.buffername,
ranked_messages.bufferid,
ranked_messages.buffername,
network.networkname,
tmp.messageid,
ranked_messages.messageid,
ranked_messages.time,
sender.sender,
tmp.time,
ts_headline(replace(replace(tmp.message, '<', '&lt;'), '>', '&gt;'), query, 'HighlightAll=TRUE') AS message
ts_headline(replace(replace(ranked_messages.message, '<', '&lt;'), '>', '&gt;'), query, 'HighlightAll=TRUE') AS message
FROM
(SELECT
matching_messages.*,
rank()
OVER (
PARTITION BY matching_messages.bufferid
ORDER BY matching_messages.rank_value DESC
) AS rank,
first_value(rank_value)
OVER (
PARTITION BY matching_messages.bufferid
ORDER BY matching_messages.rank_value DESC
) AS max_rank_value
FROM
(SELECT
backlog.messageid,
......@@ -43,45 +56,35 @@ class PostgresSmartBackend implements Backend
backlog.senderid,
backlog.time,
backlog.message,
query,
(
(ts_rank(tsv, query, :config_normalization) ^ :weight_content) *
((CASE
WHEN type IN (1, 4) THEN 1.0
WHEN type IN (2, 1024, 2048, 4096, 16384) THEN 0.75
WHEN type IN (32, 64, 128, 256, 512, 32768, 65536) THEN 0.5
WHEN type IN (8, 16, 8192, 131072) THEN 0.25
WHEN TYPE IN (1, 4) THEN 1.0
WHEN TYPE IN (2, 1024, 2048, 4096, 16384) THEN 0.75
WHEN TYPE IN (32, 64, 128, 256, 512, 32768, 65536) THEN 0.5
WHEN TYPE IN (8, 16, 8192, 131072) THEN 0.25
ELSE 0.1 END) ^ :weight_type) *
((EXTRACT(EPOCH FROM time) / EXTRACT(EPOCH FROM CURRENT_TIMESTAMP)) ^ :weight_time)
) AS rank_value,
rank() OVER (
PARTITION BY backlog.bufferid
ORDER BY (
(ts_rank(tsv, query, :config_normalization) ^ :weight_content) *
((CASE
WHEN type IN (1, 4) THEN 1.0
WHEN type IN (2, 1024, 2048, 4096, 16384) THEN 0.75
WHEN type IN (32, 64, 128, 256, 512, 32768, 65536) THEN 0.5
WHEN type IN (8, 16, 8192, 131072) THEN 0.25
ELSE 0.1 END) ^ :weight_type) *
((EXTRACT(EPOCH FROM time) / EXTRACT(EPOCH FROM CURRENT_TIMESTAMP)) ^ :weight_time)
) DESC
) AS rank,
query
FROM backlog
JOIN buffer ON backlog.bufferid = buffer.bufferid,
phraseto_tsquery_multilang(:query) query
((EXTRACT(EPOCH FROM TIME) / EXTRACT(EPOCH FROM CURRENT_TIMESTAMP)) ^ :weight_time)
) AS rank_value
FROM
backlog
JOIN buffer ON backlog.bufferid = buffer.bufferid
, phraseto_tsquery_multilang(:query) query
WHERE buffer.userid = :userid
AND (:ignore_since::BOOLEAN OR backlog.time > :since::TIMESTAMP)
AND (:ignore_before::BOOLEAN OR backlog.time < :before::TIMESTAMP)
AND (:ignore_buffer::BOOLEAN OR buffer.buffername ~* :buffer)
AND backlog.tsv @@ query AND backlog.type & 23559 > 0
) tmp
JOIN sender ON tmp.senderid = sender.senderid
JOIN network ON tmp.networkid = network.networkid
WHERE tmp.rank <= :limit
AND backlog.type & 23559 > 0
AND backlog.tsv @@ query
) matching_messages
) ranked_messages
JOIN sender ON ranked_messages.senderid = sender.senderid
JOIN network ON ranked_messages.networkid = network.networkid
WHERE ranked_messages.rank <= :limit
AND (:ignore_network::BOOLEAN OR network.networkname ~* :network)
AND (:ignore_sender::BOOLEAN OR sender.sender ~* :sender)
ORDER BY tmp.rank_value DESC;
ORDER BY ranked_messages.max_rank_value DESC, ranked_messages.rank_value DESC
");
}
......@@ -91,11 +94,12 @@ class PostgresSmartBackend implements Backend
SELECT
backlog.bufferid,
COUNT(backlog.messageid) > (:limit::INT + :offset::INT) AS hasmore
FROM backlog
FROM
backlog
JOIN buffer ON backlog.bufferid = buffer.bufferid
JOIN sender ON backlog.senderid = sender.senderid
JOIN network ON buffer.networkid = network.networkid,
phraseto_tsquery_multilang(:query) query
JOIN network ON buffer.networkid = network.networkid
, phraseto_tsquery_multilang(:query) query
WHERE buffer.userid = :userid
AND (:ignore_since::BOOLEAN OR backlog.time > :since::TIMESTAMP)
AND (:ignore_before::BOOLEAN OR backlog.time < :before::TIMESTAMP)
......@@ -111,43 +115,52 @@ class PostgresSmartBackend implements Backend
{
return $this->db->prepare("
SELECT
tmp.bufferid,
tmp.messageid,
matching_messages.bufferid,
matching_messages.buffername,
network.networkname,
matching_messages.messageid,
matching_messages.time,
sender.sender,
tmp.time,
ts_headline(replace(replace(tmp.message, '<', '&lt;'), '>', '&gt;'), query, 'HighlightAll=TRUE') AS message
ts_headline(replace(replace(matching_messages.message, '<', '&lt;'), '>', '&gt;'), query, 'HighlightAll=TRUE') AS message
FROM
(SELECT
backlog.messageid,
backlog.bufferid,
buffer.buffername,
buffer.networkid,
backlog.senderid,
backlog.time,
backlog.message,
query,
(
(ts_rank(tsv, query, :config_normalization) ^ :weight_content) *
((CASE
WHEN type IN (1, 4) THEN 1.0
WHEN type IN (2, 1024, 2048, 4096, 16384) THEN 0.75
WHEN type IN (32, 64, 128, 256, 512, 32768, 65536) THEN 0.5
WHEN type IN (8, 16, 8192, 131072) THEN 0.25
WHEN TYPE IN (1, 4) THEN 1.0
WHEN TYPE IN (2, 1024, 2048, 4096, 16384) THEN 0.75
WHEN TYPE IN (32, 64, 128, 256, 512, 32768, 65536) THEN 0.5
WHEN TYPE IN (8, 16, 8192, 131072) THEN 0.25
ELSE 0.1 END) ^ :weight_type) *
((EXTRACT(EPOCH FROM time) / EXTRACT(EPOCH FROM CURRENT_TIMESTAMP)) ^ :weight_time)
) AS rank_value,
query
FROM backlog
JOIN buffer ON backlog.bufferid = buffer.bufferid,
phraseto_tsquery_multilang(:query) query
((EXTRACT(EPOCH FROM TIME) / EXTRACT(EPOCH FROM CURRENT_TIMESTAMP)) ^ :weight_time)
) AS rank_value
FROM
backlog
JOIN buffer ON backlog.bufferid = buffer.bufferid
, phraseto_tsquery_multilang(:query) query
WHERE buffer.userid = :userid
AND backlog.bufferid = :bufferid
AND buffer.bufferid = :bufferid
AND (:ignore_since::BOOLEAN OR backlog.time > :since::TIMESTAMP)
AND (:ignore_before::BOOLEAN OR backlog.time < :before::TIMESTAMP)
AND backlog.tsv @@ query AND backlog.type & 23559 > 0
) tmp
JOIN sender ON tmp.senderid = sender.senderid
WHERE (:ignore_sender::BOOLEAN OR sender.sender ~* :sender)
ORDER BY tmp.rank_value DESC
AND (:ignore_buffer::BOOLEAN OR buffer.buffername ~* :buffer)
AND backlog.type & 23559 > 0
AND backlog.tsv @@ query
) matching_messages
JOIN sender ON matching_messages.senderid = sender.senderid
JOIN network ON matching_messages.networkid = network.networkid
WHERE (:ignore_network::BOOLEAN OR network.networkname ~* :network)
AND (:ignore_sender::BOOLEAN OR sender.sender ~* :sender)
ORDER BY matching_messages.rank_value DESC
LIMIT :limit
OFFSET :offset;
OFFSET :offset
");
}
......@@ -157,10 +170,11 @@ class PostgresSmartBackend implements Backend
SELECT
backlog.bufferid,
COUNT(backlog.messageid) > (:limit::INT + :offset::INT) AS hasmore
FROM backlog
FROM
backlog
JOIN buffer ON backlog.bufferid = buffer.bufferid
JOIN sender ON backlog.senderid = sender.senderid,
phraseto_tsquery_multilang(:query) query
JOIN sender ON backlog.senderid = sender.senderid
, phraseto_tsquery_multilang(:query) query
WHERE buffer.userid = :userid
AND backlog.bufferid = :bufferid
AND (:ignore_since::BOOLEAN OR backlog.time > :since::TIMESTAMP)
......@@ -181,7 +195,8 @@ class PostgresSmartBackend implements Backend
backlog.time,
network.networkname,
replace(replace(replace(backlog.message, '&', '&amp;'), '<', '&lt;'), '>', '&gt;') AS message
FROM backlog
FROM
backlog
JOIN sender ON backlog.senderid = sender.senderid
JOIN buffer ON backlog.bufferid = buffer.bufferid
JOIN network ON buffer.networkid = network.networkid
......@@ -203,7 +218,8 @@ class PostgresSmartBackend implements Backend
backlog.time,
network.networkname,
replace(replace(replace(backlog.message, '&', '&amp;'), '<', '&lt;'), '>', '&gt;') AS message
FROM backlog
FROM
backlog
JOIN sender ON backlog.senderid = sender.senderid
JOIN buffer ON backlog.bufferid = buffer.bufferid
JOIN network ON buffer.networkid = network.networkid
......
......@@ -39,7 +39,7 @@ class App {
this.loadingQuery++;
const queryId = this.loadingQuery;
load("web/search/", {query: query}).then((result) => {
if (this.loadingQuery != queryId)
if (this.loadingQuery !== queryId)
return;
this.buffers = result.map((buffer) => {
......
......@@ -24,7 +24,7 @@ class StateHandler extends Component {
const oldState = this.state;
this.state = decodeURIComponent(window.location.hash.substr(1));
if (this.state !== oldState && this.state !== "")
if (this.state !== oldState && this.state.length > 0)
this.sendEvent("update", [this.state]);
}
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment