diff --git a/oap-server/server-core/src/main/java/org/apache/skywalking/oap/server/core/analysis/topn/TopN.java b/oap-server/server-core/src/main/java/org/apache/skywalking/oap/server/core/analysis/topn/TopN.java index fae8298b6bff491a2404e3cb62b6b192cd5258d9..eede0197c582268e917966c1299aeaf1044174d2 100644 --- a/oap-server/server-core/src/main/java/org/apache/skywalking/oap/server/core/analysis/topn/TopN.java +++ b/oap-server/server-core/src/main/java/org/apache/skywalking/oap/server/core/analysis/topn/TopN.java @@ -34,7 +34,7 @@ public abstract class TopN extends Record implements ComparableStorageData { public static final String TRACE_ID = "trace_id"; public static final String SERVICE_ID = "service_id"; - @Getter @Setter @Column(columnName = STATEMENT) private String statement; + @Getter @Setter @Column(columnName = STATEMENT, content = true) private String statement; @Getter @Setter @Column(columnName = LATENCY) private long latency; @Getter @Setter @Column(columnName = TRACE_ID) private String traceId; @Getter @Setter @Column(columnName = SERVICE_ID) private int serviceId; diff --git a/oap-server/server-core/src/main/java/org/apache/skywalking/oap/server/core/storage/annotation/Column.java b/oap-server/server-core/src/main/java/org/apache/skywalking/oap/server/core/storage/annotation/Column.java index df4a45a5a94b15edf9d151af287776ea8bfa5ff6..4e3f880d83a3095ce1522d31942585a7b2eed444 100644 --- a/oap-server/server-core/src/main/java/org/apache/skywalking/oap/server/core/storage/annotation/Column.java +++ b/oap-server/server-core/src/main/java/org/apache/skywalking/oap/server/core/storage/annotation/Column.java @@ -29,9 +29,23 @@ import org.apache.skywalking.oap.server.core.query.sql.Function; public @interface Column { String columnName(); + /** + * The column value is used in metrics value query. + */ boolean isValue() default false; + /** + * The function is used in aggregation query. + */ Function function() default Function.None; + /** + * Match query means using analyzer(if storage have) to do key word match query. + */ boolean matchQuery() default false; + + /** + * The column is just saved, never used in query. + */ + boolean content() default false; } diff --git a/oap-server/server-core/src/main/java/org/apache/skywalking/oap/server/core/storage/model/ModelColumn.java b/oap-server/server-core/src/main/java/org/apache/skywalking/oap/server/core/storage/model/ModelColumn.java index 763791b8a124f7abd72d4feb458127891ec9676b..6627542357916dc4395f632eda7490ca3074f44d 100644 --- a/oap-server/server-core/src/main/java/org/apache/skywalking/oap/server/core/storage/model/ModelColumn.java +++ b/oap-server/server-core/src/main/java/org/apache/skywalking/oap/server/core/storage/model/ModelColumn.java @@ -28,10 +28,12 @@ public class ModelColumn { private final ColumnName columnName; private final Class type; private final boolean matchQuery; + private final boolean content; - public ModelColumn(ColumnName columnName, Class type, boolean matchQuery) { + public ModelColumn(ColumnName columnName, Class type, boolean matchQuery, boolean content) { this.columnName = columnName; this.type = type; this.matchQuery = matchQuery; + this.content = content; } } diff --git a/oap-server/server-core/src/main/java/org/apache/skywalking/oap/server/core/storage/model/StorageModels.java b/oap-server/server-core/src/main/java/org/apache/skywalking/oap/server/core/storage/model/StorageModels.java index 6e9f572c6f414f9f02acad1f40b04c5f1649025a..2642523f1d7e940b5937e91f765849b0c9e71cbb 100644 --- a/oap-server/server-core/src/main/java/org/apache/skywalking/oap/server/core/storage/model/StorageModels.java +++ b/oap-server/server-core/src/main/java/org/apache/skywalking/oap/server/core/storage/model/StorageModels.java @@ -62,7 +62,7 @@ public class StorageModels implements IModelGetter, IModelSetter, IModelOverride for (Field field : fields) { if (field.isAnnotationPresent(Column.class)) { Column column = field.getAnnotation(Column.class); - modelColumns.add(new ModelColumn(new ColumnName(column.columnName()), field.getType(), column.matchQuery())); + modelColumns.add(new ModelColumn(new ColumnName(column.columnName()), field.getType(), column.matchQuery(), column.content())); if (logger.isDebugEnabled()) { logger.debug("The field named {} with the {} type", column.columnName(), field.getType()); } diff --git a/oap-server/server-storage-plugin/storage-elasticsearch-plugin/src/main/java/org/apache/skywalking/oap/server/storage/plugin/elasticsearch/base/StorageEsInstaller.java b/oap-server/server-storage-plugin/storage-elasticsearch-plugin/src/main/java/org/apache/skywalking/oap/server/storage/plugin/elasticsearch/base/StorageEsInstaller.java index 7e9f006b2c2932544ec88c93f43dbd884d557438..2661c8f18fc657fe4c1958f658b51fa2dbf6e89c 100644 --- a/oap-server/server-storage-plugin/storage-elasticsearch-plugin/src/main/java/org/apache/skywalking/oap/server/storage/plugin/elasticsearch/base/StorageEsInstaller.java +++ b/oap-server/server-storage-plugin/storage-elasticsearch-plugin/src/main/java/org/apache/skywalking/oap/server/storage/plugin/elasticsearch/base/StorageEsInstaller.java @@ -125,6 +125,11 @@ public class StorageEsInstaller extends ModelInstaller { matchColumn.addProperty("type", "text"); matchColumn.addProperty("analyzer", "oap_analyzer"); properties.add(matchCName, matchColumn); + } else if (columnDefine.isContent()) { + JsonObject column = new JsonObject(); + column.addProperty("type", "text"); + column.addProperty("index", false); + properties.add(columnDefine.getColumnName().getName(), column); } else { JsonObject column = new JsonObject(); column.addProperty("type", columnTypeEsMapping.transform(columnDefine.getType()));