From 1d791bb3292e6d5e641231a85ae515f3cfbc26bf Mon Sep 17 00:00:00 2001 From: hsiegeln <37154749+hsiegeln@users.noreply.github.com> Date: Wed, 1 Apr 2026 21:13:54 +0200 Subject: [PATCH] fix: use exact match for ID fields in full-text search ID fields (execution_id, correlation_id, exchange_id) should use exact equality, not LIKE with wildcards. LIKE is only needed for the _search_text full-text columns. Co-Authored-By: Claude Opus 4.6 (1M context) --- .../server/app/search/ClickHouseSearchIndex.java | 13 +++++++------ 1 file changed, 7 insertions(+), 6 deletions(-) diff --git a/cameleer3-server-app/src/main/java/com/cameleer3/server/app/search/ClickHouseSearchIndex.java b/cameleer3-server-app/src/main/java/com/cameleer3/server/app/search/ClickHouseSearchIndex.java index e1e33004..f3df489d 100644 --- a/cameleer3-server-app/src/main/java/com/cameleer3/server/app/search/ClickHouseSearchIndex.java +++ b/cameleer3-server-app/src/main/java/com/cameleer3/server/app/search/ClickHouseSearchIndex.java @@ -179,16 +179,17 @@ public class ClickHouseSearchIndex implements SearchIndex { params.add(request.durationMax()); } - // Global full-text search: ID fields, execution-level _search_text, OR processor-level _search_text + // Global full-text search: exact ID match, full-text on execution + processor level if (request.text() != null && !request.text().isBlank()) { - String likeTerm = "%" + escapeLike(request.text()) + "%"; - conditions.add("(execution_id LIKE ? OR correlation_id LIKE ? OR exchange_id LIKE ?" + String term = escapeLike(request.text()); + String likeTerm = "%" + term + "%"; + conditions.add("(execution_id = ? OR correlation_id = ? OR exchange_id = ?" + " OR _search_text LIKE ? OR execution_id IN (" + "SELECT DISTINCT execution_id FROM processor_executions " + "WHERE tenant_id = 'default' AND _search_text LIKE ?))"); - params.add(likeTerm); - params.add(likeTerm); - params.add(likeTerm); + params.add(term); + params.add(term); + params.add(term); params.add(likeTerm); params.add(likeTerm); }