List of usage examples for org.apache.commons.math3.linear OpenMapRealVector setEntry
@Override public void setEntry(int index, double value) throws OutOfRangeException
From source file:org.lambda3.indra.core.lucene.LuceneVectorSpace.java
@Override public Map<String, RealVector> getNearestVectors(AnalyzedTerm term, int topk, Filter filter) { TermQuery query = new TermQuery(new Term(term.getFirstToken())); try {//from w w w . jav a 2 s . c o m TopDocs topDocs = termsSearcher.search(query, 1); if (topDocs.totalHits == 1) { Document doc = termsSearcher.doc(topDocs.scoreDocs[0].doc); String[] indexes = doc.getValues(INDEXES_FIELD); RealVector termVector = BinaryCodecs.unmarshall(doc.getBinaryValue(VECTOR_FIELD).bytes, true, -1); Map<String, RealVector> candidates = collectVectors(Arrays.asList(indexes), INDEXES_FIELD); Map<String, Double> results = new ConcurrentHashMap<>(); candidates.entrySet().stream().parallel().forEach(e -> { double score = func.sim(termVector, e.getValue(), true); results.put(e.getKey(), score); }); LinkedHashMap<String, Double> sortedResults = MapUtils.entriesSortedByValues(results); Map<String, RealVector> nearest = new LinkedHashMap<>(); int count = 0; for (String key : sortedResults.keySet()) { Map<Integer, Double> mapVector = RealVectorUtil.vectorToMap(candidates.get(key)); int size = (int) getMetadata().dimensions; OpenMapRealVector vector = new OpenMapRealVector(size); for (int index : mapVector.keySet()) { vector.setEntry(index, mapVector.get(index)); } nearest.put(key, vector); } return nearest; } } catch (IOException e) { logger.error(e.getMessage()); //TODO throw new expection here. } return null; }