List of usage examples for org.apache.lucene.queries.function FunctionValues FunctionValues
FunctionValues
From source file:net.semanticmetadata.lire.solr.LireValueSource.java
License:Open Source License
@Override /**//w w w .j av a2 s . com * Check also {@link org.apache.lucene.queries.function.valuesource.BytesRefFieldSource} */ public FunctionValues getValues(Map context, LeafReaderContext readerContext) throws IOException { final FieldInfo fieldInfo = readerContext.reader().getFieldInfos().fieldInfo(field); if (fieldInfo != null && fieldInfo.getDocValuesType() == DocValuesType.BINARY) { final BinaryDocValues binaryValues = DocValues.getBinary(readerContext.reader(), field); final Bits docsWithField = DocValues.getDocsWithField(readerContext.reader(), field); return new FunctionValues() { @Override public boolean exists(int doc) { return docsWithField.get(doc); } @Override public boolean bytesVal(int doc, BytesRefBuilder target) { target.copyBytes(binaryValues.get(doc)); return target.length() > 0; } @Override public float floatVal(int doc) { return (float) doubleVal(doc); } public String strVal(int doc) { final BytesRefBuilder bytes = new BytesRefBuilder(); return bytesVal(doc, bytes) ? bytes.get().utf8ToString() : null; } /** * This method basically decides which type is delivered on request. It can be a String, * in this case it is the double form the distance function. * @param doc * @return the distance as Double, mapping to {@link FunctionValues#doubleVal(int)} */ @Override public Object objectVal(int doc) { return doubleVal(doc); } @Override public String toString(int doc) { return description() + '=' + strVal(doc); } @Override /** * This method has to be implemented to support sorting! */ public double doubleVal(int doc) { if (binaryValues.get(doc).length > 0) { tmpFeature.setByteArrayRepresentation(binaryValues.get(doc).bytes, binaryValues.get(doc).offset, binaryValues.get(doc).length); return tmpFeature.getDistance(feature); } else return maxDistance; // make sure max distance is returned for those without value } }; } else { // there is no DocVal to sort by. Therefore we need to set the function value to -1 and everything without DocVal gets ranked first? return new DocTermsIndexDocValues(this, readerContext, field) { @Override protected String toTerm(String readableValue) { return Double.toString(maxDistance); } @Override public Object objectVal(int doc) { return maxDistance; } @Override public String toString(int doc) { return description() + '=' + strVal(doc); } public double doubleVal(int doc) { return maxDistance; } }; } }
From source file:org.apache.solr.analytics.util.valuesource.FilterFieldSource.java
License:Apache License
@Override public FunctionValues getValues(Map context, LeafReaderContext readerContext) throws IOException { final FunctionValues vals = source.getValues(context, readerContext); return new FunctionValues() { @Override/*from w w w .j a v a 2 s . c o m*/ public byte byteVal(int doc) { return vals.byteVal(doc); } @Override public short shortVal(int doc) { return vals.shortVal(doc); } @Override public float floatVal(int doc) { return vals.floatVal(doc); } @Override public int intVal(int doc) { return vals.intVal(doc); } @Override public long longVal(int doc) { return vals.longVal(doc); } @Override public double doubleVal(int doc) { return vals.doubleVal(doc); } @Override public String strVal(int doc) { return vals.strVal(doc); } @Override public Object objectVal(int doc) { return exists(doc) ? vals.objectVal(doc) : null; } @Override public boolean exists(int doc) { Object other = vals.objectVal(doc); return other != null && !missValue.equals(other); } @Override public String toString(int doc) { return NAME + '(' + vals.toString(doc) + ')'; } @Override public ValueFiller getValueFiller() { return new ValueFiller() { private final ValueFiller delegateFiller = vals.getValueFiller(); private final MutableValue mval = delegateFiller.getValue(); @Override public MutableValue getValue() { return mval; } @Override public void fillValue(int doc) { delegateFiller.fillValue(doc); mval.exists = exists(doc); } }; } }; }
From source file:org.apache.solr.search.function.distance.GeohashFunction.java
License:Apache License
@Override public FunctionValues getValues(Map context, AtomicReaderContext readerContext) throws IOException { final FunctionValues latDV = lat.getValues(context, readerContext); final FunctionValues lonDV = lon.getValues(context, readerContext); return new FunctionValues() { @Override//from ww w . j a v a 2s.c o m public String strVal(int doc) { return GeohashUtils.encodeLatLon(latDV.doubleVal(doc), lonDV.doubleVal(doc)); } @Override public String toString(int doc) { StringBuilder sb = new StringBuilder(); sb.append(name()).append('('); sb.append(latDV.toString(doc)).append(',').append(lonDV.toString(doc)); sb.append(')'); return sb.toString(); } }; }