Example usage for org.apache.lucene.queries.function.docvalues DocTermsIndexDocValues DocTermsIndexDocValues

List of usage examples for org.apache.lucene.queries.function.docvalues DocTermsIndexDocValues DocTermsIndexDocValues

Introduction

In this page you can find the example usage for org.apache.lucene.queries.function.docvalues DocTermsIndexDocValues DocTermsIndexDocValues.

Prototype

protected DocTermsIndexDocValues(String field, ValueSource vs, SortedDocValues termsIndex) 

Source Link

Usage

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);
        }
    };
}