From 9aa78f681dc620d9a6ebac60e841d5106f6082bf Mon Sep 17 00:00:00 2001 From: hsiegeln <37154749+hsiegeln@users.noreply.github.com> Date: Thu, 26 Mar 2026 10:45:14 +0100 Subject: [PATCH] fix: use .keyword suffix for MDC exchangeId term query Dynamically mapped string fields in OpenSearch are multi-field (text + keyword). Term queries require the .keyword sub-field for exact matching. Co-Authored-By: Claude Opus 4.6 (1M context) --- .../com/cameleer3/server/app/search/OpenSearchLogIndex.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/cameleer3-server-app/src/main/java/com/cameleer3/server/app/search/OpenSearchLogIndex.java b/cameleer3-server-app/src/main/java/com/cameleer3/server/app/search/OpenSearchLogIndex.java index 4bf970f9..42f1201f 100644 --- a/cameleer3-server-app/src/main/java/com/cameleer3/server/app/search/OpenSearchLogIndex.java +++ b/cameleer3-server-app/src/main/java/com/cameleer3/server/app/search/OpenSearchLogIndex.java @@ -113,7 +113,7 @@ public class OpenSearchLogIndex { // Match on top-level field (new records) or MDC nested field (old records) bool.must(Query.of(q -> q.bool(b -> b .should(Query.of(s -> s.term(t -> t.field("exchangeId").value(FieldValue.of(exchangeId))))) - .should(Query.of(s -> s.term(t -> t.field("mdc.camel.exchangeId").value(FieldValue.of(exchangeId))))) + .should(Query.of(s -> s.term(t -> t.field("mdc.camel.exchangeId.keyword").value(FieldValue.of(exchangeId))))) .minimumShouldMatch("1")))); } if (level != null && !level.isEmpty()) {