From 5455b5bbad9bff0399bbde204108da667b60fead Mon Sep 17 00:00:00 2001 From: Dimitrios Athanasiou Date: Tue, 29 Nov 2016 16:43:58 +0000 Subject: [PATCH] Fix result mappings Original commit: elastic/x-pack-elasticsearch@e63209af98824724633a936baa9d4d4fd8cd59d2 --- .../persistence/ElasticsearchMappings.java | 352 +++++++++--------- 1 file changed, 179 insertions(+), 173 deletions(-) diff --git a/elasticsearch/src/main/java/org/elasticsearch/xpack/prelert/job/persistence/ElasticsearchMappings.java b/elasticsearch/src/main/java/org/elasticsearch/xpack/prelert/job/persistence/ElasticsearchMappings.java index a54d701853b..6b73e72b6b7 100644 --- a/elasticsearch/src/main/java/org/elasticsearch/xpack/prelert/job/persistence/ElasticsearchMappings.java +++ b/elasticsearch/src/main/java/org/elasticsearch/xpack/prelert/job/persistence/ElasticsearchMappings.java @@ -110,106 +110,111 @@ public class ElasticsearchMappings { public static XContentBuilder resultsMapping(Collection termFieldNames) throws IOException { XContentBuilder builder = jsonBuilder() .startObject() - .startObject(Result.TYPE.getPreferredName()) - .startObject(ALL) - .field(ENABLED, false) - // analyzer must be specified even though _all is disabled - // because all types in the same index must have the same - // analyzer for a given field - .field(ANALYZER, WHITESPACE) - .endObject() - .startObject(PROPERTIES) - .startObject(Result.RESULT_TYPE.getPreferredName()) - .field(TYPE, KEYWORD) - .endObject() - .startObject(Job.ID.getPreferredName()) - .field(TYPE, KEYWORD) - .endObject() - .startObject(ES_TIMESTAMP) - .field(TYPE, DATE) - .endObject() - .startObject(Bucket.ANOMALY_SCORE.getPreferredName()) - .field(TYPE, DOUBLE) - .endObject() - .startObject(Bucket.INITIAL_ANOMALY_SCORE.getPreferredName()) - .field(TYPE, DOUBLE) - .endObject() - .startObject(Bucket.MAX_NORMALIZED_PROBABILITY.getPreferredName()) - .field(TYPE, DOUBLE) - .endObject() - .startObject(Bucket.IS_INTERIM.getPreferredName()) - .field(TYPE, BOOLEAN) - .endObject() - .startObject(Bucket.RECORD_COUNT.getPreferredName()) - .field(TYPE, LONG) - .endObject() - .startObject(Bucket.EVENT_COUNT.getPreferredName()) - .field(TYPE, LONG) - .endObject() - .startObject(Bucket.BUCKET_SPAN.getPreferredName()) - .field(TYPE, LONG) - .endObject() - .startObject(Bucket.PROCESSING_TIME_MS.getPreferredName()) - .field(TYPE, LONG) - .endObject() - .startObject(Bucket.PARTITION_SCORES.getPreferredName()) - .field(TYPE, NESTED) - .startObject(PROPERTIES) - .startObject(AnomalyRecord.PARTITION_FIELD_NAME.getPreferredName()) - .field(TYPE, KEYWORD) - .endObject() - .startObject(AnomalyRecord.PARTITION_FIELD_VALUE.getPreferredName()) - .field(TYPE, KEYWORD) - .endObject() - .startObject(AnomalyRecord.ANOMALY_SCORE.getPreferredName()) - .field(TYPE, DOUBLE) - .endObject() - .startObject(AnomalyRecord.PROBABILITY.getPreferredName()) - .field(TYPE, DOUBLE) - .endObject() - .startObject(Bucket.PARTITION_SCORES.getPreferredName()) - .field(TYPE, NESTED) - .startObject(PROPERTIES) - .startObject(AnomalyRecord.PARTITION_FIELD_NAME.getPreferredName()) - .field(TYPE, KEYWORD) - .endObject() - .startObject(AnomalyRecord.PARTITION_FIELD_VALUE.getPreferredName()) - .field(TYPE, KEYWORD) - .endObject() - .startObject(AnomalyRecord.ANOMALY_SCORE.getPreferredName()) - .field(TYPE, DOUBLE) - .endObject() - .startObject(AnomalyRecord.PROBABILITY.getPreferredName()) - .field(TYPE, DOUBLE) - .endObject() - .endObject() - .endObject() + .startObject(Result.TYPE.getPreferredName()) + .startObject(ALL) + .field(ENABLED, false) + // analyzer must be specified even though _all is disabled + // because all types in the same index must have the same + // analyzer for a given field + .field(ANALYZER, WHITESPACE) + .endObject() + .startObject(PROPERTIES) + .startObject(Result.RESULT_TYPE.getPreferredName()) + .field(TYPE, KEYWORD) + .endObject() + .startObject(Job.ID.getPreferredName()) + .field(TYPE, KEYWORD) + .endObject() + .startObject(ES_TIMESTAMP) + .field(TYPE, DATE) + .endObject() + .startObject(Bucket.ANOMALY_SCORE.getPreferredName()) + .field(TYPE, DOUBLE) + .endObject() + .startObject(Bucket.INITIAL_ANOMALY_SCORE.getPreferredName()) + .field(TYPE, DOUBLE) + .endObject() + .startObject(Bucket.MAX_NORMALIZED_PROBABILITY.getPreferredName()) + .field(TYPE, DOUBLE) + .endObject() + .startObject(Bucket.IS_INTERIM.getPreferredName()) + .field(TYPE, BOOLEAN) + .endObject() + .startObject(Bucket.RECORD_COUNT.getPreferredName()) + .field(TYPE, LONG) + .endObject() + .startObject(Bucket.EVENT_COUNT.getPreferredName()) + .field(TYPE, LONG) + .endObject() + .startObject(Bucket.BUCKET_SPAN.getPreferredName()) + .field(TYPE, LONG) + .endObject() + .startObject(Bucket.PROCESSING_TIME_MS.getPreferredName()) + .field(TYPE, LONG) + .endObject() + .startObject(Bucket.PARTITION_SCORES.getPreferredName()) + .field(TYPE, NESTED) + .startObject(PROPERTIES) + .startObject(AnomalyRecord.PARTITION_FIELD_NAME.getPreferredName()) + .field(TYPE, KEYWORD) + .endObject() + .startObject(AnomalyRecord.PARTITION_FIELD_VALUE.getPreferredName()) + .field(TYPE, KEYWORD) + .endObject() + .startObject(AnomalyRecord.ANOMALY_SCORE.getPreferredName()) + .field(TYPE, DOUBLE) + .endObject() + .startObject(AnomalyRecord.PROBABILITY.getPreferredName()) + .field(TYPE, DOUBLE) + .endObject() + .startObject(Bucket.PARTITION_SCORES.getPreferredName()) + .field(TYPE, NESTED) + .startObject(PROPERTIES) + .startObject(AnomalyRecord.PARTITION_FIELD_NAME.getPreferredName()) + .field(TYPE, KEYWORD) + .endObject() + .startObject(AnomalyRecord.PARTITION_FIELD_VALUE.getPreferredName()) + .field(TYPE, KEYWORD) + .endObject() + .startObject(AnomalyRecord.ANOMALY_SCORE.getPreferredName()) + .field(TYPE, DOUBLE) + .endObject() + .startObject(AnomalyRecord.PROBABILITY.getPreferredName()) + .field(TYPE, DOUBLE) + .endObject() + .endObject() + .endObject() + .endObject() + .endObject() - // bucket influencer mapping - .startObject(BucketInfluencer.INFLUENCER_FIELD_NAME.getPreferredName()) - .field(TYPE, KEYWORD) - .endObject() - .startObject(BucketInfluencer.RAW_ANOMALY_SCORE.getPreferredName()) - .field(TYPE, DOUBLE) - .endObject() + .startObject(Bucket.BUCKET_INFLUENCERS.getPreferredName()) + .field(TYPE, NESTED) + .startObject(PROPERTIES) + .startObject(BucketInfluencer.INFLUENCER_FIELD_NAME.getPreferredName()) + .field(TYPE, KEYWORD) + .endObject() + .startObject(BucketInfluencer.RAW_ANOMALY_SCORE.getPreferredName()) + .field(TYPE, DOUBLE) + .endObject() + .endObject() + .endObject() + .startObject(BucketInfluencer.INFLUENCER_FIELD_NAME.getPreferredName()) + .field(TYPE, KEYWORD) + .endObject() - // influencer mapping - .startObject(Influencer.INFLUENCER_FIELD_VALUE.getPreferredName()) - .field(TYPE, KEYWORD) - .endObject() - // per-partition max probabilities mapping - .startObject(PerPartitionMaxProbabilities.PER_PARTITION_MAX_PROBABILITIES.getPreferredName()) - .field(TYPE, NESTED) - .startObject(PROPERTIES) - .startObject(AnomalyRecord.PARTITION_FIELD_VALUE.getPreferredName()) - .field(TYPE, KEYWORD) - .endObject() - .startObject(Bucket.MAX_NORMALIZED_PROBABILITY.getPreferredName()) - .field(TYPE, DOUBLE) - .endObject() - .endObject() - .endObject(); + // per-partition max probabilities mapping + .startObject(PerPartitionMaxProbabilities.PER_PARTITION_MAX_PROBABILITIES.getPreferredName()) + .field(TYPE, NESTED) + .startObject(PROPERTIES) + .startObject(AnomalyRecord.PARTITION_FIELD_VALUE.getPreferredName()) + .field(TYPE, KEYWORD) + .endObject() + .startObject(Bucket.MAX_NORMALIZED_PROBABILITY.getPreferredName()) + .field(TYPE, DOUBLE) + .endObject() + .endObject() + .endObject(); addAnomalyRecordFieldsToMapping(builder); @@ -223,11 +228,12 @@ public class ElasticsearchMappings { } } - builder.endObject() - .endObject() - .endObject() - .endObject() - .endObject(); + // End result properties + builder.endObject(); + // End result + builder.endObject(); + // End mapping + builder.endObject(); return builder; } @@ -238,109 +244,109 @@ public class ElasticsearchMappings { * @return builder * @throws IOException On write error */ - private static XContentBuilder addAnomalyRecordFieldsToMapping(XContentBuilder builder) + private static XContentBuilder addAnomalyRecordFieldsToMapping(XContentBuilder builder) throws IOException { builder.startObject(AnomalyRecord.DETECTOR_INDEX.getPreferredName()) - .field(TYPE, INTEGER).field(INCLUDE_IN_ALL, false) - .endObject() - .startObject(AnomalyRecord.ACTUAL.getPreferredName()) - .field(TYPE, DOUBLE).field(INCLUDE_IN_ALL, false) - .endObject() - .startObject(AnomalyRecord.TYPICAL.getPreferredName()) - .field(TYPE, DOUBLE).field(INCLUDE_IN_ALL, false) - .endObject() - .startObject(AnomalyRecord.PROBABILITY.getPreferredName()) - .field(TYPE, DOUBLE).field(INCLUDE_IN_ALL, false) - .endObject() - .startObject(AnomalyRecord.FUNCTION.getPreferredName()) - .field(TYPE, KEYWORD).field(INCLUDE_IN_ALL, false) - .endObject() - .startObject(AnomalyRecord.FUNCTION_DESCRIPTION.getPreferredName()) - .field(TYPE, KEYWORD).field(INCLUDE_IN_ALL, false) - .endObject() - .startObject(AnomalyRecord.BY_FIELD_NAME.getPreferredName()) - .field(TYPE, KEYWORD).field(INCLUDE_IN_ALL, false) - .endObject() - .startObject(AnomalyRecord.BY_FIELD_VALUE.getPreferredName()) - .field(TYPE, KEYWORD) - .endObject() - .startObject(AnomalyRecord.FIELD_NAME.getPreferredName()) - .field(TYPE, KEYWORD).field(INCLUDE_IN_ALL, false) - .endObject() - .startObject(AnomalyRecord.PARTITION_FIELD_NAME.getPreferredName()) - .field(TYPE, KEYWORD).field(INCLUDE_IN_ALL, false) - .endObject() - .startObject(AnomalyRecord.PARTITION_FIELD_VALUE.getPreferredName()) - .field(TYPE, KEYWORD) - .endObject() - .startObject(AnomalyRecord.OVER_FIELD_NAME.getPreferredName()) - .field(TYPE, KEYWORD).field(INCLUDE_IN_ALL, false) - .endObject() - .startObject(AnomalyRecord.OVER_FIELD_VALUE.getPreferredName()) - .field(TYPE, KEYWORD) - .endObject() - .startObject(AnomalyRecord.NORMALIZED_PROBABILITY.getPreferredName()) - .field(TYPE, DOUBLE).field(INCLUDE_IN_ALL, false) - .endObject() - .startObject(AnomalyRecord.INITIAL_NORMALIZED_PROBABILITY.getPreferredName()) - .field(TYPE, DOUBLE).field(INCLUDE_IN_ALL, false) - .endObject() - .startObject(AnomalyRecord.CAUSES.getPreferredName()) - .field(TYPE, NESTED) - .startObject(PROPERTIES) + .field(TYPE, INTEGER).field(INCLUDE_IN_ALL, false) + .endObject() + .startObject(AnomalyRecord.ACTUAL.getPreferredName()) + .field(TYPE, DOUBLE).field(INCLUDE_IN_ALL, false) + .endObject() + .startObject(AnomalyRecord.TYPICAL.getPreferredName()) + .field(TYPE, DOUBLE).field(INCLUDE_IN_ALL, false) + .endObject() + .startObject(AnomalyRecord.PROBABILITY.getPreferredName()) + .field(TYPE, DOUBLE).field(INCLUDE_IN_ALL, false) + .endObject() + .startObject(AnomalyRecord.FUNCTION.getPreferredName()) + .field(TYPE, KEYWORD).field(INCLUDE_IN_ALL, false) + .endObject() + .startObject(AnomalyRecord.FUNCTION_DESCRIPTION.getPreferredName()) + .field(TYPE, KEYWORD).field(INCLUDE_IN_ALL, false) + .endObject() + .startObject(AnomalyRecord.BY_FIELD_NAME.getPreferredName()) + .field(TYPE, KEYWORD).field(INCLUDE_IN_ALL, false) + .endObject() + .startObject(AnomalyRecord.BY_FIELD_VALUE.getPreferredName()) + .field(TYPE, KEYWORD) + .endObject() + .startObject(AnomalyRecord.FIELD_NAME.getPreferredName()) + .field(TYPE, KEYWORD).field(INCLUDE_IN_ALL, false) + .endObject() + .startObject(AnomalyRecord.PARTITION_FIELD_NAME.getPreferredName()) + .field(TYPE, KEYWORD).field(INCLUDE_IN_ALL, false) + .endObject() + .startObject(AnomalyRecord.PARTITION_FIELD_VALUE.getPreferredName()) + .field(TYPE, KEYWORD) + .endObject() + .startObject(AnomalyRecord.OVER_FIELD_NAME.getPreferredName()) + .field(TYPE, KEYWORD).field(INCLUDE_IN_ALL, false) + .endObject() + .startObject(AnomalyRecord.OVER_FIELD_VALUE.getPreferredName()) + .field(TYPE, KEYWORD) + .endObject() + .startObject(AnomalyRecord.NORMALIZED_PROBABILITY.getPreferredName()) + .field(TYPE, DOUBLE).field(INCLUDE_IN_ALL, false) + .endObject() + .startObject(AnomalyRecord.INITIAL_NORMALIZED_PROBABILITY.getPreferredName()) + .field(TYPE, DOUBLE).field(INCLUDE_IN_ALL, false) + .endObject() + .startObject(AnomalyRecord.CAUSES.getPreferredName()) + .field(TYPE, NESTED) + .startObject(PROPERTIES) .startObject(AnomalyCause.ACTUAL.getPreferredName()) - .field(TYPE, DOUBLE).field(INCLUDE_IN_ALL, false) + .field(TYPE, DOUBLE).field(INCLUDE_IN_ALL, false) .endObject() .startObject(AnomalyCause.TYPICAL.getPreferredName()) - .field(TYPE, DOUBLE).field(INCLUDE_IN_ALL, false) + .field(TYPE, DOUBLE).field(INCLUDE_IN_ALL, false) .endObject() .startObject(AnomalyCause.PROBABILITY.getPreferredName()) - .field(TYPE, DOUBLE).field(INCLUDE_IN_ALL, false) + .field(TYPE, DOUBLE).field(INCLUDE_IN_ALL, false) .endObject() .startObject(AnomalyCause.FUNCTION.getPreferredName()) - .field(TYPE, KEYWORD).field(INCLUDE_IN_ALL, false) + .field(TYPE, KEYWORD).field(INCLUDE_IN_ALL, false) .endObject() .startObject(AnomalyCause.FUNCTION_DESCRIPTION.getPreferredName()) - .field(TYPE, KEYWORD).field(INCLUDE_IN_ALL, false) + .field(TYPE, KEYWORD).field(INCLUDE_IN_ALL, false) .endObject() .startObject(AnomalyCause.BY_FIELD_NAME.getPreferredName()) - .field(TYPE, KEYWORD).field(INCLUDE_IN_ALL, false) + .field(TYPE, KEYWORD).field(INCLUDE_IN_ALL, false) .endObject() .startObject(AnomalyCause.BY_FIELD_VALUE.getPreferredName()) - .field(TYPE, KEYWORD) + .field(TYPE, KEYWORD) .endObject() .startObject(AnomalyCause.CORRELATED_BY_FIELD_VALUE.getPreferredName()) - .field(TYPE, KEYWORD) + .field(TYPE, KEYWORD) .endObject() .startObject(AnomalyCause.FIELD_NAME.getPreferredName()) - .field(TYPE, KEYWORD).field(INCLUDE_IN_ALL, false) + .field(TYPE, KEYWORD).field(INCLUDE_IN_ALL, false) .endObject() .startObject(AnomalyCause.PARTITION_FIELD_NAME.getPreferredName()) - .field(TYPE, KEYWORD).field(INCLUDE_IN_ALL, false) + .field(TYPE, KEYWORD).field(INCLUDE_IN_ALL, false) .endObject() .startObject(AnomalyCause.PARTITION_FIELD_VALUE.getPreferredName()) - .field(TYPE, KEYWORD) + .field(TYPE, KEYWORD) .endObject() .startObject(AnomalyCause.OVER_FIELD_NAME.getPreferredName()) - .field(TYPE, KEYWORD).field(INCLUDE_IN_ALL, false) + .field(TYPE, KEYWORD).field(INCLUDE_IN_ALL, false) .endObject() .startObject(AnomalyCause.OVER_FIELD_VALUE.getPreferredName()) - .field(TYPE, KEYWORD) + .field(TYPE, KEYWORD) .endObject() - .endObject() - .endObject() - .startObject(AnomalyRecord.INFLUENCERS.getPreferredName()) - /* Array of influences */ - .field(TYPE, NESTED) - .startObject(PROPERTIES) + .endObject() + .endObject() + .startObject(AnomalyRecord.INFLUENCERS.getPreferredName()) + /* Array of influences */ + .field(TYPE, NESTED) + .startObject(PROPERTIES) .startObject(Influence.INFLUENCER_FIELD_NAME.getPreferredName()) - .field(TYPE, KEYWORD).field(INCLUDE_IN_ALL, false) + .field(TYPE, KEYWORD).field(INCLUDE_IN_ALL, false) .endObject() .startObject(Influence.INFLUENCER_FIELD_VALUES.getPreferredName()) - .field(TYPE, KEYWORD) + .field(TYPE, KEYWORD) .endObject() - .endObject() - .endObject(); + .endObject() + .endObject(); return builder; }