diff --git a/plugin/storage/es/factory.go b/plugin/storage/es/factory.go index bad23bed879..e51cd75eac4 100644 --- a/plugin/storage/es/factory.go +++ b/plugin/storage/es/factory.go @@ -162,6 +162,7 @@ func createSpanReader( SpanIndexRolloverFrequency: cfg.GetIndexRolloverFrequencySpansDuration(), ServiceIndexRolloverFrequency: cfg.GetIndexRolloverFrequencyServicesDuration(), TagDotReplacement: cfg.Tags.DotReplacement, + AllTagsAsFields: cfg.Tags.AllAsFields, UseReadWriteAliases: cfg.UseReadWriteAliases, Archive: archive, RemoteReadClusters: cfg.RemoteReadClusters, diff --git a/plugin/storage/es/spanstore/reader.go b/plugin/storage/es/spanstore/reader.go index d21ba25c28c..d51f82d9d76 100644 --- a/plugin/storage/es/spanstore/reader.go +++ b/plugin/storage/es/spanstore/reader.go @@ -87,7 +87,7 @@ var ( objectTagFieldList = []string{objectTagsField, objectProcessTagsField} - nestedTagFieldList = []string{nestedTagsField, nestedProcessTagsField, nestedLogFieldsField} + nestedTagFieldList = []string{nestedTagsField, nestedProcessTagsField} ) // SpanReader can query for and load traces from ElasticSearch @@ -104,6 +104,7 @@ type SpanReader struct { spanIndexRolloverFrequency time.Duration serviceIndexRolloverFrequency time.Duration spanConverter dbmodel.ToDomain + allTagsAsFields bool timeRangeIndices timeRangeIndexFn sourceFn sourceFn maxDocCount int @@ -123,6 +124,7 @@ type SpanReaderParams struct { SpanIndexRolloverFrequency time.Duration ServiceIndexRolloverFrequency time.Duration TagDotReplacement string + AllTagsAsFields bool Archive bool UseReadWriteAliases bool RemoteReadClusters []string @@ -150,6 +152,7 @@ func NewSpanReader(p SpanReaderParams) *SpanReader { spanIndexRolloverFrequency: p.SpanIndexRolloverFrequency, serviceIndexRolloverFrequency: p.SpanIndexRolloverFrequency, spanConverter: dbmodel.NewToDomain(p.TagDotReplacement), + allTagsAsFields: p.AllTagsAsFields, timeRangeIndices: getTimeRangeIndexFn(p.Archive, p.UseReadWriteAliases, p.RemoteReadClusters), sourceFn: getSourceFn(p.Archive, p.MaxDocCount), maxDocCount: p.MaxDocCount, @@ -668,14 +671,18 @@ func (s *SpanReader) buildOperationNameQuery(operationName string) elastic.Query func (s *SpanReader) buildTagQuery(k string, v string) elastic.Query { objectTagListLen := len(objectTagFieldList) - queries := make([]elastic.Query, len(nestedTagFieldList)+objectTagListLen) + queries := make([]elastic.Query, objectTagListLen) kd := s.spanConverter.ReplaceDot(k) for i := range objectTagFieldList { queries[i] = s.buildObjectQuery(objectTagFieldList[i], kd, v) } - for i := range nestedTagFieldList { - queries[i+objectTagListLen] = s.buildNestedQuery(nestedTagFieldList[i], k, v) + if !s.allTagsAsFields { + for i := range nestedTagFieldList { + queries = append(queries, s.buildNestedQuery(nestedTagFieldList[i], k, v)) + } } + // Nested Logs Query + queries = append(queries, s.buildNestedQuery(nestedLogFieldsField, k, v)) // but configuration can change over time return elastic.NewBoolQuery().Should(queries...) diff --git a/plugin/storage/integration/elasticsearch_test.go b/plugin/storage/integration/elasticsearch_test.go index 7a750500c96..d7192d72bc6 100644 --- a/plugin/storage/integration/elasticsearch_test.go +++ b/plugin/storage/integration/elasticsearch_test.go @@ -168,6 +168,7 @@ func (s *ESStorageIntegration) initSpanstore(allTagsAsFields, archive bool) erro IndexPrefix: indexPrefix, MaxSpanAge: maxSpanAge, TagDotReplacement: tagKeyDeDotChar, + AllTagsAsFields: allTagsAsFields, Archive: archive, MaxDocCount: defaultMaxDocCount, Tracer: tracer.Tracer("test"),