From 7bc26d1edd6454bf9ea1c396ed7fd2e9635995ea Mon Sep 17 00:00:00 2001 From: Martijn van Groningen Date: Mon, 13 Jul 2015 22:33:04 +0200 Subject: [PATCH] percolator: Don't throw NPE when percolating a document that has a _parent field configured in its mapping Closes #12192 --- .../mapper/internal/ParentFieldMapper.java | 4 +++- .../percolator/PercolatorTests.java | 18 +++++++++++++++++- 2 files changed, 20 insertions(+), 2 deletions(-) diff --git a/core/src/main/java/org/elasticsearch/index/mapper/internal/ParentFieldMapper.java b/core/src/main/java/org/elasticsearch/index/mapper/internal/ParentFieldMapper.java index a20dc0e4192..5fcd10c0842 100644 --- a/core/src/main/java/org/elasticsearch/index/mapper/internal/ParentFieldMapper.java +++ b/core/src/main/java/org/elasticsearch/index/mapper/internal/ParentFieldMapper.java @@ -249,7 +249,9 @@ public class ParentFieldMapper extends MetadataFieldMapper { @Override public void postParse(ParseContext context) throws IOException { - parse(context); + if (context.sourceToParse().flyweight() == false) { + parse(context); + } } @Override diff --git a/core/src/test/java/org/elasticsearch/percolator/PercolatorTests.java b/core/src/test/java/org/elasticsearch/percolator/PercolatorTests.java index c21634d2e0e..91fd2af3bd1 100644 --- a/core/src/test/java/org/elasticsearch/percolator/PercolatorTests.java +++ b/core/src/test/java/org/elasticsearch/percolator/PercolatorTests.java @@ -2054,7 +2054,7 @@ public class PercolatorTests extends ElasticsearchIntegrationTest { @Test public void testParentChild() throws Exception { - // We don't fail p/c queries, but those queries are unsuable because only one document can be provided in + // We don't fail p/c queries, but those queries are unusable because only a single document can be provided in // the percolate api assertAcked(prepareCreate("index").addMapping("child", "_parent", "type=parent").addMapping("parent")); @@ -2063,5 +2063,21 @@ public class PercolatorTests extends ElasticsearchIntegrationTest { .execute().actionGet(); } + @Test + public void testPercolateDocumentWithParentField() throws Exception { + assertAcked(prepareCreate("index").addMapping("child", "_parent", "type=parent").addMapping("parent")); + client().prepareIndex("index", PercolatorService.TYPE_NAME, "1") + .setSource(jsonBuilder().startObject().field("query", matchAllQuery()).endObject()) + .execute().actionGet(); + + // Just percolating a document that has a _parent field in its mapping should just work: + PercolateResponse response = client().preparePercolate() + .setDocumentType("parent") + .setPercolateDoc(new PercolateSourceBuilder.DocBuilder().setDoc("field", "value")) + .get(); + assertMatchCount(response, 1); + assertThat(response.getMatches()[0].getId().string(), equalTo("1")); + } + }