Skip to content

Commit

Permalink
Fix #315 missing subfield when indexing a doc with 2 or more new subf…
Browse files Browse the repository at this point in the history
…ields
  • Loading branch information
vroyer committed Dec 19, 2019
1 parent a9e8735 commit 687466f
Show file tree
Hide file tree
Showing 2 changed files with 106 additions and 2 deletions.
Expand Up @@ -289,6 +289,7 @@ private Pair<KeyspaceMetadata, UserType> createOrUpdateUserType(KeyspaceMetadata
if (!userTypeOption.isPresent()) {
return createUserTypeIfNotExists(ksm, typeName, fields, mutations, events);
} else {
KeyspaceMetadata ksmOut = ksm;
UserType userType = userTypeOption.get();
UTName name = new UTName(new ColumnIdentifier(ksm.name, true), ci);
logger.trace("update keyspace.type=[{}].[{}] fields={}", ksm.name, typeName, fields);
Expand All @@ -299,15 +300,16 @@ private Pair<KeyspaceMetadata, UserType> createOrUpdateUserType(KeyspaceMetadata
// add missing field
logger.trace("add field to keyspace.type=[{}].[{}] field={}", ksm.name, typeName, fieldIdentifier);
AlterTypeStatement ats = AlterTypeStatement.addition(name, fieldIdentifier, field.getValue());
userType = ats.updateUserType(ksm, mutations, events);
userType = ats.updateUserType(ksmOut, mutations, events);
ksmOut = ksmOut.withSwapped(ksmOut.types.without(userType.name).with(userType));
} else {
if (!userType.fieldType(i).asCQL3Type().equals(field.getValue().prepare(ksm)))
throw new InvalidRequestException(
String.format(Locale.ROOT, "Field \"%s\" with type %s does not match type %s",
field.getKey(), userType.fieldType(i).asCQL3Type(), field.getValue().prepare(ksm)));
}
}
return Pair.create(ksm, userType);
return Pair.create(ksmOut, userType);
}
}

Expand Down
102 changes: 102 additions & 0 deletions server/src/test/java/org/elassandra/CqlTypesTests.java
Expand Up @@ -688,6 +688,108 @@ public void testNestedSets() throws Exception {
assertThat(client().prepareSearch().setIndices("test").setTypes("make_models").setQuery(QueryBuilders.nestedQuery("models", QueryBuilders.termQuery("models.name", "galaxie"), RandomPicks.randomFrom(random(), ScoreMode.values()))).get().getHits().getTotalHits(), equalTo(1L));
}

