FieldMapping { public boolean isPropertyField() { int numOfDots = StringUtils.countMatches(fieldName, '.'); return numOfDots > 1 || (numOfDots == 1 && !isMultiField()); } FieldMapping(String fieldName);  FieldMapping(String fieldName,
                        Map<String, FieldMappingMetadata> typeMappings,
                        Map<String, Field> specifiedFieldByNames); boolean isSpecified(); boolean isWildcardSpecified(); boolean isPropertyField(); boolean isMultiField(); boolean isMetaField(); String path(); @SuppressWarnings("unchecked") String type();  }
@Test public void testFieldIsProperty() { assertThat( new FieldMapping("employee.first"), isPropertyField(true) ); }
@Test public void testNestedMultiFieldIsProperty() { assertThat( new FieldMapping("employee.first.keyword"), isPropertyField(true) ); }
@Test public void testFieldIsNotProperty() { assertThat( new FieldMapping("employee"), isPropertyField(false) ); }
@Test public void testMultiFieldIsNotProperty() { assertThat( new FieldMapping("employee.keyword"), isPropertyField(false) ); }