From be7a0b598822e73d23e900e6883fb1ecb02b29fa Mon Sep 17 00:00:00 2001 From: flash Date: Sun, 21 Jun 2026 15:51:30 +0200 Subject: [PATCH] feat(search): freetext and name queries include metadata fields MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Freetext queries (no field prefix) now search the _all field instead of only Name. This includes dynamic Metadata fields indexed by #2987, making custom metadata like file references discoverable. Name queries (sent by Web UI as name:"*term*") are expanded to a disjunction: Name:*term* OR _all:term — so searching for metadata values like "11.12.01" returns matching resources. --- services/search/pkg/query/bleve/compiler.go | 22 ++++++++++++++++--- .../search/pkg/query/bleve/compiler_test.go | 4 ++-- 2 files changed, 21 insertions(+), 5 deletions(-) diff --git a/services/search/pkg/query/bleve/compiler.go b/services/search/pkg/query/bleve/compiler.go index 310397cae6..d1cdef2ef5 100644 --- a/services/search/pkg/query/bleve/compiler.go +++ b/services/search/pkg/query/bleve/compiler.go @@ -102,7 +102,10 @@ func walk(offset int, nodes []ast.Node) (bleveQuery.Query, int, error) { v = bleveEscaper.Replace(n.Value) } - if _, ok := lowercaseFields[k]; ok { + if k == "" { + // Freetext: lowercase for _all field matching + v = strings.ToLower(v) + } else if _, ok := lowercaseFields[k]; ok { v = strings.ToLower(v) } @@ -115,7 +118,20 @@ func walk(offset int, nodes []ast.Node) (bleveQuery.Query, int, error) { isGroup = group } default: - q = bleveQuery.NewQueryStringQuery(k + ":" + v) + if k == "" { + q = bleveQuery.NewQueryStringQuery(v) + } else if k == "Name" { + // Also search Metadata fields when searching by name + nameQ := bleveQuery.NewQueryStringQuery(k + ":" + v) + metaQ := bleveQuery.NewQueryStringQuery(strings.ToLower(strings.Trim(v, `*\"`))) + q = bleveQuery.NewDisjunctionQuery([]bleveQuery.Query{nameQ, metaQ}) + group = true + if prev == nil { + isGroup = true + } + } else { + q = bleveQuery.NewQueryStringQuery(k + ":" + v) + } } if prev == nil { @@ -279,7 +295,7 @@ func mapBinary(operator *ast.OperatorNode, ln, rn bleveQuery.Query, leftIsGroup func getField(name string) string { if name == "" { - return "Name" + return "" } if _, ok := _fields[strings.ToLower(name)]; ok { return _fields[strings.ToLower(name)] diff --git a/services/search/pkg/query/bleve/compiler_test.go b/services/search/pkg/query/bleve/compiler_test.go index ff94e88726..c0c334cae7 100644 --- a/services/search/pkg/query/bleve/compiler_test.go +++ b/services/search/pkg/query/bleve/compiler_test.go @@ -33,7 +33,7 @@ func Test_compile(t *testing.T) { }, }, want: query.NewConjunctionQuery([]query.Query{ - query.NewQueryStringQuery(`Name:federated`), + query.NewQueryStringQuery(`federated`), }), wantErr: false, }, @@ -45,7 +45,7 @@ func Test_compile(t *testing.T) { }, }, want: query.NewConjunctionQuery([]query.Query{ - query.NewQueryStringQuery(`Name:john\ smith`), + query.NewQueryStringQuery(`john\ smith`), }), wantErr: false, },