@Override public Document document(int docid) throws IOException { if (_subReaders != null) { int readerIndex = readerIndex(docid, _starts, _subReaders.length); BoboIndexReader subReader = _subReaders[readerIndex]; return subReader.document(docid - _starts[readerIndex]); } else { Document doc = super.document(docid); Collection<FacetHandler<?>> facetHandlers = _facetHandlerMap.values(); for (FacetHandler<?> facetHandler : facetHandlers) { String[] vals = facetHandler.getFieldValues(this, docid); if (vals != null) { String[] values = doc.getValues(facetHandler.getName()); Set<String> storedVals = new HashSet<String>(Arrays.asList(values)); for (String val : vals) { storedVals.add(val); } doc.removeField(facetHandler.getName()); for (String val : storedVals) { doc.add( new Field(facetHandler.getName(), val, Field.Store.NO, Field.Index.NOT_ANALYZED)); } } } return doc; } }
protected void initialize(Collection<FacetHandler<?>> facetHandlers) throws IOException { if (facetHandlers == null) // try to load from index { Directory idxDir = directory(); if (idxDir != null && idxDir instanceof FSDirectory) { FSDirectory fsDir = (FSDirectory) idxDir; File file = fsDir.getFile(); if (new File(file, SPRING_CONFIG).exists()) { facetHandlers = loadFromIndex(file, _workArea); } else { facetHandlers = new ArrayList<FacetHandler<?>>(); } } else { facetHandlers = new ArrayList<FacetHandler<?>>(); } } _facetHandlers = facetHandlers; _facetHandlerMap = new HashMap<String, FacetHandler<?>>(); for (FacetHandler<?> facetHandler : facetHandlers) { _facetHandlerMap.put(facetHandler.getName(), facetHandler); } }