store the doc type in the internal index (#39824)
store the doc type in the internal data frame index
This commit is contained in:
parent
5d68143b18
commit
50d742320d
|
@ -23,6 +23,7 @@ public final class DataFrameField {
|
||||||
public static final ParseField TIMEOUT = new ParseField("timeout");
|
public static final ParseField TIMEOUT = new ParseField("timeout");
|
||||||
public static final ParseField WAIT_FOR_COMPLETION = new ParseField("wait_for_completion");
|
public static final ParseField WAIT_FOR_COMPLETION = new ParseField("wait_for_completion");
|
||||||
public static final ParseField STATS_FIELD = new ParseField("stats");
|
public static final ParseField STATS_FIELD = new ParseField("stats");
|
||||||
|
public static final ParseField INDEX_DOC_TYPE = new ParseField("doc_type");
|
||||||
|
|
||||||
// common strings
|
// common strings
|
||||||
public static final String TASK_NAME = "data_frame/transforms";
|
public static final String TASK_NAME = "data_frame/transforms";
|
||||||
|
|
|
@ -36,7 +36,7 @@ import static org.elasticsearch.common.xcontent.ConstructingObjectParser.optiona
|
||||||
*/
|
*/
|
||||||
public class DataFrameTransformConfig extends AbstractDiffable<DataFrameTransformConfig> implements Writeable, ToXContentObject {
|
public class DataFrameTransformConfig extends AbstractDiffable<DataFrameTransformConfig> implements Writeable, ToXContentObject {
|
||||||
|
|
||||||
private static final String NAME = "data_frame_transform";
|
private static final String NAME = "data_frame_transform_config";
|
||||||
public static final ParseField HEADERS = new ParseField("headers");
|
public static final ParseField HEADERS = new ParseField("headers");
|
||||||
public static final ParseField SOURCE = new ParseField("source");
|
public static final ParseField SOURCE = new ParseField("source");
|
||||||
public static final ParseField DESTINATION = new ParseField("dest");
|
public static final ParseField DESTINATION = new ParseField("dest");
|
||||||
|
@ -75,24 +75,26 @@ public class DataFrameTransformConfig extends AbstractDiffable<DataFrameTransfor
|
||||||
String source = (String) args[1];
|
String source = (String) args[1];
|
||||||
String dest = (String) args[2];
|
String dest = (String) args[2];
|
||||||
|
|
||||||
|
// ignored, only for internal storage: String docType = (String) args[3];
|
||||||
|
|
||||||
// on strict parsing do not allow injection of headers
|
// on strict parsing do not allow injection of headers
|
||||||
if (lenient == false && args[3] != null) {
|
if (lenient == false && args[4] != null) {
|
||||||
throw new IllegalArgumentException("Found [headers], not allowed for strict parsing");
|
throw new IllegalArgumentException("Found [headers], not allowed for strict parsing");
|
||||||
}
|
}
|
||||||
|
|
||||||
@SuppressWarnings("unchecked")
|
@SuppressWarnings("unchecked")
|
||||||
Map<String, String> headers = (Map<String, String>) args[3];
|
Map<String, String> headers = (Map<String, String>) args[4];
|
||||||
|
|
||||||
// default handling: if the user does not specify a query, we default to match_all
|
// default handling: if the user does not specify a query, we default to match_all
|
||||||
QueryConfig queryConfig = null;
|
QueryConfig queryConfig = null;
|
||||||
if (args[4] == null) {
|
if (args[5] == null) {
|
||||||
queryConfig = new QueryConfig(Collections.singletonMap(MatchAllQueryBuilder.NAME, Collections.emptyMap()),
|
queryConfig = new QueryConfig(Collections.singletonMap(MatchAllQueryBuilder.NAME, Collections.emptyMap()),
|
||||||
new MatchAllQueryBuilder());
|
new MatchAllQueryBuilder());
|
||||||
} else {
|
} else {
|
||||||
queryConfig = (QueryConfig) args[4];
|
queryConfig = (QueryConfig) args[5];
|
||||||
}
|
}
|
||||||
|
|
||||||
PivotConfig pivotConfig = (PivotConfig) args[5];
|
PivotConfig pivotConfig = (PivotConfig) args[6];
|
||||||
return new DataFrameTransformConfig(id, source, dest, headers, queryConfig, pivotConfig);
|
return new DataFrameTransformConfig(id, source, dest, headers, queryConfig, pivotConfig);
|
||||||
});
|
});
|
||||||
|
|
||||||
|
@ -100,6 +102,7 @@ public class DataFrameTransformConfig extends AbstractDiffable<DataFrameTransfor
|
||||||
parser.declareString(constructorArg(), SOURCE);
|
parser.declareString(constructorArg(), SOURCE);
|
||||||
parser.declareString(constructorArg(), DESTINATION);
|
parser.declareString(constructorArg(), DESTINATION);
|
||||||
|
|
||||||
|
parser.declareString(optionalConstructorArg(), DataFrameField.INDEX_DOC_TYPE);
|
||||||
parser.declareObject(optionalConstructorArg(), (p, c) -> p.mapStrings(), HEADERS);
|
parser.declareObject(optionalConstructorArg(), (p, c) -> p.mapStrings(), HEADERS);
|
||||||
parser.declareObject(optionalConstructorArg(), (p, c) -> QueryConfig.fromXContent(p, lenient), QUERY);
|
parser.declareObject(optionalConstructorArg(), (p, c) -> QueryConfig.fromXContent(p, lenient), QUERY);
|
||||||
parser.declareObject(optionalConstructorArg(), (p, c) -> PivotConfig.fromXContent(p, lenient), PIVOT_TRANSFORM);
|
parser.declareObject(optionalConstructorArg(), (p, c) -> PivotConfig.fromXContent(p, lenient), PIVOT_TRANSFORM);
|
||||||
|
@ -108,7 +111,7 @@ public class DataFrameTransformConfig extends AbstractDiffable<DataFrameTransfor
|
||||||
}
|
}
|
||||||
|
|
||||||
public static String documentId(String transformId) {
|
public static String documentId(String transformId) {
|
||||||
return "data_frame-" + transformId;
|
return NAME + "-" + transformId;
|
||||||
}
|
}
|
||||||
|
|
||||||
public DataFrameTransformConfig(final String id,
|
public DataFrameTransformConfig(final String id,
|
||||||
|
@ -206,6 +209,9 @@ public class DataFrameTransformConfig extends AbstractDiffable<DataFrameTransfor
|
||||||
if (pivotConfig != null) {
|
if (pivotConfig != null) {
|
||||||
builder.field(PIVOT_TRANSFORM.getPreferredName(), pivotConfig);
|
builder.field(PIVOT_TRANSFORM.getPreferredName(), pivotConfig);
|
||||||
}
|
}
|
||||||
|
if (params.paramAsBoolean(DataFrameField.FOR_INTERNAL_STORAGE, false)) {
|
||||||
|
builder.field(DataFrameField.INDEX_DOC_TYPE.getPreferredName(), NAME);
|
||||||
|
}
|
||||||
if (headers.isEmpty() == false && params.paramAsBoolean(DataFrameField.FOR_INTERNAL_STORAGE, false) == true) {
|
if (headers.isEmpty() == false && params.paramAsBoolean(DataFrameField.FOR_INTERNAL_STORAGE, false) == true) {
|
||||||
builder.field(HEADERS.getPreferredName(), headers);
|
builder.field(HEADERS.getPreferredName(), headers);
|
||||||
}
|
}
|
||||||
|
|
|
@ -152,6 +152,24 @@ public class DataFrameTransformConfigTests extends AbstractSerializingDataFrameT
|
||||||
() -> createDataFrameTransformConfigFromString(pivotTransform, "test_header_injection"));
|
() -> createDataFrameTransformConfigFromString(pivotTransform, "test_header_injection"));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public void testXContentForInternalStorage() throws IOException {
|
||||||
|
DataFrameTransformConfig dataFrameTransformConfig = randomDataFrameTransformConfig();
|
||||||
|
|
||||||
|
try (XContentBuilder xContentBuilder = XContentFactory.jsonBuilder()) {
|
||||||
|
XContentBuilder content = dataFrameTransformConfig.toXContent(xContentBuilder, getToXContentParams());
|
||||||
|
String doc = Strings.toString(content);
|
||||||
|
|
||||||
|
assertThat(doc, matchesPattern(".*\"doc_type\"\\s*:\\s*\"data_frame_transform_config\".*"));
|
||||||
|
}
|
||||||
|
|
||||||
|
try (XContentBuilder xContentBuilder = XContentFactory.jsonBuilder()) {
|
||||||
|
XContentBuilder content = dataFrameTransformConfig.toXContent(xContentBuilder, ToXContent.EMPTY_PARAMS);
|
||||||
|
String doc = Strings.toString(content);
|
||||||
|
|
||||||
|
assertFalse(doc.contains("doc_type"));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
public void testSetIdInBody() throws IOException {
|
public void testSetIdInBody() throws IOException {
|
||||||
String pivotTransform = "{"
|
String pivotTransform = "{"
|
||||||
+ " \"id\" : \"body_id\","
|
+ " \"id\" : \"body_id\","
|
||||||
|
|
|
@ -38,9 +38,6 @@ public final class DataFrameInternalIndex {
|
||||||
public static final String DOUBLE = "double";
|
public static final String DOUBLE = "double";
|
||||||
public static final String KEYWORD = "keyword";
|
public static final String KEYWORD = "keyword";
|
||||||
|
|
||||||
// internal document types, e.g. "transform_config"
|
|
||||||
public static final String DOC_TYPE = "doc_type";
|
|
||||||
|
|
||||||
public static IndexTemplateMetaData getIndexTemplateMetaData() throws IOException {
|
public static IndexTemplateMetaData getIndexTemplateMetaData() throws IOException {
|
||||||
IndexTemplateMetaData dataFrameTemplate = IndexTemplateMetaData.builder(INDEX_TEMPLATE_NAME)
|
IndexTemplateMetaData dataFrameTemplate = IndexTemplateMetaData.builder(INDEX_TEMPLATE_NAME)
|
||||||
.patterns(Collections.singletonList(INDEX_TEMPLATE_NAME))
|
.patterns(Collections.singletonList(INDEX_TEMPLATE_NAME))
|
||||||
|
@ -69,7 +66,7 @@ public final class DataFrameInternalIndex {
|
||||||
// the schema definitions
|
// the schema definitions
|
||||||
builder.startObject(PROPERTIES);
|
builder.startObject(PROPERTIES);
|
||||||
// overall doc type
|
// overall doc type
|
||||||
builder.startObject(DOC_TYPE).field(TYPE, KEYWORD).endObject();
|
builder.startObject(DataFrameField.INDEX_DOC_TYPE.getPreferredName()).field(TYPE, KEYWORD).endObject();
|
||||||
// add the schema for transform configurations
|
// add the schema for transform configurations
|
||||||
addDataFrameTransformsConfigMappings(builder);
|
addDataFrameTransformsConfigMappings(builder);
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue