List of usage examples for org.apache.solr.schema SchemaField hasDocValues
public boolean hasDocValues()
From source file:org.alfresco.solr.transformer.DocValueDocTransformer.java
License:Open Source License
@Override public void transform(SolrDocument doc, int docid, float score) throws IOException { for (String fieldName : context.getSearcher().getFieldNames()) { SchemaField schemaField = context.getSearcher().getSchema().getFieldOrNull(fieldName); if (schemaField != null) { if (schemaField.hasDocValues()) { SortedDocValues sortedDocValues = context.getSearcher().getSlowAtomicReader() .getSortedDocValues(fieldName); if (sortedDocValues != null) { int ordinal = sortedDocValues.getOrd(docid); if (ordinal > -1) { doc.removeFields(fieldName); String alfrescoFieldName = AlfrescoSolrDataModel.getInstance() .getAlfrescoPropertyFromSchemaField(fieldName); doc.removeFields(alfrescoFieldName); doc.addField(alfrescoFieldName, schemaField.getType().toObject(schemaField, sortedDocValues.lookupOrd(ordinal))); }//from w w w .j av a2s .co m } SortedSetDocValues sortedSetDocValues = context.getSearcher().getSlowAtomicReader() .getSortedSetDocValues(fieldName); if (sortedSetDocValues != null) { ArrayList<Object> newValues = new ArrayList<Object>(); sortedSetDocValues.setDocument(docid); long ordinal; while ((ordinal = sortedSetDocValues.nextOrd()) != SortedSetDocValues.NO_MORE_ORDS) { newValues.add(schemaField.getType().toObject(schemaField, sortedSetDocValues.lookupOrd(ordinal))); } doc.removeFields(fieldName); String alfrescoFieldName = AlfrescoSolrDataModel.getInstance() .getAlfrescoPropertyFromSchemaField(fieldName); doc.removeFields(alfrescoFieldName); doc.addField(alfrescoFieldName, newValues); } BinaryDocValues binaryDocValues = context.getSearcher().getSlowAtomicReader() .getBinaryDocValues(fieldName); if (binaryDocValues != null) { doc.removeFields(fieldName); String alfrescoFieldName = AlfrescoSolrDataModel.getInstance() .getAlfrescoPropertyFromSchemaField(fieldName); doc.removeFields(alfrescoFieldName); doc.addField(alfrescoFieldName, schemaField.getType().toObject(schemaField, binaryDocValues.get(docid))); } if (schemaField.getType().getNumericType() != null) { NumericDocValues numericDocValues = context.getSearcher().getSlowAtomicReader() .getNumericDocValues(fieldName); if (numericDocValues != null) { doc.removeFields(fieldName); String alfrescoFieldName = AlfrescoSolrDataModel.getInstance() .getAlfrescoPropertyFromSchemaField(fieldName); doc.removeFields(alfrescoFieldName); switch (schemaField.getType().getNumericType()) { case DOUBLE: doc.addField(alfrescoFieldName, Double.longBitsToDouble(numericDocValues.get(docid))); break; case FLOAT: doc.addField(alfrescoFieldName, Float.intBitsToFloat((int) numericDocValues.get(docid))); break; case INT: doc.addField(alfrescoFieldName, (int) numericDocValues.get(docid)); break; case LONG: doc.addField(alfrescoFieldName, numericDocValues.get(docid)); break; } } SortedNumericDocValues sortedNumericDocValues = context.getSearcher().getSlowAtomicReader() .getSortedNumericDocValues(fieldName); if (sortedNumericDocValues != null) { sortedNumericDocValues.setDocument(docid); doc.removeFields(fieldName); String alfrescoFieldName = AlfrescoSolrDataModel.getInstance() .getAlfrescoPropertyFromSchemaField(fieldName); doc.removeFields(alfrescoFieldName); ArrayList<Object> newValues = new ArrayList<Object>(sortedNumericDocValues.count()); if (sortedNumericDocValues.count() > 0) { for (int i = 0; i < sortedNumericDocValues.count(); i++) { switch (schemaField.getType().getNumericType()) { case DOUBLE: newValues.add(NumericUtils .sortableLongToDouble(sortedNumericDocValues.valueAt(i))); break; case FLOAT: newValues.add(NumericUtils .sortableIntToFloat((int) sortedNumericDocValues.valueAt(i))); break; case INT: newValues.add((int) sortedNumericDocValues.valueAt(i)); break; case LONG: newValues.add(sortedNumericDocValues.valueAt(i)); break; } } } doc.addField(alfrescoFieldName, newValues); } } } } } }