|
@@ -32,12 +32,14 @@ import org.elasticsearch.action.index.IndexRequest;
|
|
|
import org.elasticsearch.action.index.IndexResponse;
|
|
|
import org.elasticsearch.action.search.SearchRequest;
|
|
|
import org.elasticsearch.action.search.SearchResponse;
|
|
|
+import org.elasticsearch.action.support.PlainActionFuture;
|
|
|
import org.elasticsearch.action.support.WriteRequest;
|
|
|
import org.elasticsearch.client.internal.Client;
|
|
|
import org.elasticsearch.client.internal.FilterClient;
|
|
|
import org.elasticsearch.cluster.metadata.IndexNameExpressionResolver;
|
|
|
import org.elasticsearch.cluster.service.ClusterService;
|
|
|
import org.elasticsearch.common.settings.Settings;
|
|
|
+import org.elasticsearch.common.xcontent.XContentHelper;
|
|
|
import org.elasticsearch.core.Strings;
|
|
|
import org.elasticsearch.index.IndexNotFoundException;
|
|
|
import org.elasticsearch.index.engine.Segment;
|
|
@@ -53,6 +55,7 @@ import org.elasticsearch.tasks.TaskAwareRequest;
|
|
|
import org.elasticsearch.tasks.TaskId;
|
|
|
import org.elasticsearch.tasks.TaskManager;
|
|
|
import org.elasticsearch.test.ESSingleNodeTestCase;
|
|
|
+import org.elasticsearch.test.hamcrest.ElasticsearchAssertions;
|
|
|
import org.elasticsearch.threadpool.TestThreadPool;
|
|
|
import org.elasticsearch.threadpool.ThreadPool;
|
|
|
import org.elasticsearch.xcontent.XContentBuilder;
|
|
@@ -71,6 +74,7 @@ import java.util.Arrays;
|
|
|
import java.util.Collection;
|
|
|
import java.util.Collections;
|
|
|
import java.util.List;
|
|
|
+import java.util.Locale;
|
|
|
import java.util.Map;
|
|
|
import java.util.concurrent.CountDownLatch;
|
|
|
import java.util.concurrent.TimeUnit;
|
|
@@ -153,15 +157,22 @@ public class EnrichPolicyRunnerTests extends ESSingleNodeTestCase {
|
|
|
// Validate Mapping
|
|
|
Map<String, Object> mapping = enrichIndex.getMappings().get(createdEnrichIndex).sourceAsMap();
|
|
|
validateMappingMetadata(mapping, policyName, policy);
|
|
|
- assertThat(mapping.get("dynamic"), is("false"));
|
|
|
- Map<?, ?> properties = (Map<?, ?>) mapping.get("properties");
|
|
|
- assertNotNull(properties);
|
|
|
- assertThat(properties.size(), is(equalTo(1)));
|
|
|
- Map<?, ?> field1 = (Map<?, ?>) properties.get("field1");
|
|
|
- assertNotNull(field1);
|
|
|
- assertThat(field1.get("type"), is(equalTo("keyword")));
|
|
|
- assertThat(field1.get("doc_values"), is(false));
|
|
|
-
|
|
|
+ assertEnrichMapping(mapping, """
|
|
|
+ {
|
|
|
+ "field1": {
|
|
|
+ "type": "keyword",
|
|
|
+ "doc_values": false
|
|
|
+ },
|
|
|
+ "field2": {
|
|
|
+ "type": "long",
|
|
|
+ "index": false
|
|
|
+ },
|
|
|
+ "field5": {
|
|
|
+ "type": "text",
|
|
|
+ "index": false
|
|
|
+ }
|
|
|
+ }
|
|
|
+ """);
|
|
|
// Validate document structure
|
|
|
SearchResponse enrichSearchResponse = client().search(
|
|
|
new SearchRequest(".enrich-test1").source(SearchSourceBuilder.searchSource().query(QueryBuilders.matchAllQuery()))
|
|
@@ -222,15 +233,17 @@ public class EnrichPolicyRunnerTests extends ESSingleNodeTestCase {
|
|
|
// Validate Mapping
|
|
|
Map<String, Object> mapping = enrichIndex.getMappings().get(createdEnrichIndex).sourceAsMap();
|
|
|
validateMappingMetadata(mapping, policyName, policy);
|
|
|
- assertThat(mapping.get("dynamic"), is("false"));
|
|
|
- Map<?, ?> properties = (Map<?, ?>) mapping.get("properties");
|
|
|
- assertNotNull(properties);
|
|
|
- assertThat(properties.size(), is(equalTo(1)));
|
|
|
- Map<?, ?> field1 = (Map<?, ?>) properties.get("location");
|
|
|
- assertNotNull(field1);
|
|
|
- assertThat(field1.get("type"), is(equalTo("geo_shape")));
|
|
|
- assertNull(field1.get("doc_values"));
|
|
|
-
|
|
|
+ assertEnrichMapping(mapping, """
|
|
|
+ {
|
|
|
+ "location": {
|
|
|
+ "type": "geo_shape"
|
|
|
+ },
|
|
|
+ "zipcode": {
|
|
|
+ "type": "long",
|
|
|
+ "index": false
|
|
|
+ }
|
|
|
+ }
|
|
|
+ """);
|
|
|
// Validate document structure
|
|
|
SearchResponse enrichSearchResponse = client().search(
|
|
|
new SearchRequest(".enrich-test1").source(SearchSourceBuilder.searchSource().query(QueryBuilders.matchAllQuery()))
|
|
@@ -307,14 +320,18 @@ public class EnrichPolicyRunnerTests extends ESSingleNodeTestCase {
|
|
|
// Validate Mapping
|
|
|
Map<String, Object> mapping = enrichIndex.getMappings().get(createdEnrichIndex).sourceAsMap();
|
|
|
validateMappingMetadata(mapping, policyName, policy);
|
|
|
- assertThat(mapping.get("dynamic"), is("false"));
|
|
|
- Map<?, ?> properties = (Map<?, ?>) mapping.get("properties");
|
|
|
- assertNotNull(properties);
|
|
|
- assertThat(properties.size(), is(equalTo(1)));
|
|
|
- Map<?, ?> field1 = (Map<?, ?>) properties.get("range");
|
|
|
- assertNotNull(field1);
|
|
|
- assertThat(field1.get("type"), is(equalTo(rangeType + "_range")));
|
|
|
- assertEquals(Boolean.FALSE, field1.get("doc_values"));
|
|
|
+ assertEnrichMapping(mapping, String.format(Locale.ROOT, """
|
|
|
+ {
|
|
|
+ "range": {
|
|
|
+ "type": "%s",
|
|
|
+ "doc_values": false
|
|
|
+ },
|
|
|
+ "zipcode": {
|
|
|
+ "type": "long",
|
|
|
+ "index": false
|
|
|
+ }
|
|
|
+ }
|
|
|
+ """, rangeType + "_range"));
|
|
|
|
|
|
// Validate document structure
|
|
|
SearchResponse enrichSearchResponse = client().search(
|
|
@@ -394,15 +411,18 @@ public class EnrichPolicyRunnerTests extends ESSingleNodeTestCase {
|
|
|
// Validate Mapping
|
|
|
Map<String, Object> mapping = enrichIndex.getMappings().get(createdEnrichIndex).sourceAsMap();
|
|
|
validateMappingMetadata(mapping, policyName, policy);
|
|
|
- assertThat(mapping.get("dynamic"), is("false"));
|
|
|
- Map<?, ?> properties = (Map<?, ?>) mapping.get("properties");
|
|
|
- assertNotNull(properties);
|
|
|
- assertThat(properties.size(), is(equalTo(1)));
|
|
|
- Map<?, ?> field1 = (Map<?, ?>) properties.get("subnet");
|
|
|
- assertNotNull(field1);
|
|
|
- assertThat(field1.get("type"), is(equalTo("ip_range")));
|
|
|
- assertThat(field1.get("doc_values"), is(false));
|
|
|
-
|
|
|
+ assertEnrichMapping(mapping, """
|
|
|
+ {
|
|
|
+ "subnet": {
|
|
|
+ "type": "ip_range",
|
|
|
+ "doc_values": false
|
|
|
+ },
|
|
|
+ "department": {
|
|
|
+ "type": "text",
|
|
|
+ "index": false
|
|
|
+ }
|
|
|
+ }
|
|
|
+ """);
|
|
|
// Validate document structure and lookup of element in range
|
|
|
SearchResponse enrichSearchResponse = client().search(
|
|
|
new SearchRequest(".enrich-test1").source(
|
|
@@ -483,15 +503,30 @@ public class EnrichPolicyRunnerTests extends ESSingleNodeTestCase {
|
|
|
// Validate Mapping
|
|
|
Map<String, Object> mapping = enrichIndex.getMappings().get(createdEnrichIndex).sourceAsMap();
|
|
|
validateMappingMetadata(mapping, policyName, policy);
|
|
|
- assertThat(mapping.get("dynamic"), is("false"));
|
|
|
- Map<?, ?> properties = (Map<?, ?>) mapping.get("properties");
|
|
|
- assertNotNull(properties);
|
|
|
- assertThat(properties.size(), is(equalTo(1)));
|
|
|
- Map<?, ?> keyfield = (Map<?, ?>) properties.get("key");
|
|
|
- assertNotNull(keyfield);
|
|
|
- assertThat(keyfield.get("type"), is(equalTo("keyword")));
|
|
|
- assertThat(keyfield.get("doc_values"), is(false));
|
|
|
-
|
|
|
+ assertEnrichMapping(mapping, """
|
|
|
+ {
|
|
|
+ "key": {
|
|
|
+ "type": "keyword",
|
|
|
+ "doc_values": false
|
|
|
+ },
|
|
|
+ "idx": {
|
|
|
+ "type": "long",
|
|
|
+ "index": false
|
|
|
+ },
|
|
|
+ "field1": {
|
|
|
+ "type": "text",
|
|
|
+ "index": false
|
|
|
+ },
|
|
|
+ "field2": {
|
|
|
+ "type": "long",
|
|
|
+ "index": false
|
|
|
+ },
|
|
|
+ "field5": {
|
|
|
+ "type": "text",
|
|
|
+ "index": false
|
|
|
+ }
|
|
|
+ }
|
|
|
+ """);
|
|
|
// Validate document structure
|
|
|
SearchResponse enrichSearchResponse = client().search(
|
|
|
new SearchRequest(".enrich-test1").source(SearchSourceBuilder.searchSource().query(QueryBuilders.matchAllQuery()))
|
|
@@ -578,15 +613,30 @@ public class EnrichPolicyRunnerTests extends ESSingleNodeTestCase {
|
|
|
|
|
|
// Validate Mapping
|
|
|
Map<String, Object> mapping = enrichIndex.getMappings().get(createdEnrichIndex).sourceAsMap();
|
|
|
- assertThat(mapping.get("dynamic"), is("false"));
|
|
|
- Map<?, ?> properties = (Map<?, ?>) mapping.get("properties");
|
|
|
- assertNotNull(properties);
|
|
|
- assertThat(properties.size(), is(equalTo(1)));
|
|
|
- Map<?, ?> keyfield = (Map<?, ?>) properties.get("key");
|
|
|
- assertNotNull(keyfield);
|
|
|
- assertThat(keyfield.get("type"), is(equalTo("keyword")));
|
|
|
- assertThat(keyfield.get("doc_values"), is(false));
|
|
|
-
|
|
|
+ assertEnrichMapping(mapping, """
|
|
|
+ {
|
|
|
+ "key": {
|
|
|
+ "type": "keyword",
|
|
|
+ "doc_values": false
|
|
|
+ },
|
|
|
+ "idx": {
|
|
|
+ "type": "long",
|
|
|
+ "index": false
|
|
|
+ },
|
|
|
+ "field1": {
|
|
|
+ "type": "text",
|
|
|
+ "index": false
|
|
|
+ },
|
|
|
+ "field2": {
|
|
|
+ "type": "long",
|
|
|
+ "index": false
|
|
|
+ },
|
|
|
+ "field5": {
|
|
|
+ "type": "text",
|
|
|
+ "index": false
|
|
|
+ }
|
|
|
+ }
|
|
|
+ """);
|
|
|
// Validate document structure
|
|
|
SearchResponse enrichSearchResponse = client().search(
|
|
|
new SearchRequest(".enrich-test1").source(SearchSourceBuilder.searchSource().query(QueryBuilders.matchAllQuery()))
|
|
@@ -675,15 +725,30 @@ public class EnrichPolicyRunnerTests extends ESSingleNodeTestCase {
|
|
|
|
|
|
// Validate Mapping
|
|
|
Map<String, Object> mapping = enrichIndex.getMappings().get(createdEnrichIndex).sourceAsMap();
|
|
|
- assertThat(mapping.get("dynamic"), is("false"));
|
|
|
- Map<?, ?> properties = (Map<?, ?>) mapping.get("properties");
|
|
|
- assertNotNull(properties);
|
|
|
- assertThat(properties.size(), is(equalTo(1)));
|
|
|
- Map<?, ?> keyfield = (Map<?, ?>) properties.get("key");
|
|
|
- assertNotNull(keyfield);
|
|
|
- assertThat(keyfield.get("type"), is(equalTo("keyword")));
|
|
|
- assertThat(keyfield.get("doc_values"), is(false));
|
|
|
-
|
|
|
+ assertEnrichMapping(mapping, """
|
|
|
+ {
|
|
|
+ "key": {
|
|
|
+ "type": "keyword",
|
|
|
+ "doc_values": false
|
|
|
+ },
|
|
|
+ "field1": {
|
|
|
+ "type": "text",
|
|
|
+ "index": false
|
|
|
+ },
|
|
|
+ "field2": {
|
|
|
+ "type": "long",
|
|
|
+ "index": false
|
|
|
+ },
|
|
|
+ "field5": {
|
|
|
+ "type": "text",
|
|
|
+ "index": false
|
|
|
+ },
|
|
|
+ "idx": {
|
|
|
+ "type": "long",
|
|
|
+ "index": false
|
|
|
+ }
|
|
|
+ }
|
|
|
+ """);
|
|
|
// Validate document structure
|
|
|
SearchResponse enrichSearchResponse = client().search(
|
|
|
new SearchRequest(".enrich-test1").source(SearchSourceBuilder.searchSource().query(QueryBuilders.matchAllQuery()))
|
|
@@ -971,21 +1036,22 @@ public class EnrichPolicyRunnerTests extends ESSingleNodeTestCase {
|
|
|
// Validate Mapping
|
|
|
Map<String, Object> mapping = enrichIndex.getMappings().get(createdEnrichIndex).sourceAsMap();
|
|
|
validateMappingMetadata(mapping, policyName, policy);
|
|
|
- assertThat(mapping.get("dynamic"), is("false"));
|
|
|
- Map<?, ?> properties = (Map<?, ?>) mapping.get("properties");
|
|
|
- assertNotNull(properties);
|
|
|
- assertThat(properties.size(), is(equalTo(1)));
|
|
|
- Map<?, ?> data = (Map<?, ?>) properties.get("data");
|
|
|
- assertNotNull(data);
|
|
|
- assertThat(data.size(), is(equalTo(1)));
|
|
|
- Map<?, ?> dataProperties = (Map<?, ?>) data.get("properties");
|
|
|
- assertNotNull(dataProperties);
|
|
|
- assertThat(dataProperties.size(), is(equalTo(1)));
|
|
|
- Map<?, ?> field1 = (Map<?, ?>) dataProperties.get("field1");
|
|
|
- assertNotNull(field1);
|
|
|
- assertThat(field1.get("type"), is(equalTo("keyword")));
|
|
|
- assertThat(field1.get("doc_values"), is(false));
|
|
|
-
|
|
|
+ assertEnrichMapping(mapping, """
|
|
|
+ {
|
|
|
+ "data": {
|
|
|
+ "properties": {
|
|
|
+ "field1": {
|
|
|
+ "type": "keyword",
|
|
|
+ "doc_values": false
|
|
|
+ },
|
|
|
+ "field2": {
|
|
|
+ "type": "integer",
|
|
|
+ "index": false
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+ """);
|
|
|
SearchResponse enrichSearchResponse = client().search(
|
|
|
new SearchRequest(".enrich-test1").source(SearchSourceBuilder.searchSource().query(QueryBuilders.matchAllQuery()))
|
|
|
).actionGet();
|
|
@@ -1082,21 +1148,22 @@ public class EnrichPolicyRunnerTests extends ESSingleNodeTestCase {
|
|
|
// Validate Mapping
|
|
|
Map<String, Object> mapping = enrichIndex.getMappings().get(createdEnrichIndex).sourceAsMap();
|
|
|
validateMappingMetadata(mapping, policyName, policy);
|
|
|
- assertThat(mapping.get("dynamic"), is("false"));
|
|
|
- Map<?, ?> properties = (Map<?, ?>) mapping.get("properties");
|
|
|
- assertNotNull(properties);
|
|
|
- assertThat(properties.size(), is(equalTo(1)));
|
|
|
- Map<?, ?> data = (Map<?, ?>) properties.get("data");
|
|
|
- assertNotNull(data);
|
|
|
- assertThat(data.size(), is(equalTo(1)));
|
|
|
- Map<?, ?> dataProperties = (Map<?, ?>) data.get("properties");
|
|
|
- assertNotNull(dataProperties);
|
|
|
- assertThat(dataProperties.size(), is(equalTo(1)));
|
|
|
- Map<?, ?> field1 = (Map<?, ?>) dataProperties.get("field1");
|
|
|
- assertNotNull(field1);
|
|
|
- assertThat(field1.get("type"), is(equalTo("keyword")));
|
|
|
- assertThat(field1.get("doc_values"), is(false));
|
|
|
-
|
|
|
+ assertEnrichMapping(mapping, """
|
|
|
+ {
|
|
|
+ "data": {
|
|
|
+ "properties": {
|
|
|
+ "field1": {
|
|
|
+ "type": "keyword",
|
|
|
+ "doc_values": false
|
|
|
+ },
|
|
|
+ "field2": {
|
|
|
+ "type": "integer",
|
|
|
+ "index": false
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+ """);
|
|
|
SearchResponse enrichSearchResponse = client().search(
|
|
|
new SearchRequest(".enrich-test1").source(SearchSourceBuilder.searchSource().query(QueryBuilders.matchAllQuery()))
|
|
|
).actionGet();
|
|
@@ -1194,21 +1261,22 @@ public class EnrichPolicyRunnerTests extends ESSingleNodeTestCase {
|
|
|
// Validate Mapping
|
|
|
Map<String, Object> mapping = enrichIndex.getMappings().get(createdEnrichIndex).sourceAsMap();
|
|
|
validateMappingMetadata(mapping, policyName, policy);
|
|
|
- assertThat(mapping.get("dynamic"), is("false"));
|
|
|
- Map<?, ?> properties = (Map<?, ?>) mapping.get("properties");
|
|
|
- assertNotNull(properties);
|
|
|
- assertThat(properties.size(), is(equalTo(1)));
|
|
|
- Map<?, ?> data = (Map<?, ?>) properties.get("data");
|
|
|
- assertNotNull(data);
|
|
|
- assertThat(data.size(), is(equalTo(1)));
|
|
|
- Map<?, ?> dataProperties = (Map<?, ?>) data.get("properties");
|
|
|
- assertNotNull(dataProperties);
|
|
|
- assertThat(dataProperties.size(), is(equalTo(1)));
|
|
|
- Map<?, ?> field1 = (Map<?, ?>) dataProperties.get("subnet");
|
|
|
- assertNotNull(field1);
|
|
|
- assertThat(field1.get("type"), is(equalTo("ip_range")));
|
|
|
- assertThat(field1.get("doc_values"), is(false));
|
|
|
-
|
|
|
+ assertEnrichMapping(mapping, """
|
|
|
+ {
|
|
|
+ "data": {
|
|
|
+ "properties": {
|
|
|
+ "subnet": {
|
|
|
+ "type": "ip_range",
|
|
|
+ "doc_values": false
|
|
|
+ },
|
|
|
+ "department": {
|
|
|
+ "type": "keyword",
|
|
|
+ "index": false
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+ """);
|
|
|
SearchResponse enrichSearchResponse = client().search(
|
|
|
new SearchRequest(".enrich-test1").source(
|
|
|
SearchSourceBuilder.searchSource().query(QueryBuilders.matchQuery("data.subnet", "10.0.0.1"))
|
|
@@ -1315,26 +1383,26 @@ public class EnrichPolicyRunnerTests extends ESSingleNodeTestCase {
|
|
|
// Validate Mapping
|
|
|
Map<String, Object> mapping = enrichIndex.getMappings().get(createdEnrichIndex).sourceAsMap();
|
|
|
validateMappingMetadata(mapping, policyName, policy);
|
|
|
- assertThat(mapping.get("dynamic"), is("false"));
|
|
|
- Map<?, ?> properties = (Map<?, ?>) mapping.get("properties");
|
|
|
- assertNotNull(properties);
|
|
|
- assertThat(properties.size(), is(equalTo(1)));
|
|
|
- Map<?, ?> data = (Map<?, ?>) properties.get("data");
|
|
|
- assertNotNull(data);
|
|
|
- assertThat(data.size(), is(equalTo(1)));
|
|
|
- Map<?, ?> dataProperties = (Map<?, ?>) data.get("properties");
|
|
|
- assertNotNull(dataProperties);
|
|
|
- assertThat(dataProperties.size(), is(equalTo(1)));
|
|
|
- Map<?, ?> fields = (Map<?, ?>) dataProperties.get("fields");
|
|
|
- assertNotNull(fields);
|
|
|
- assertThat(fields.size(), is(equalTo(1)));
|
|
|
- Map<?, ?> fieldsProperties = (Map<?, ?>) fields.get("properties");
|
|
|
- assertNotNull(fieldsProperties);
|
|
|
- assertThat(fieldsProperties.size(), is(equalTo(1)));
|
|
|
- Map<?, ?> field1 = (Map<?, ?>) fieldsProperties.get("field1");
|
|
|
- assertNotNull(field1);
|
|
|
- assertThat(field1.get("type"), is(equalTo("keyword")));
|
|
|
- assertThat(field1.get("doc_values"), is(false));
|
|
|
+ assertEnrichMapping(mapping, """
|
|
|
+ {
|
|
|
+ "data": {
|
|
|
+ "properties": {
|
|
|
+ "fields": {
|
|
|
+ "properties": {
|
|
|
+ "field1": {
|
|
|
+ "type": "keyword",
|
|
|
+ "doc_values": false
|
|
|
+ },
|
|
|
+ "field2": {
|
|
|
+ "type": "integer",
|
|
|
+ "index": false
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+ """);
|
|
|
|
|
|
SearchResponse enrichSearchResponse = client().search(
|
|
|
new SearchRequest(".enrich-test1").source(SearchSourceBuilder.searchSource().query(QueryBuilders.matchAllQuery()))
|
|
@@ -1442,27 +1510,26 @@ public class EnrichPolicyRunnerTests extends ESSingleNodeTestCase {
|
|
|
// Validate Mapping
|
|
|
Map<String, Object> mapping = enrichIndex.getMappings().get(createdEnrichIndex).sourceAsMap();
|
|
|
validateMappingMetadata(mapping, policyName, policy);
|
|
|
- assertThat(mapping.get("dynamic"), is("false"));
|
|
|
- Map<?, ?> properties = (Map<?, ?>) mapping.get("properties");
|
|
|
- assertNotNull(properties);
|
|
|
- assertThat(properties.size(), is(equalTo(1)));
|
|
|
- Map<?, ?> data = (Map<?, ?>) properties.get("data");
|
|
|
- assertNotNull(data);
|
|
|
- assertThat(data.size(), is(equalTo(1)));
|
|
|
- Map<?, ?> dataProperties = (Map<?, ?>) data.get("properties");
|
|
|
- assertNotNull(dataProperties);
|
|
|
- assertThat(dataProperties.size(), is(equalTo(1)));
|
|
|
- Map<?, ?> fields = (Map<?, ?>) dataProperties.get("fields");
|
|
|
- assertNotNull(fields);
|
|
|
- assertThat(fields.size(), is(equalTo(1)));
|
|
|
- Map<?, ?> fieldsProperties = (Map<?, ?>) fields.get("properties");
|
|
|
- assertNotNull(fieldsProperties);
|
|
|
- assertThat(fieldsProperties.size(), is(equalTo(1)));
|
|
|
- Map<?, ?> field1 = (Map<?, ?>) fieldsProperties.get("subnet");
|
|
|
- assertNotNull(field1);
|
|
|
- assertThat(field1.get("type"), is(equalTo("ip_range")));
|
|
|
- assertThat(field1.get("doc_values"), is(false));
|
|
|
-
|
|
|
+ assertEnrichMapping(mapping, """
|
|
|
+ {
|
|
|
+ "data": {
|
|
|
+ "properties": {
|
|
|
+ "fields": {
|
|
|
+ "properties": {
|
|
|
+ "subnet": {
|
|
|
+ "type": "ip_range",
|
|
|
+ "doc_values": false
|
|
|
+ },
|
|
|
+ "department": {
|
|
|
+ "type": "keyword",
|
|
|
+ "index": false
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+ """);
|
|
|
SearchResponse enrichSearchResponse = client().search(
|
|
|
new SearchRequest(".enrich-test1").source(SearchSourceBuilder.searchSource().query(QueryBuilders.matchAllQuery()))
|
|
|
).actionGet();
|
|
@@ -1576,26 +1643,27 @@ public class EnrichPolicyRunnerTests extends ESSingleNodeTestCase {
|
|
|
// Validate Mapping
|
|
|
Map<String, Object> mapping = enrichIndex.getMappings().get(createdEnrichIndex).sourceAsMap();
|
|
|
validateMappingMetadata(mapping, policyName, policy);
|
|
|
- assertThat(mapping.get("dynamic"), is("false"));
|
|
|
- Map<?, ?> properties = (Map<?, ?>) mapping.get("properties");
|
|
|
- assertNotNull(properties);
|
|
|
- assertThat(properties.size(), is(equalTo(1)));
|
|
|
- Map<?, ?> data = (Map<?, ?>) properties.get("data");
|
|
|
- assertNotNull(data);
|
|
|
- assertThat(data.size(), is(equalTo(1)));
|
|
|
- Map<?, ?> dataProperties = (Map<?, ?>) data.get("properties");
|
|
|
- assertNotNull(dataProperties);
|
|
|
- assertThat(dataProperties.size(), is(equalTo(1)));
|
|
|
- Map<?, ?> fields = (Map<?, ?>) dataProperties.get("fields");
|
|
|
- assertNotNull(fields);
|
|
|
- assertThat(fields.size(), is(equalTo(1)));
|
|
|
- Map<?, ?> fieldsProperties = (Map<?, ?>) fields.get("properties");
|
|
|
- assertNotNull(fieldsProperties);
|
|
|
- assertThat(fieldsProperties.size(), is(equalTo(1)));
|
|
|
- Map<?, ?> field1 = (Map<?, ?>) fieldsProperties.get("period");
|
|
|
- assertNotNull(field1);
|
|
|
- assertThat(field1.get("type"), is(equalTo("date_range")));
|
|
|
- assertThat(field1.get("doc_values"), is(false));
|
|
|
+ assertEnrichMapping(mapping, """
|
|
|
+ {
|
|
|
+ "data": {
|
|
|
+ "properties": {
|
|
|
+ "fields": {
|
|
|
+ "properties": {
|
|
|
+ "period": {
|
|
|
+ "type": "date_range",
|
|
|
+ "format": "yyyy'/'MM'/'dd' at 'HH':'mm||strict_date_time",
|
|
|
+ "doc_values": false
|
|
|
+ },
|
|
|
+ "status": {
|
|
|
+ "type": "keyword",
|
|
|
+ "index": false
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+ """);
|
|
|
|
|
|
SearchResponse enrichSearchResponse = client().search(
|
|
|
new SearchRequest(".enrich-test1").source(
|
|
@@ -1708,21 +1776,22 @@ public class EnrichPolicyRunnerTests extends ESSingleNodeTestCase {
|
|
|
// Validate Mapping
|
|
|
Map<String, Object> mapping = enrichIndex.getMappings().get(createdEnrichIndex).sourceAsMap();
|
|
|
validateMappingMetadata(mapping, policyName, policy);
|
|
|
- assertThat(mapping.get("dynamic"), is("false"));
|
|
|
- Map<?, ?> properties = (Map<?, ?>) mapping.get("properties");
|
|
|
- assertNotNull(properties);
|
|
|
- assertThat(properties.size(), is(equalTo(1)));
|
|
|
- Map<?, ?> data = (Map<?, ?>) properties.get("data");
|
|
|
- assertNotNull(data);
|
|
|
- assertThat(data.size(), is(equalTo(1)));
|
|
|
- Map<?, ?> dataProperties = (Map<?, ?>) data.get("properties");
|
|
|
- assertNotNull(dataProperties);
|
|
|
- assertThat(dataProperties.size(), is(equalTo(1)));
|
|
|
- Map<?, ?> field1 = (Map<?, ?>) dataProperties.get("field1");
|
|
|
- assertNotNull(field1);
|
|
|
- assertThat(field1.get("type"), is(equalTo("keyword")));
|
|
|
- assertThat(field1.get("doc_values"), is(false));
|
|
|
-
|
|
|
+ assertEnrichMapping(mapping, """
|
|
|
+ {
|
|
|
+ "data": {
|
|
|
+ "properties": {
|
|
|
+ "field1": {
|
|
|
+ "type": "keyword",
|
|
|
+ "doc_values": false
|
|
|
+ },
|
|
|
+ "field2": {
|
|
|
+ "type": "integer",
|
|
|
+ "index": false
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+ """);
|
|
|
SearchResponse enrichSearchResponse = client().search(
|
|
|
new SearchRequest(".enrich-test1").source(SearchSourceBuilder.searchSource().query(QueryBuilders.matchAllQuery()))
|
|
|
).actionGet();
|
|
@@ -1867,16 +1936,22 @@ public class EnrichPolicyRunnerTests extends ESSingleNodeTestCase {
|
|
|
|
|
|
// Validate Mapping
|
|
|
Map<String, Object> mapping = enrichIndex.getMappings().get(createdEnrichIndex).sourceAsMap();
|
|
|
- validateMappingMetadata(mapping, policyName, policy);
|
|
|
- assertThat(mapping.get("dynamic"), is("false"));
|
|
|
- Map<?, ?> properties = (Map<?, ?>) mapping.get("properties");
|
|
|
- assertNotNull(properties);
|
|
|
- assertThat(properties.size(), is(equalTo(1)));
|
|
|
- Map<?, ?> field1 = (Map<?, ?>) properties.get("field1");
|
|
|
- assertNotNull(field1);
|
|
|
- assertThat(field1.get("type"), is(equalTo("keyword")));
|
|
|
- assertThat(field1.get("doc_values"), is(false));
|
|
|
-
|
|
|
+ assertEnrichMapping(mapping, """
|
|
|
+ {
|
|
|
+ "field1": {
|
|
|
+ "type": "keyword",
|
|
|
+ "doc_values": false
|
|
|
+ },
|
|
|
+ "field2": {
|
|
|
+ "type": "long",
|
|
|
+ "index": false
|
|
|
+ },
|
|
|
+ "field5": {
|
|
|
+ "type": "text",
|
|
|
+ "index": false
|
|
|
+ }
|
|
|
+ }
|
|
|
+ """);
|
|
|
// Validate document structure
|
|
|
SearchResponse allEnrichDocs = client().search(
|
|
|
new SearchRequest(".enrich-test1").source(SearchSourceBuilder.searchSource().query(QueryBuilders.matchAllQuery()))
|
|
@@ -2007,6 +2082,108 @@ public class EnrichPolicyRunnerTests extends ESSingleNodeTestCase {
|
|
|
assertThat(e.getMessage(), equalTo("Field 'field1' has type [object] which doesn't appear to be a range type"));
|
|
|
}
|
|
|
|
|
|
+ public void testEnrichFieldsConflictMappingTypes() {
|
|
|
+ createIndex("source-1", Settings.EMPTY, "_doc", "user", "type=keyword", "name", "type=text", "zipcode", "type=long");
|
|
|
+ client().prepareIndex("source-1")
|
|
|
+ .setSource("user", "u1", "name", "n", "zipcode", 90000)
|
|
|
+ .setRefreshPolicy(WriteRequest.RefreshPolicy.IMMEDIATE)
|
|
|
+ .get();
|
|
|
+ createIndex("source-2", Settings.EMPTY, "_doc", "user", "type=keyword", "zipcode", "type=long");
|
|
|
+
|
|
|
+ client().prepareIndex("source-2").setSource("""
|
|
|
+ {
|
|
|
+ "user": "u2",
|
|
|
+ "name": {
|
|
|
+ "first": "f",
|
|
|
+ "last": "l"
|
|
|
+ },
|
|
|
+ "zipcode": 90001
|
|
|
+ }
|
|
|
+ """, XContentType.JSON).setRefreshPolicy(WriteRequest.RefreshPolicy.IMMEDIATE).get();
|
|
|
+
|
|
|
+ EnrichPolicy policy = new EnrichPolicy(
|
|
|
+ EnrichPolicy.MATCH_TYPE,
|
|
|
+ null,
|
|
|
+ List.of("source-1", "source-2"),
|
|
|
+ "user",
|
|
|
+ List.of("name", "zipcode")
|
|
|
+ );
|
|
|
+ String policyName = "test1";
|
|
|
+ final long createTime = randomNonNegativeLong();
|
|
|
+ String createdEnrichIndex = ".enrich-test1-" + createTime;
|
|
|
+ PlainActionFuture<ExecuteEnrichPolicyStatus> future = new PlainActionFuture<>();
|
|
|
+ EnrichPolicyRunner enrichPolicyRunner = createPolicyRunner(policyName, policy, future, createdEnrichIndex);
|
|
|
+ enrichPolicyRunner.run();
|
|
|
+ future.actionGet();
|
|
|
+
|
|
|
+ // Validate Index definition
|
|
|
+ GetIndexResponse enrichIndex = getGetIndexResponseAndCheck(createdEnrichIndex);
|
|
|
+ Map<String, Object> mapping = enrichIndex.getMappings().get(createdEnrichIndex).sourceAsMap();
|
|
|
+ assertEnrichMapping(mapping, """
|
|
|
+ {
|
|
|
+ "user": {
|
|
|
+ "type": "keyword",
|
|
|
+ "doc_values": false
|
|
|
+ },
|
|
|
+ "zipcode": {
|
|
|
+ "type": "long",
|
|
|
+ "index": false
|
|
|
+ }
|
|
|
+ }
|
|
|
+ """);
|
|
|
+ // Validate document structure
|
|
|
+ SearchResponse searchResponse = client().search(new SearchRequest(".enrich-test1")).actionGet();
|
|
|
+ ElasticsearchAssertions.assertHitCount(searchResponse, 2L);
|
|
|
+ Map<String, Object> hit0 = searchResponse.getHits().getAt(0).getSourceAsMap();
|
|
|
+ assertThat(hit0, equalTo(Map.of("user", "u1", "name", "n", "zipcode", 90000)));
|
|
|
+ Map<String, Object> hit1 = searchResponse.getHits().getAt(1).getSourceAsMap();
|
|
|
+ assertThat(hit1, equalTo(Map.of("user", "u2", "name", Map.of("first", "f", "last", "l"), "zipcode", 90001)));
|
|
|
+ }
|
|
|
+
|
|
|
+ public void testEnrichMappingConflictFormats() {
|
|
|
+ createIndex("source-1", Settings.EMPTY, "_doc", "user", "type=keyword", "date", "type=date,format=yyyy");
|
|
|
+ client().prepareIndex("source-1")
|
|
|
+ .setSource("user", "u1", "date", "2023")
|
|
|
+ .setRefreshPolicy(WriteRequest.RefreshPolicy.IMMEDIATE)
|
|
|
+ .get();
|
|
|
+ createIndex("source-2", Settings.EMPTY, "_doc", "user", "type=keyword", "date", "type=date,format=yyyy-MM");
|
|
|
+
|
|
|
+ client().prepareIndex("source-2").setSource("""
|
|
|
+ {
|
|
|
+ "user": "u2",
|
|
|
+ "date": "2023-05"
|
|
|
+ }
|
|
|
+ """, XContentType.JSON).setRefreshPolicy(WriteRequest.RefreshPolicy.IMMEDIATE).get();
|
|
|
+
|
|
|
+ EnrichPolicy policy = new EnrichPolicy(EnrichPolicy.MATCH_TYPE, null, List.of("source-1", "source-2"), "user", List.of("date"));
|
|
|
+ String policyName = "test1";
|
|
|
+ final long createTime = randomNonNegativeLong();
|
|
|
+ String createdEnrichIndex = ".enrich-test1-" + createTime;
|
|
|
+ PlainActionFuture<ExecuteEnrichPolicyStatus> future = new PlainActionFuture<>();
|
|
|
+ EnrichPolicyRunner enrichPolicyRunner = createPolicyRunner(policyName, policy, future, createdEnrichIndex);
|
|
|
+ enrichPolicyRunner.run();
|
|
|
+ future.actionGet();
|
|
|
+
|
|
|
+ // Validate Index definition
|
|
|
+ GetIndexResponse enrichIndex = getGetIndexResponseAndCheck(createdEnrichIndex);
|
|
|
+ Map<String, Object> mapping = enrichIndex.getMappings().get(createdEnrichIndex).sourceAsMap();
|
|
|
+ assertEnrichMapping(mapping, """
|
|
|
+ {
|
|
|
+ "user": {
|
|
|
+ "type": "keyword",
|
|
|
+ "doc_values": false
|
|
|
+ }
|
|
|
+ }
|
|
|
+ """);
|
|
|
+ // Validate document structure
|
|
|
+ SearchResponse searchResponse = client().search(new SearchRequest(".enrich-test1")).actionGet();
|
|
|
+ ElasticsearchAssertions.assertHitCount(searchResponse, 2L);
|
|
|
+ Map<String, Object> hit0 = searchResponse.getHits().getAt(0).getSourceAsMap();
|
|
|
+ assertThat(hit0, equalTo(Map.of("user", "u1", "date", "2023")));
|
|
|
+ Map<String, Object> hit1 = searchResponse.getHits().getAt(1).getSourceAsMap();
|
|
|
+ assertThat(hit1, equalTo(Map.of("user", "u2", "date", "2023-05")));
|
|
|
+ }
|
|
|
+
|
|
|
private EnrichPolicyRunner createPolicyRunner(
|
|
|
String policyName,
|
|
|
EnrichPolicy policy,
|
|
@@ -2124,4 +2301,11 @@ public class EnrichPolicyRunnerTests extends ESSingleNodeTestCase {
|
|
|
|
|
|
assertThat(expected.getMessage(), containsString("index [" + createdEnrichIndex + "] blocked by: [FORBIDDEN/8/index write (api)]"));
|
|
|
}
|
|
|
+
|
|
|
+ private static void assertEnrichMapping(Map<String, Object> actual, String expectedMapping) {
|
|
|
+ assertThat(actual.get("dynamic"), is("false"));
|
|
|
+ Object actualProperties = actual.get("properties");
|
|
|
+ Map<String, Object> mappings = XContentHelper.convertToMap(JsonXContent.jsonXContent, expectedMapping, false);
|
|
|
+ assertThat(actualProperties, equalTo(mappings));
|
|
|
+ }
|
|
|
}
|