Renamed `add` processor to `set` processor.
This name makes more sense, because if a field already exists it overwrites it.
This commit is contained in:
parent
43b861b076
commit
fdf4543b8e
|
@ -3,14 +3,14 @@
|
||||||
|
|
||||||
=== Processors
|
=== Processors
|
||||||
|
|
||||||
==== Add processor
|
==== Set processor
|
||||||
Adds one or more fields and associates them with the specified values. If a field already exists,
|
Sets one or more fields and associates them with the specified values. If a field already exists,
|
||||||
its value will be replaced with the provided one.
|
its value will be replaced with the provided one.
|
||||||
|
|
||||||
[source,js]
|
[source,js]
|
||||||
--------------------------------------------------
|
--------------------------------------------------
|
||||||
{
|
{
|
||||||
"add": {
|
"set": {
|
||||||
"fields": {
|
"fields": {
|
||||||
"field": 582.1
|
"field": 582.1
|
||||||
}
|
}
|
||||||
|
|
|
@ -17,7 +17,7 @@
|
||||||
* under the License.
|
* under the License.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
package org.elasticsearch.ingest.processor.add;
|
package org.elasticsearch.ingest.processor.set;
|
||||||
|
|
||||||
import org.elasticsearch.ingest.IngestDocument;
|
import org.elasticsearch.ingest.IngestDocument;
|
||||||
import org.elasticsearch.ingest.processor.ConfigurationUtils;
|
import org.elasticsearch.ingest.processor.ConfigurationUtils;
|
||||||
|
@ -31,13 +31,13 @@ import java.util.Map;
|
||||||
* Processor that adds new fields with their corresponding values. If the field is already present, its value
|
* Processor that adds new fields with their corresponding values. If the field is already present, its value
|
||||||
* will be replaced with the provided one.
|
* will be replaced with the provided one.
|
||||||
*/
|
*/
|
||||||
public class AddProcessor implements Processor {
|
public class SetProcessor implements Processor {
|
||||||
|
|
||||||
public static final String TYPE = "add";
|
public static final String TYPE = "set";
|
||||||
|
|
||||||
private final Map<String, Object> fields;
|
private final Map<String, Object> fields;
|
||||||
|
|
||||||
AddProcessor(Map<String, Object> fields) {
|
SetProcessor(Map<String, Object> fields) {
|
||||||
this.fields = fields;
|
this.fields = fields;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -57,11 +57,11 @@ public class AddProcessor implements Processor {
|
||||||
return TYPE;
|
return TYPE;
|
||||||
}
|
}
|
||||||
|
|
||||||
public static final class Factory implements Processor.Factory<AddProcessor> {
|
public static final class Factory implements Processor.Factory<SetProcessor> {
|
||||||
@Override
|
@Override
|
||||||
public AddProcessor create(Map<String, Object> config) throws IOException {
|
public SetProcessor create(Map<String, Object> config) throws IOException {
|
||||||
Map<String, Object> fields = ConfigurationUtils.readMap(config, "fields");
|
Map<String, Object> fields = ConfigurationUtils.readMap(config, "fields");
|
||||||
return new AddProcessor(Collections.unmodifiableMap(fields));
|
return new SetProcessor(Collections.unmodifiableMap(fields));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
|
@ -22,7 +22,7 @@ package org.elasticsearch.plugin.ingest;
|
||||||
import org.elasticsearch.common.inject.AbstractModule;
|
import org.elasticsearch.common.inject.AbstractModule;
|
||||||
import org.elasticsearch.common.inject.multibindings.MapBinder;
|
import org.elasticsearch.common.inject.multibindings.MapBinder;
|
||||||
import org.elasticsearch.ingest.processor.Processor;
|
import org.elasticsearch.ingest.processor.Processor;
|
||||||
import org.elasticsearch.ingest.processor.add.AddProcessor;
|
import org.elasticsearch.ingest.processor.set.SetProcessor;
|
||||||
import org.elasticsearch.ingest.processor.convert.ConvertProcessor;
|
import org.elasticsearch.ingest.processor.convert.ConvertProcessor;
|
||||||
import org.elasticsearch.ingest.processor.date.DateProcessor;
|
import org.elasticsearch.ingest.processor.date.DateProcessor;
|
||||||
import org.elasticsearch.ingest.processor.geoip.GeoIpProcessor;
|
import org.elasticsearch.ingest.processor.geoip.GeoIpProcessor;
|
||||||
|
@ -56,7 +56,7 @@ public class IngestModule extends AbstractModule {
|
||||||
addProcessor(GeoIpProcessor.TYPE, new GeoIpProcessor.Factory());
|
addProcessor(GeoIpProcessor.TYPE, new GeoIpProcessor.Factory());
|
||||||
addProcessor(GrokProcessor.TYPE, new GrokProcessor.Factory());
|
addProcessor(GrokProcessor.TYPE, new GrokProcessor.Factory());
|
||||||
addProcessor(DateProcessor.TYPE, new DateProcessor.Factory());
|
addProcessor(DateProcessor.TYPE, new DateProcessor.Factory());
|
||||||
addProcessor(AddProcessor.TYPE, new AddProcessor.Factory());
|
addProcessor(SetProcessor.TYPE, new SetProcessor.Factory());
|
||||||
addProcessor(RenameProcessor.TYPE, new RenameProcessor.Factory());
|
addProcessor(RenameProcessor.TYPE, new RenameProcessor.Factory());
|
||||||
addProcessor(RemoveProcessor.TYPE, new RemoveProcessor.Factory());
|
addProcessor(RemoveProcessor.TYPE, new RemoveProcessor.Factory());
|
||||||
addProcessor(SplitProcessor.TYPE, new SplitProcessor.Factory());
|
addProcessor(SplitProcessor.TYPE, new SplitProcessor.Factory());
|
||||||
|
|
|
@ -17,9 +17,8 @@
|
||||||
* under the License.
|
* under the License.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
package org.elasticsearch.ingest.processor.add;
|
package org.elasticsearch.ingest.processor.set;
|
||||||
|
|
||||||
import org.elasticsearch.ingest.processor.join.JoinProcessor;
|
|
||||||
import org.elasticsearch.test.ESTestCase;
|
import org.elasticsearch.test.ESTestCase;
|
||||||
|
|
||||||
import java.io.IOException;
|
import java.io.IOException;
|
||||||
|
@ -29,19 +28,19 @@ import java.util.Map;
|
||||||
|
|
||||||
import static org.hamcrest.CoreMatchers.equalTo;
|
import static org.hamcrest.CoreMatchers.equalTo;
|
||||||
|
|
||||||
public class AddProcessorFactoryTests extends ESTestCase {
|
public class SetProcessorFactoryTests extends ESTestCase {
|
||||||
|
|
||||||
public void testCreate() throws IOException {
|
public void testCreate() throws IOException {
|
||||||
AddProcessor.Factory factory = new AddProcessor.Factory();
|
SetProcessor.Factory factory = new SetProcessor.Factory();
|
||||||
Map<String, Object> config = new HashMap<>();
|
Map<String, Object> config = new HashMap<>();
|
||||||
Map<String, String> fields = Collections.singletonMap("field1", "value1");
|
Map<String, String> fields = Collections.singletonMap("field1", "value1");
|
||||||
config.put("fields", fields);
|
config.put("fields", fields);
|
||||||
AddProcessor addProcessor = factory.create(config);
|
SetProcessor setProcessor = factory.create(config);
|
||||||
assertThat(addProcessor.getFields(), equalTo(fields));
|
assertThat(setProcessor.getFields(), equalTo(fields));
|
||||||
}
|
}
|
||||||
|
|
||||||
public void testCreateMissingFields() throws IOException {
|
public void testCreateMissingFields() throws IOException {
|
||||||
AddProcessor.Factory factory = new AddProcessor.Factory();
|
SetProcessor.Factory factory = new SetProcessor.Factory();
|
||||||
Map<String, Object> config = new HashMap<>();
|
Map<String, Object> config = new HashMap<>();
|
||||||
try {
|
try {
|
||||||
factory.create(config);
|
factory.create(config);
|
|
@ -17,22 +17,20 @@
|
||||||
* under the License.
|
* under the License.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
package org.elasticsearch.ingest.processor.add;
|
package org.elasticsearch.ingest.processor.set;
|
||||||
|
|
||||||
import org.elasticsearch.ingest.IngestDocument;
|
import org.elasticsearch.ingest.IngestDocument;
|
||||||
import org.elasticsearch.ingest.RandomDocumentPicks;
|
import org.elasticsearch.ingest.RandomDocumentPicks;
|
||||||
import org.elasticsearch.ingest.processor.Processor;
|
import org.elasticsearch.ingest.processor.Processor;
|
||||||
import org.elasticsearch.test.ESTestCase;
|
import org.elasticsearch.test.ESTestCase;
|
||||||
|
|
||||||
import java.util.Collections;
|
import java.util.*;
|
||||||
import java.util.HashMap;
|
|
||||||
import java.util.Map;
|
|
||||||
|
|
||||||
import static org.hamcrest.Matchers.equalTo;
|
import static org.hamcrest.Matchers.equalTo;
|
||||||
|
|
||||||
public class AddProcessorTests extends ESTestCase {
|
public class SetProcessorTests extends ESTestCase {
|
||||||
|
|
||||||
public void testAddExistingFields() throws Exception {
|
public void testSetExistingFields() throws Exception {
|
||||||
IngestDocument ingestDocument = RandomDocumentPicks.randomIngestDocument(random());
|
IngestDocument ingestDocument = RandomDocumentPicks.randomIngestDocument(random());
|
||||||
int numFields = randomIntBetween(1, 5);
|
int numFields = randomIntBetween(1, 5);
|
||||||
Map<String, Object> fields = new HashMap<>();
|
Map<String, Object> fields = new HashMap<>();
|
||||||
|
@ -41,7 +39,7 @@ public class AddProcessorTests extends ESTestCase {
|
||||||
Object fieldValue = RandomDocumentPicks.randomFieldValue(random());
|
Object fieldValue = RandomDocumentPicks.randomFieldValue(random());
|
||||||
fields.put(fieldName, fieldValue);
|
fields.put(fieldName, fieldValue);
|
||||||
}
|
}
|
||||||
Processor processor = new AddProcessor(fields);
|
Processor processor = new SetProcessor(fields);
|
||||||
processor.execute(ingestDocument);
|
processor.execute(ingestDocument);
|
||||||
|
|
||||||
for (Map.Entry<String, Object> field : fields.entrySet()) {
|
for (Map.Entry<String, Object> field : fields.entrySet()) {
|
||||||
|
@ -50,7 +48,7 @@ public class AddProcessorTests extends ESTestCase {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
public void testAddNewFields() throws Exception {
|
public void testSetNewFields() throws Exception {
|
||||||
IngestDocument ingestDocument = RandomDocumentPicks.randomIngestDocument(random(), new HashMap<>());
|
IngestDocument ingestDocument = RandomDocumentPicks.randomIngestDocument(random(), new HashMap<>());
|
||||||
//used to verify that there are no conflicts between subsequent fields going to be added
|
//used to verify that there are no conflicts between subsequent fields going to be added
|
||||||
IngestDocument testIngestDocument = RandomDocumentPicks.randomIngestDocument(random(), new HashMap<>());
|
IngestDocument testIngestDocument = RandomDocumentPicks.randomIngestDocument(random(), new HashMap<>());
|
||||||
|
@ -61,7 +59,7 @@ public class AddProcessorTests extends ESTestCase {
|
||||||
String fieldName = RandomDocumentPicks.addRandomField(random(), testIngestDocument, fieldValue);
|
String fieldName = RandomDocumentPicks.addRandomField(random(), testIngestDocument, fieldValue);
|
||||||
fields.put(fieldName, fieldValue);
|
fields.put(fieldName, fieldValue);
|
||||||
}
|
}
|
||||||
Processor processor = new AddProcessor(fields);
|
Processor processor = new SetProcessor(fields);
|
||||||
processor.execute(ingestDocument);
|
processor.execute(ingestDocument);
|
||||||
for (Map.Entry<String, Object> field : fields.entrySet()) {
|
for (Map.Entry<String, Object> field : fields.entrySet()) {
|
||||||
assertThat(ingestDocument.hasField(field.getKey()), equalTo(true));
|
assertThat(ingestDocument.hasField(field.getKey()), equalTo(true));
|
||||||
|
@ -69,10 +67,10 @@ public class AddProcessorTests extends ESTestCase {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
public void testAddFieldsTypeMismatch() throws Exception {
|
public void testSetFieldsTypeMismatch() throws Exception {
|
||||||
IngestDocument ingestDocument = RandomDocumentPicks.randomIngestDocument(random(), new HashMap<>());
|
IngestDocument ingestDocument = RandomDocumentPicks.randomIngestDocument(random(), new HashMap<>());
|
||||||
ingestDocument.setFieldValue("field", "value");
|
ingestDocument.setFieldValue("field", "value");
|
||||||
Processor processor = new AddProcessor(Collections.singletonMap("field.inner", "value"));
|
Processor processor = new SetProcessor(Collections.singletonMap("field.inner", "value"));
|
||||||
try {
|
try {
|
||||||
processor.execute(ingestDocument);
|
processor.execute(ingestDocument);
|
||||||
fail("processor execute should have failed");
|
fail("processor execute should have failed");
|
|
@ -12,7 +12,7 @@
|
||||||
"description": "_description",
|
"description": "_description",
|
||||||
"processors": [
|
"processors": [
|
||||||
{
|
{
|
||||||
"add" : {
|
"set" : {
|
||||||
"fields" : {
|
"fields" : {
|
||||||
"field2": "_value"
|
"field2": "_value"
|
||||||
}
|
}
|
||||||
|
|
|
@ -12,7 +12,7 @@
|
||||||
"description": "_description",
|
"description": "_description",
|
||||||
"processors": [
|
"processors": [
|
||||||
{
|
{
|
||||||
"add" : {
|
"set" : {
|
||||||
"fields" : {
|
"fields" : {
|
||||||
"new_field": "new_value"
|
"new_field": "new_value"
|
||||||
}
|
}
|
||||||
|
|
|
@ -12,7 +12,7 @@
|
||||||
"description": "_description",
|
"description": "_description",
|
||||||
"processors": [
|
"processors": [
|
||||||
{
|
{
|
||||||
"add" : {
|
"set" : {
|
||||||
"fields" : {
|
"fields" : {
|
||||||
"field2" : "_value"
|
"field2" : "_value"
|
||||||
}
|
}
|
||||||
|
@ -66,7 +66,7 @@
|
||||||
"description": "_description",
|
"description": "_description",
|
||||||
"processors": [
|
"processors": [
|
||||||
{
|
{
|
||||||
"add" : {
|
"set" : {
|
||||||
"fields" : {
|
"fields" : {
|
||||||
"field2" : "_value"
|
"field2" : "_value"
|
||||||
}
|
}
|
||||||
|
@ -129,14 +129,14 @@
|
||||||
"description": "_description",
|
"description": "_description",
|
||||||
"processors": [
|
"processors": [
|
||||||
{
|
{
|
||||||
"add" : {
|
"set" : {
|
||||||
"fields" : {
|
"fields" : {
|
||||||
"field2" : "_value"
|
"field2" : "_value"
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"add" : {
|
"set" : {
|
||||||
"fields" : {
|
"fields" : {
|
||||||
"field3" : "third_val"
|
"field3" : "third_val"
|
||||||
}
|
}
|
||||||
|
@ -157,7 +157,7 @@
|
||||||
}
|
}
|
||||||
- length: { docs: 1 }
|
- length: { docs: 1 }
|
||||||
- length: { docs.0.processor_results: 2 }
|
- length: { docs.0.processor_results: 2 }
|
||||||
- match: { docs.0.processor_results.0.processor_id: "processor[add]-0" }
|
- match: { docs.0.processor_results.0.processor_id: "processor[set]-0" }
|
||||||
- is_true: docs.0.processor_results.0.doc.modified
|
- is_true: docs.0.processor_results.0.doc.modified
|
||||||
- length: { docs.0.processor_results.0.doc._source: 2 }
|
- length: { docs.0.processor_results.0.doc._source: 2 }
|
||||||
- match: { docs.0.processor_results.0.doc._source.foo: "bar" }
|
- match: { docs.0.processor_results.0.doc._source.foo: "bar" }
|
||||||
|
|
Loading…
Reference in New Issue