List of usage examples for org.apache.lucene.queries.function.docvalues DocTermsIndexDocValues DocTermsIndexDocValues
protected DocTermsIndexDocValues(String field, ValueSource vs, SortedDocValues termsIndex)
From source file:net.semanticmetadata.lire.solr.LireValueSource.java
License:Open Source License
@Override /**// w w w . jav a2s. c o m * 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.schema.DateField.java
License:Apache License
@Override public FunctionValues getValues(Map context, AtomicReaderContext readerContext) throws IOException { return new DocTermsIndexDocValues(this, readerContext, field) { @Override//w w w.j ava 2 s . c o m protected String toTerm(String readableValue) { // needed for frange queries to work properly return ft.toInternal(readableValue); } @Override public boolean exists(int doc) { return termsIndex.getOrd(doc) >= 0; } @Override public float floatVal(int doc) { return (float) intVal(doc); } @Override public int intVal(int doc) { int ord = termsIndex.getOrd(doc); return ord; } @Override public long longVal(int doc) { return (long) intVal(doc); } @Override public double doubleVal(int doc) { return (double) intVal(doc); } @Override public String strVal(int doc) { int ord = termsIndex.getOrd(doc); if (ord == -1) { return null; } else { termsIndex.lookupOrd(ord, spare); return ft.indexedToReadable(spare, spareChars).toString(); } } @Override public Object objectVal(int doc) { int ord = termsIndex.getOrd(doc); if (ord == -1) { return null; } else { final BytesRef br = new BytesRef(); termsIndex.lookupOrd(ord, br); return ft.toObject(sf, br); } } @Override public String toString(int doc) { return description() + '=' + intVal(doc); } }; }
From source file:org.apache.solr.schema.SortableDoubleField.java
License:Apache License
@Override public FunctionValues getValues(Map context, AtomicReaderContext readerContext) throws IOException { final double def = defVal; return new DocTermsIndexDocValues(this, readerContext, field) { private final BytesRef spare = new BytesRef(); @Override/*from w ww . j av a 2 s . c o m*/ protected String toTerm(String readableValue) { return NumberUtils.double2sortableStr(readableValue); } @Override public boolean exists(int doc) { return termsIndex.getOrd(doc) >= 0; } @Override public float floatVal(int doc) { return (float) doubleVal(doc); } @Override public int intVal(int doc) { return (int) doubleVal(doc); } @Override public long longVal(int doc) { return (long) doubleVal(doc); } @Override public double doubleVal(int doc) { int ord = termsIndex.getOrd(doc); if (ord == -1) { return def; } else { termsIndex.lookupOrd(ord, spare); return NumberUtils.SortableStr2double(spare); } } @Override public String strVal(int doc) { return Double.toString(doubleVal(doc)); } @Override public Object objectVal(int doc) { return exists(doc) ? doubleVal(doc) : null; } @Override public String toString(int doc) { return description() + '=' + doubleVal(doc); } @Override public ValueFiller getValueFiller() { return new ValueFiller() { private final MutableValueDouble mval = new MutableValueDouble(); @Override public MutableValue getValue() { return mval; } @Override public void fillValue(int doc) { int ord = termsIndex.getOrd(doc); if (ord == -1) { mval.value = def; mval.exists = false; } else { termsIndex.lookupOrd(ord, spare); mval.value = NumberUtils.SortableStr2double(spare); mval.exists = true; } } }; } }; }
From source file:org.apache.solr.schema.SortableFloatField.java
License:Apache License
@Override public FunctionValues getValues(Map context, AtomicReaderContext readerContext) throws IOException { final float def = defVal; return new DocTermsIndexDocValues(this, readerContext, field) { private final BytesRef spare = new BytesRef(); @Override/*w w w . j a v a 2 s . c om*/ protected String toTerm(String readableValue) { return NumberUtils.float2sortableStr(readableValue); } @Override public boolean exists(int doc) { return termsIndex.getOrd(doc) >= 0; } @Override public float floatVal(int doc) { int ord = termsIndex.getOrd(doc); if (ord == -1) { return def; } else { termsIndex.lookupOrd(ord, spare); return NumberUtils.SortableStr2float(spare); } } @Override public int intVal(int doc) { return (int) floatVal(doc); } @Override public long longVal(int doc) { return (long) floatVal(doc); } @Override public double doubleVal(int doc) { return (double) floatVal(doc); } @Override public String strVal(int doc) { return Float.toString(floatVal(doc)); } @Override public String toString(int doc) { return description() + '=' + floatVal(doc); } @Override public Object objectVal(int doc) { return exists(doc) ? floatVal(doc) : null; } @Override public ValueFiller getValueFiller() { return new ValueFiller() { private final MutableValueFloat mval = new MutableValueFloat(); @Override public MutableValue getValue() { return mval; } @Override public void fillValue(int doc) { int ord = termsIndex.getOrd(doc); if (ord == -1) { mval.value = def; mval.exists = false; } else { termsIndex.lookupOrd(ord, spare); mval.value = NumberUtils.SortableStr2float(spare); mval.exists = true; } } }; } }; }
From source file:org.apache.solr.schema.SortableIntField.java
License:Apache License
@Override public FunctionValues getValues(Map context, AtomicReaderContext readerContext) throws IOException { final int def = defVal; return new DocTermsIndexDocValues(this, readerContext, field) { private final BytesRef spare = new BytesRef(); @Override/*from w ww . j a v a2s .com*/ protected String toTerm(String readableValue) { return NumberUtils.int2sortableStr(readableValue); } @Override public float floatVal(int doc) { return (float) intVal(doc); } @Override public boolean exists(int doc) { return termsIndex.getOrd(doc) >= 0; } @Override public int intVal(int doc) { int ord = termsIndex.getOrd(doc); if (ord == -1) { return def; } else { termsIndex.lookupOrd(ord, spare); return NumberUtils.SortableStr2int(spare, 0, 3); } } @Override public long longVal(int doc) { return (long) intVal(doc); } @Override public double doubleVal(int doc) { return (double) intVal(doc); } @Override public String strVal(int doc) { return Integer.toString(intVal(doc)); } @Override public String toString(int doc) { return description() + '=' + intVal(doc); } @Override public Object objectVal(int doc) { return exists(doc) ? intVal(doc) : null; } @Override public ValueFiller getValueFiller() { return new ValueFiller() { private final MutableValueInt mval = new MutableValueInt(); @Override public MutableValue getValue() { return mval; } @Override public void fillValue(int doc) { int ord = termsIndex.getOrd(doc); if (ord == -1) { mval.value = def; mval.exists = false; } else { termsIndex.lookupOrd(ord, spare); mval.value = NumberUtils.SortableStr2int(spare, 0, 3); mval.exists = true; } } }; } }; }
From source file:org.apache.solr.schema.SortableLongField.java
License:Apache License
@Override public FunctionValues getValues(Map context, AtomicReaderContext readerContext) throws IOException { final long def = defVal; return new DocTermsIndexDocValues(this, readerContext, field) { private final BytesRef spare = new BytesRef(); @Override//from w ww.j a v a 2 s . co m protected String toTerm(String readableValue) { return NumberUtils.long2sortableStr(readableValue); } @Override public boolean exists(int doc) { return termsIndex.getOrd(doc) >= 0; } @Override public float floatVal(int doc) { return (float) longVal(doc); } @Override public int intVal(int doc) { return (int) longVal(doc); } @Override public long longVal(int doc) { int ord = termsIndex.getOrd(doc); if (ord == -1) { return def; } else { termsIndex.lookupOrd(ord, spare); return NumberUtils.SortableStr2long(spare, 0, 5); } } @Override public double doubleVal(int doc) { return (double) longVal(doc); } @Override public String strVal(int doc) { return Long.toString(longVal(doc)); } @Override public Object objectVal(int doc) { return exists(doc) ? longVal(doc) : null; } @Override public String toString(int doc) { return description() + '=' + longVal(doc); } @Override public ValueFiller getValueFiller() { return new ValueFiller() { private final MutableValueLong mval = new MutableValueLong(); @Override public MutableValue getValue() { return mval; } @Override public void fillValue(int doc) { int ord = termsIndex.getOrd(doc); if (ord == -1) { mval.value = def; mval.exists = false; } else { termsIndex.lookupOrd(ord, spare); mval.value = NumberUtils.SortableStr2long(spare, 0, 5); mval.exists = true; } } }; } }; }
From source file:org.apache.solr.schema.StrFieldSource.java
License:Apache License
@Override public FunctionValues getValues(Map context, AtomicReaderContext readerContext) throws IOException { return new DocTermsIndexDocValues(this, readerContext, field) { @Override/*from w w w . ja v a 2 s . c o m*/ protected String toTerm(String readableValue) { return readableValue; } @Override public int ordVal(int doc) { return termsIndex.getOrd(doc); } @Override public int numOrd() { return termsIndex.getValueCount(); } @Override public Object objectVal(int doc) { return strVal(doc); } @Override public String toString(int doc) { return description() + '=' + strVal(doc); } }; }