package com.constellio.data.dao.services.bigVault; import java.util.Iterator; import java.util.Map; import java.util.Map.Entry; import java.util.TreeMap; import org.apache.solr.client.solrj.response.QueryResponse; import org.apache.solr.common.util.NamedList; public class TermVectoreResponse { private String uniqueKeyFieldName; private String searchedDocId; private Map<String, Map<String, Map<String, Map<String, Double>>>> doc2FieldTermVectors = new TreeMap<>(); public TermVectoreResponse(QueryResponse docTVResponse) { @SuppressWarnings("unchecked") NamedList<Object> termVecotorsResponse = (NamedList<Object>) docTVResponse.getResponse().get("termVectors"); init(termVecotorsResponse); } @SuppressWarnings("unchecked") public void init(NamedList<Object> termVecotorsResponse) { Iterator<Entry<String, Object>> iterDocs = termVecotorsResponse.iterator(); while (iterDocs.hasNext()) { Entry<String, Object> aDoc = iterDocs.next(); if (aDoc.getKey().equals("uniqueKeyFieldName")) { uniqueKeyFieldName = aDoc.getValue().toString(); } else { NamedList<Object> fields = (NamedList<Object>) aDoc.getValue(); searchedDocId = aDoc.getKey(); if (searchedDocId.equals("warnings")) return; Iterator<Entry<String, Object>> iterField = fields.iterator(); String docId = null; Map<String, Map<String, Map<String, Double>>> fieldTermVectors = new TreeMap<>(); while (iterField.hasNext()) { Entry<String, Object> field = iterField.next(); if (field.getKey().equals("uniqueKey")) { docId = field.getValue().toString(); } else { String fieldName = field.getKey(); NamedList<NamedList<Object>> termVectors = (NamedList<NamedList<Object>>) field.getValue(); Iterator<Entry<String, NamedList<Object>>> iterTermVector = termVectors.iterator(); Map<String, Map<String, Double>> aTermVector = new TreeMap<String, Map<String, Double>>(); while (iterTermVector.hasNext()) { Entry<String, NamedList<Object>> termVector = iterTermVector.next(); Map<String, Double> info = new TreeMap<>(); Iterator<Entry<String, Object>> iterInfo = termVector.getValue().iterator(); while (iterInfo.hasNext()) { Entry<String, Object> solrInfo = iterInfo.next(); info.put(solrInfo.getKey(), Double.parseDouble(solrInfo.getValue().toString())); } aTermVector.put(termVector.getKey(), info); } fieldTermVectors.put(fieldName, aTermVector); } } doc2FieldTermVectors.put(docId, fieldTermVectors); } } } public Map<String, Map<String, Map<String, Map<String, Double>>>> getDoc2FieldTermVectors() { return doc2FieldTermVectors; } public String getSearchedDocId() { return searchedDocId; } public String getUniqueKeyFieldName() { return uniqueKeyFieldName; } }