@Override public void buildSchema() throws IOException { SolrClient solrClient = null; try { solrClient = new CloudSolrClient(solrConfig.getZkHostString()); SchemaRequest schemaRequest = new SchemaRequest(); logger.debug("Downloading schema for collection: {}", collection); SchemaResponse schemaResponse = schemaRequest.process(solrClient, collection); logger.debug("SchemaResponse Schema: {}", schemaResponse); SchemaRepresentation schemaRepresentation = schemaResponse.getSchemaRepresentation(); schema.setName(schemaRepresentation.getName()); schema.setVersion(Float.toString(schemaRepresentation.getVersion())); schema.setUniqueKey(schemaRepresentation.getUniqueKey()); schema.setFieldTypes(getFieldTypes(schemaRepresentation)); schema.setFields(getFields(schemaRepresentation.getFields())); schema.setDynamicFields(getFields(schemaRepresentation.getDynamicFields())); schema.setCopyFields(getCopyFields(schemaRepresentation)); } catch (SolrServerException e) { logger.error("Error while getting schema for collection: {}", collection, e); throw new IOException("Error while getting schema for collection :" + collection, e); } finally { if (solrClient != null) { solrClient.close(); } } }
private static NamedList<Object> createAddFieldTypeNamedList(FieldTypeDefinition fieldTypeDefinition) { final NamedList<Object> addFieldTypeNamedList = new NamedList<>(); addFieldTypeNamedList.addAll(fieldTypeDefinition.getAttributes()); AnalyzerDefinition analyzerDefinition = fieldTypeDefinition.getAnalyzer(); if (analyzerDefinition != null) { NamedList<Object> analyzerNamedList = createAnalyzerNamedList(analyzerDefinition); addFieldTypeNamedList.add("analyzer", analyzerNamedList); } AnalyzerDefinition indexAnalyzerDefinition = fieldTypeDefinition.getIndexAnalyzer(); if (indexAnalyzerDefinition != null) { NamedList<Object> indexAnalyzerNamedList = createAnalyzerNamedList(indexAnalyzerDefinition); addFieldTypeNamedList.add("indexAnalyzer", indexAnalyzerNamedList); } AnalyzerDefinition queryAnalyzerDefinition = fieldTypeDefinition.getQueryAnalyzer(); if (queryAnalyzerDefinition != null) { NamedList<Object> queryAnalyzerNamedList = createAnalyzerNamedList(queryAnalyzerDefinition); addFieldTypeNamedList.add("queryAnalyzer", queryAnalyzerNamedList); } AnalyzerDefinition multiTermAnalyzerDefinition = fieldTypeDefinition.getMultiTermAnalyzer(); if (multiTermAnalyzerDefinition != null) { NamedList<Object> multiTermAnalyzerNamedList = createAnalyzerNamedList(multiTermAnalyzerDefinition); addFieldTypeNamedList.add("multiTermAnalyzer", multiTermAnalyzerNamedList); } Map<String, Object> similarityAttributes = fieldTypeDefinition.getSimilarity(); if (similarityAttributes != null && !similarityAttributes.isEmpty()) { addFieldTypeNamedList.add("similarity", new NamedList<>(similarityAttributes)); } return addFieldTypeNamedList; }
private static NamedList<Object> createAddFieldTypeNamedList(FieldTypeDefinition fieldTypeDefinition) { final NamedList<Object> addFieldTypeNamedList = new NamedList<>(); addFieldTypeNamedList.addAll(fieldTypeDefinition.getAttributes()); AnalyzerDefinition analyzerDefinition = fieldTypeDefinition.getAnalyzer(); if (analyzerDefinition != null) { NamedList<Object> analyzerNamedList = createAnalyzerNamedList(analyzerDefinition); addFieldTypeNamedList.add("analyzer", analyzerNamedList); } AnalyzerDefinition indexAnalyzerDefinition = fieldTypeDefinition.getIndexAnalyzer(); if (indexAnalyzerDefinition != null) { NamedList<Object> indexAnalyzerNamedList = createAnalyzerNamedList(indexAnalyzerDefinition); addFieldTypeNamedList.add("indexAnalyzer", indexAnalyzerNamedList); } AnalyzerDefinition queryAnalyzerDefinition = fieldTypeDefinition.getQueryAnalyzer(); if (queryAnalyzerDefinition != null) { NamedList<Object> queryAnalyzerNamedList = createAnalyzerNamedList(queryAnalyzerDefinition); addFieldTypeNamedList.add("queryAnalyzer", queryAnalyzerNamedList); } AnalyzerDefinition multiTermAnalyzerDefinition = fieldTypeDefinition.getMultiTermAnalyzer(); if (multiTermAnalyzerDefinition != null) { NamedList<Object> multiTermAnalyzerNamedList = createAnalyzerNamedList(multiTermAnalyzerDefinition); addFieldTypeNamedList.add("multiTermAnalyzer", multiTermAnalyzerNamedList); } Map<String, Object> similarityAttributes = fieldTypeDefinition.getSimilarity(); if (similarityAttributes != null && !similarityAttributes.isEmpty()) { addFieldTypeNamedList.add("similarity", new NamedList<>(similarityAttributes)); } return addFieldTypeNamedList; }
protected List<Map<String, Object>> getIndexFields(String index) throws IOException, SolrServerException { List<Map<String, Object>> indexFields = new ArrayList<>(); // Get all the fields in use, including dynamic fields LukeRequest lukeRequest = new LukeRequest(); LukeResponse lukeResponse = lukeRequest.process(client, index); for (Entry<String, LukeResponse.FieldInfo> field : lukeResponse.getFieldInfo().entrySet()) { Map<String, Object> fieldData = new HashMap<>(); fieldData.put("name", field.getValue().getName()); fieldData.put("type", field.getValue().getType()); indexFields.add(fieldData); } // Get all the schema fields SchemaRepresentation schemaRepresentation = new SchemaRequest().process(client, index) .getSchemaRepresentation(); indexFields.addAll(schemaRepresentation.getFields()); return indexFields; }
private void checkVersionAndSchema() { //check schema try { final SchemaResponse response = new SchemaRequest().process(solrClient); final Path localSchema = FileSystemUtils.toPath(Resources.getResource("solrhome/core/conf/schema.xml")); SolrSchemaChecker.checkSchema(localSchema, response); } catch (SolrServerException e) { log.error("Cannot get schema for solr client", e); throw new RuntimeException(e); } catch (URISyntaxException | IOException e) { log.error("Cannot read schema", e); throw new RuntimeException(e); } catch (SchemaValidationException e) { log.error("Schema is not valid for library", e); throw new RuntimeException(e); } }
@Override public SchemaDefinition readSchema() { SchemaRepresentation representation = template .execute(solrClient -> new SchemaRequest().process(solrClient, collection).getSchemaRepresentation()); SchemaDefinition sd = new SchemaDefinition(collection); for (Map<String, Object> fieldValueMap : representation.getFields()) { sd.addFieldDefinition(FieldDefinition.fromMap(fieldValueMap)); } for (Map<String, Object> fieldValueMap : representation.getCopyFields()) { CopyFieldDefinition cf = CopyFieldDefinition.fromMap(fieldValueMap); sd.addCopyField(cf); if (sd.getFieldDefinition(cf.getSource()) != null) { sd.getFieldDefinition(cf.getSource()).setCopyFields(cf.getDestination()); } } return sd; }