This is an automated email from the ASF dual-hosted git repository. wusheng pushed a commit to branch master in repository https://gitbox.apache.org/repos/asf/skywalking.git
The following commit(s) were added to refs/heads/master by this push: new ce707a4d52 Specific only necessary fields when queryBasicTraces in ElasticSearch (#11419) ce707a4d52 is described below commit ce707a4d52e05bb22cacf8aadec9b1548cf0b783 Author: dogblues <jonah....@outlook.com> AuthorDate: Wed Oct 18 14:21:58 2023 +0800 Specific only necessary fields when queryBasicTraces in ElasticSearch (#11419) --- docs/en/changes/changes.md | 1 + .../elasticsearch/requests/search/Search.java | 4 ++++ .../requests/search/SearchBuilder.java | 23 +++++++++++++++++++++- .../elasticsearch/query/TraceQueryEsDAO.java | 10 +++++++++- 4 files changed, 36 insertions(+), 2 deletions(-) diff --git a/docs/en/changes/changes.md b/docs/en/changes/changes.md index ee373c3ae8..06441d0119 100644 --- a/docs/en/changes/changes.md +++ b/docs/en/changes/changes.md @@ -23,6 +23,7 @@ * Adjust `AlarmRecord` alarmMessage column length to 512. * Fix `EventHookCallback` build event: build the layer from `Service's Layer`. * Fix `AlarmCore` doAlarm: catch exception for each callback to avoid interruption. +* Optimize queryBasicTraces in TraceQueryEsDAO. #### UI diff --git a/oap-server/server-library/library-elasticsearch-client/src/main/java/org/apache/skywalking/library/elasticsearch/requests/search/Search.java b/oap-server/server-library/library-elasticsearch-client/src/main/java/org/apache/skywalking/library/elasticsearch/requests/search/Search.java index 7b0aec8a08..a31f51bd2f 100644 --- a/oap-server/server-library/library-elasticsearch-client/src/main/java/org/apache/skywalking/library/elasticsearch/requests/search/Search.java +++ b/oap-server/server-library/library-elasticsearch-client/src/main/java/org/apache/skywalking/library/elasticsearch/requests/search/Search.java @@ -17,6 +17,8 @@ package org.apache.skywalking.library.elasticsearch.requests.search; +import com.fasterxml.jackson.annotation.JsonProperty; +import com.google.common.collect.ImmutableList; import com.google.common.collect.ImmutableMap; import lombok.AccessLevel; import lombok.Getter; @@ -33,6 +35,8 @@ import org.apache.skywalking.library.elasticsearch.requests.search.aggregation.A public final class Search { private final Integer from; private final Integer size; + @JsonProperty("_source") + private final ImmutableList<String> source; private final Query query; private final Sorts sort; private final ImmutableMap<String, Aggregation> aggregations; diff --git a/oap-server/server-library/library-elasticsearch-client/src/main/java/org/apache/skywalking/library/elasticsearch/requests/search/SearchBuilder.java b/oap-server/server-library/library-elasticsearch-client/src/main/java/org/apache/skywalking/library/elasticsearch/requests/search/SearchBuilder.java index b856b43def..8af46a6338 100644 --- a/oap-server/server-library/library-elasticsearch-client/src/main/java/org/apache/skywalking/library/elasticsearch/requests/search/SearchBuilder.java +++ b/oap-server/server-library/library-elasticsearch-client/src/main/java/org/apache/skywalking/library/elasticsearch/requests/search/SearchBuilder.java @@ -31,6 +31,7 @@ public final class SearchBuilder { private Integer from; private Integer size; private QueryBuilder queryBuilder; + private ImmutableList.Builder<String> source; private ImmutableList.Builder<Sort> sort; private ImmutableMap.Builder<String, Aggregation> aggregations; @@ -58,6 +59,12 @@ public final class SearchBuilder { return this; } + public SearchBuilder source(String field) { + checkArgument(!Strings.isNullOrEmpty(field), "field cannot be blank"); + source().add(field); + return this; + } + public SearchBuilder query(QueryBuilder queryBuilder) { checkState(this.queryBuilder == null, "queryBuilder is already set"); this.queryBuilder = requireNonNull(queryBuilder, "queryBuilder"); @@ -83,6 +90,13 @@ public final class SearchBuilder { sorts = new Sorts(sort.build()); } + final ImmutableList<String> source; + if (this.source == null) { + source = null; + } else { + source = source().build(); + } + final ImmutableMap<String, Aggregation> aggregations; if (this.aggregations == null) { aggregations = null; @@ -97,10 +111,17 @@ public final class SearchBuilder { } return new Search( - from, size, query, sorts, aggregations + from, size, source, query, sorts, aggregations ); } + private ImmutableList.Builder<String> source() { + if (source == null) { + source = ImmutableList.builder(); + } + return source; + } + private ImmutableList.Builder<Sort> sort() { if (sort == null) { sort = ImmutableList.builder(); diff --git a/oap-server/server-storage-plugin/storage-elasticsearch-plugin/src/main/java/org/apache/skywalking/oap/server/storage/plugin/elasticsearch/query/TraceQueryEsDAO.java b/oap-server/server-storage-plugin/storage-elasticsearch-plugin/src/main/java/org/apache/skywalking/oap/server/storage/plugin/elasticsearch/query/TraceQueryEsDAO.java index c8fdb2eef6..cbf732cf49 100644 --- a/oap-server/server-storage-plugin/storage-elasticsearch-plugin/src/main/java/org/apache/skywalking/oap/server/storage/plugin/elasticsearch/query/TraceQueryEsDAO.java +++ b/oap-server/server-storage-plugin/storage-elasticsearch-plugin/src/main/java/org/apache/skywalking/oap/server/storage/plugin/elasticsearch/query/TraceQueryEsDAO.java @@ -122,7 +122,15 @@ public class TraceQueryEsDAO extends EsDAO implements ITraceQueryDAO { break; } - final SearchBuilder search = Search.builder().query(query); + final SearchBuilder search = + Search.builder() + .query(query) + .source(SegmentRecord.TRACE_ID) + .source(SegmentRecord.SEGMENT_ID) + .source(SegmentRecord.ENDPOINT_ID) + .source(SegmentRecord.START_TIME) + .source(SegmentRecord.LATENCY) + .source(SegmentRecord.IS_ERROR); switch (queryOrder) { case BY_START_TIME: