public synchronized void init(InputStream schema, InputStream data) {
   try {
     collector = new DataCollector();
     parser = new SchemaParser();
     queryMetadata = parser.parse(schema);
     fieldValues = collector.collectValues(data);
     for (String facet : queryMetadata.getFacetsPerType().get(FacetType.multi)) {
       collector.postProcessMultiValues(facet, fieldValues);
     }
     selectionGenerator = new SelectionGenerator(fieldValues, queryMetadata);
   } catch (Exception ex) {
     throw new RuntimeException(ex);
   } finally {
     IOUtils.closeQuietly(schema);
     IOUtils.closeQuietly(data);
   }
 }