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:

Reply via email to