// #315 Nested objects' fields not indexed
public void testNestedFieldMappingUpdate() throws Exception {
XContentBuilder mapping = XContentFactory.jsonBuilder()
.startObject()
.startObject("properties")
.startObject("nested")
.field("type", "nested")
.endObject()
.endObject()
.endObject();
assertAcked(client().admin().indices().prepareCreate("test-issue-index").addMapping("test-issue", mapping));
ensureGreen("test-issue-index");

assertThat(client().prepareIndex("test-issue-index", "test-issue","0")
.setSource("{\n" +
"\"fieldA\": \"A\",\n" +
"\"fieldB\": \"B\"" +
"}", XContentType.JSON)
.get().getResult(), equalTo(DocWriteResponse.Result.CREATED));

assertThat(client().prepareIndex("test-issue-index", "test-issue","1")
.setSource("{\n" +
"\"fieldA\": \"A\",\n" +
"\"fieldB\": \"B\",\n" +
"\"nested\": {\n" +
" \"fieldC\": \"C\",\n" +
" \"fieldD\": \"D\",\n" +
" \"fieldE\": \"E\",\n" +
" \"fieldF\": \"F\"\n" +
" }\n" +
"}", XContentType.JSON)
.get().getResult(), equalTo(DocWriteResponse.Result.CREATED));

assertThat(client().prepareIndex("test-issue-index", "test-issue","2")
.setSource("{\n" +
"\"fieldA\": \"A\",\n" +
"\"fieldB\": \"B\",\n" +
"\"nested\": {\n" +
" \"fieldG\": \"G\",\n" +
" \"fieldH\": \"H\",\n" +
" \"fieldI\": \"I\",\n" +
" \"fieldJ\": \"J\"\n" +
" }\n" +
"}", XContentType.JSON)
.get().getResult(), equalTo(DocWriteResponse.Result.CREATED));


SearchResponse resp = client().prepareSearch().setIndices("test-issue-index")
.setTypes("test-issue")
.setQuery(QueryBuilders.matchAllQuery())
.setFetchSource(true)
.get();
System.out.println("hits[0]="+resp.getHits().getHits()[0].getSourceAsString());
System.out.println("hits[1]="+resp.getHits().getHits()[1].getSourceAsString());
System.out.println("hits[2]="+resp.getHits().getHits()[2].getSourceAsString());

assertThat(resp.getHits().getTotalHits(), equalTo(3L));

assertThat(client().prepareSearch().setIndices("test-issue-index")
.setTypes("test-issue")
.setQuery(QueryBuilders.termQuery("fieldA.keyword", "A"))
.get().getHits().getTotalHits(), equalTo(3L));
assertThat(client().prepareSearch().setIndices("test-issue-index")
.setTypes("test-issue")
.setQuery(QueryBuilders.termQuery("fieldB.keyword", "B"))
.get().getHits().getTotalHits(), equalTo(3L));

assertThat(client().prepareSearch().setIndices("test-issue-index")
.setTypes("test-issue")
.setQuery(QueryBuilders.nestedQuery("nested", QueryBuilders.termQuery("nested.fieldC.keyword", "C"), RandomPicks.randomFrom(random(), ScoreMode.values())))
.get().getHits().getTotalHits(), equalTo(1L));
assertThat(client().prepareSearch().setIndices("test-issue-index")
.setTypes("test-issue")
.setQuery(QueryBuilders.nestedQuery("nested", QueryBuilders.termQuery("nested.fieldD.keyword", "D"), RandomPicks.randomFrom(random(), ScoreMode.values())))
.get().getHits().getTotalHits(), equalTo(1L));
assertThat(client().prepareSearch().setIndices("test-issue-index")
.setTypes("test-issue")
.setQuery(QueryBuilders.nestedQuery("nested", QueryBuilders.termQuery("nested.fieldE.keyword", "E"), RandomPicks.randomFrom(random(), ScoreMode.values())))
.get().getHits().getTotalHits(), equalTo(1L));
assertThat(client().prepareSearch().setIndices("test-issue-index")
.setTypes("test-issue")
.setQuery(QueryBuilders.nestedQuery("nested", QueryBuilders.termQuery("nested.fieldF.keyword", "F"), RandomPicks.randomFrom(random(), ScoreMode.values())))
.get().getHits().getTotalHits(), equalTo(1L));
assertThat(client().prepareSearch().setIndices("test-issue-index")
.setTypes("test-issue")
.setQuery(QueryBuilders.nestedQuery("nested", QueryBuilders.termQuery("nested.fieldG.keyword", "G"), RandomPicks.randomFrom(random(), ScoreMode.values())))
.get().getHits().getTotalHits(), equalTo(1L));
assertThat(client().prepareSearch().setIndices("test-issue-index")
.setTypes("test-issue")
.setQuery(QueryBuilders.nestedQuery("nested", QueryBuilders.termQuery("nested.fieldH.keyword", "H"), RandomPicks.randomFrom(random(), ScoreMode.values())))
.get().getHits().getTotalHits(), equalTo(1L));
assertThat(client().prepareSearch().setIndices("test-issue-index")
.setTypes("test-issue")
.setQuery(QueryBuilders.nestedQuery("nested", QueryBuilders.termQuery("nested.fieldI.keyword", "I"), RandomPicks.randomFrom(random(), ScoreMode.values())))
.get().getHits().getTotalHits(), equalTo(1L));
assertThat(client().prepareSearch().setIndices("test-issue-index")
.setTypes("test-issue")
.setQuery(QueryBuilders.nestedQuery("nested", QueryBuilders.termQuery("nested.fieldJ.keyword", "J"), RandomPicks.randomFrom(random(), ScoreMode.values())))
.get().getHits().getTotalHits(), equalTo(1L));

}

// #197 Deletion of a List element removes the document on ES
public void testDeleteInUDTList() throws Exception {
createIndex("test");
Expand Down

0 comments on commit 687466f

Please sign in to comment.