Example usage for org.apache.solr.common SolrDocument getFieldValuesMap

List of usage examples for org.apache.solr.common SolrDocument getFieldValuesMap

Introduction

In this page you can find the example usage for org.apache.solr.common SolrDocument getFieldValuesMap.

Prototype

public Map<String, Collection<Object>> getFieldValuesMap() 

Source Link

Document

Expose a Map interface to the solr field value collection.

Usage

From source file:com.smartitengineering.dao.solr.impl.DefaultSolrDao.java

License:Open Source License

@Override
public SearchResult<MultivalueMap<String, Object>> getResult(SolrParams query) {
    boolean success = true;
    List<MultivalueMap<String, Object>> list = new ArrayList<MultivalueMap<String, Object>>();
    SearchResult<MultivalueMap<String, Object>> result = null;
    try {/*from  ww w .  ja va 2  s .c  om*/
        final SolrServer solrServer = serverFactory.getSolrServer();
        QueryResponse response = solrServer.query(query);
        success = response.getStatus() == 0 && success;
        if (success) {
            SolrDocumentList documentList = response.getResults();
            if (logger.isInfoEnabled()) {
                logger.info("Solr Document List " + documentList);
            }
            if (documentList.getMaxScore() == null) {
                result = new SearchResult<MultivalueMap<String, Object>>(list, documentList.getNumFound());
            } else {
                result = new SearchResult<MultivalueMap<String, Object>>(list, documentList.getNumFound(),
                        documentList.getMaxScore());
            }
            for (SolrDocument document : documentList) {
                MultivalueMap<String, Object> map = new MultivalueMapImpl<String, Object>();
                list.add(map);
                Map<String, Collection<Object>> values = document.getFieldValuesMap();
                for (String key : values.keySet()) {
                    Collection<Object> oValues = values.get(key);
                    for (Object value : oValues) {
                        map.addValue(key, value);
                    }
                }
            }
        }
    } catch (Exception ex) {
        logger.error("Could not search from solr index", ex);
        success = false;
    }
    if (result == null) {
        result = new SearchResult<MultivalueMap<String, Object>>(list);
    }
    return result;
}

From source file:com.villemos.ispace.consolidator.ReferenceBooster.java

License:Open Source License

protected void configureExchange(Exchange exchange, SolrDocument document) {
    /** Iterate through all solr fields and set them in the header. */
    for (String key : document.getFieldValuesMap().keySet()) {
        exchange.getIn().setHeader(key, document.getFieldValue(key));
    }/*from   w  w w  .  java  2  s  .co  m*/
}

From source file:edu.cornell.mannlib.vitro.webapp.searchengine.solr.SolrSearchResultDocumentList.java

License:Open Source License

private static SearchResultDocument convertToSearchResultDocument(SolrDocument solrDoc) {
    return new BaseSearchResultDocument((String) solrDoc.getFieldValue("DocId"), solrDoc.getFieldValuesMap());
}

From source file:influent.server.search.SolrBaseSearchIterator.java

License:MIT License

protected List<FL_Property> getPropertiesFromDocument(SolrDocument sd, String type,
        List<FL_PropertyDescriptor> descriptors) {
    List<FL_Property> props = new ArrayList<FL_Property>();

    //Read and build properties.
    Map<String, Collection<Object>> docValues = sd.getFieldValuesMap();

    for (FL_PropertyDescriptor prop : descriptors) {
        String propKey = prop.getKey();
        String solrKey = null;/*from  w  w  w .j av a2s.  co m*/

        for (FL_TypeMapping typeMapping : prop.getMemberOf()) {
            if (typeMapping.getType().equals(type)) {
                solrKey = typeMapping.getMemberKey();
                break;
            }
        }

        if (propKey == null || solrKey == null) {
            continue;
        }

        if ("score".equals(solrKey)) {
            continue; //Skip the score, it does not belong in the entity object
        }

        String[] sortFields = _query.getSortFields();
        if (sortFields == null) {
            sortFields = new String[0];
        } else {
            for (int i = 0; i < sortFields.length; i++) {
                sortFields[i] = Arrays.asList(sortFields[i].split(" ")).get(0);
            }
        }

        // Test to see if the property is set hidden, or if it's hidden by Level of Detail
        boolean isHidden = prop.getLevelOfDetail().equals(FL_LevelOfDetail.HIDDEN)
                || (_levelOfDetail.equals(FL_LevelOfDetail.SUMMARY)
                        && prop.getLevelOfDetail().equals(FL_LevelOfDetail.FULL)
                        && Arrays.asList(sortFields).contains(solrKey));

        if (_levelOfDetail.equals(FL_LevelOfDetail.SUMMARY)
                && prop.getLevelOfDetail().equals(FL_LevelOfDetail.FULL)
                && !Arrays.asList(sortFields).contains(solrKey)) {
            continue;
        }

        List<Object> dataList = new ArrayList<Object>();

        if (prop.getPropertyType() == FL_PropertyType.GEO) {
            // Handle GEO composite properties
            List<Object> textValues = getCompositeFieldValues(docValues, propKey, type, "text");
            List<Object> ccValues = getCompositeFieldValues(docValues, propKey, type, "cc");
            List<Object> latValues = getCompositeFieldValues(docValues, propKey, type, "lat");
            List<Object> lonValues = getCompositeFieldValues(docValues, propKey, type, "lon");

            // Assume we have the same number of values in all lists.
            for (int i = 0; i < latValues.size(); i++) {

                FL_GeoData.Builder geoDataBuilder = FL_GeoData.newBuilder()
                        .setText(textValues != null ? (String) textValues.get(i) : null)
                        .setCc(ccValues != null ? (String) ccValues.get(i) : null)
                        .setLat(latValues != null ? parseLatLon(latValues.get(i)) : null)
                        .setLon(lonValues != null ? parseLatLon(lonValues.get(i)) : null);

                dataList.add(geoDataBuilder.build());
            }

        } else {
            // Handle everything else
            dataList = getPropertyValuesFromDocument(docValues, prop, type);
        }

        if (dataList == null || dataList.isEmpty()) {
            continue;
        }

        Object range;
        // Create a list range, or a singleton range depending on how many values we got
        if (dataList.size() > 1) {
            range = FL_ListRange.newBuilder().setType(prop.getPropertyType()).setValues(dataList).build();
        } else {
            range = FL_SingletonRange.newBuilder().setType(prop.getPropertyType()).setValue(dataList.get(0))
                    .build();
        }

        // Add the property
        props.add(new PropertyHelper(prop.getKey(), prop.getFriendlyText(), null, null, prop.getTags(),
                isHidden, range));
    }

    return props;
}