Search in sources :

Example 1 with DocTermsIndexDocValues

use of org.apache.lucene.queries.function.docvalues.DocTermsIndexDocValues in project lucene-solr by apache.

the class BytesRefFieldSource method getValues.

@Override
public FunctionValues getValues(Map context, LeafReaderContext readerContext) throws IOException {
    final FieldInfo fieldInfo = readerContext.reader().getFieldInfos().fieldInfo(field);
    // TODO: do it cleaner?
    if (fieldInfo != null && fieldInfo.getDocValuesType() == DocValuesType.BINARY) {
        final BinaryDocValues binaryValues = DocValues.getBinary(readerContext.reader(), field);
        return new FunctionValues() {

            int lastDocID = -1;

            private BytesRef getValueForDoc(int doc) throws IOException {
                if (doc < lastDocID) {
                    throw new IllegalArgumentException("docs were sent out-of-order: lastDocID=" + lastDocID + " vs docID=" + doc);
                }
                lastDocID = doc;
                int curDocID = binaryValues.docID();
                if (doc > curDocID) {
                    curDocID = binaryValues.advance(doc);
                }
                if (doc == curDocID) {
                    return binaryValues.binaryValue();
                } else {
                    return null;
                }
            }

            @Override
            public boolean exists(int doc) throws IOException {
                return getValueForDoc(doc) != null;
            }

            @Override
            public boolean bytesVal(int doc, BytesRefBuilder target) throws IOException {
                BytesRef value = getValueForDoc(doc);
                if (value == null || value.length == 0) {
                    return false;
                } else {
                    target.copyBytes(value);
                    return true;
                }
            }

            public String strVal(int doc) throws IOException {
                final BytesRefBuilder bytes = new BytesRefBuilder();
                return bytesVal(doc, bytes) ? bytes.get().utf8ToString() : null;
            }

            @Override
            public Object objectVal(int doc) throws IOException {
                return strVal(doc);
            }

            @Override
            public String toString(int doc) throws IOException {
                return description() + '=' + strVal(doc);
            }

            @Override
            public ValueFiller getValueFiller() {
                return new ValueFiller() {

                    private final MutableValueStr mval = new MutableValueStr();

                    @Override
                    public MutableValue getValue() {
                        return mval;
                    }

                    @Override
                    public void fillValue(int doc) throws IOException {
                        BytesRef value = getValueForDoc(doc);
                        mval.exists = value != null;
                        mval.value.clear();
                        if (value != null) {
                            mval.value.copyBytes(value);
                        }
                    }
                };
            }
        };
    } else {
        return new DocTermsIndexDocValues(this, readerContext, field) {

            @Override
            protected String toTerm(String readableValue) {
                return readableValue;
            }

            @Override
            public Object objectVal(int doc) throws IOException {
                return strVal(doc);
            }

            @Override
            public String toString(int doc) throws IOException {
                return description() + '=' + strVal(doc);
            }
        };
    }
}
Also used : BytesRefBuilder(org.apache.lucene.util.BytesRefBuilder) DocTermsIndexDocValues(org.apache.lucene.queries.function.docvalues.DocTermsIndexDocValues) MutableValueStr(org.apache.lucene.util.mutable.MutableValueStr) FunctionValues(org.apache.lucene.queries.function.FunctionValues) FieldInfo(org.apache.lucene.index.FieldInfo) BinaryDocValues(org.apache.lucene.index.BinaryDocValues) BytesRef(org.apache.lucene.util.BytesRef)

Example 2 with DocTermsIndexDocValues

use of org.apache.lucene.queries.function.docvalues.DocTermsIndexDocValues in project lucene-solr by apache.

the class SortedSetFieldSource method getValues.

@Override
public FunctionValues getValues(Map context, LeafReaderContext readerContext) throws IOException {
    SortedSetDocValues sortedSet = DocValues.getSortedSet(readerContext.reader(), field);
    SortedDocValues view = SortedSetSelector.wrap(sortedSet, selector);
    return new DocTermsIndexDocValues(this.field, this, view) {

        @Override
        protected String toTerm(String readableValue) {
            return readableValue;
        }

        @Override
        public Object objectVal(int doc) throws IOException {
            return strVal(doc);
        }
    };
}
Also used : SortedSetDocValues(org.apache.lucene.index.SortedSetDocValues) DocTermsIndexDocValues(org.apache.lucene.queries.function.docvalues.DocTermsIndexDocValues) SortedDocValues(org.apache.lucene.index.SortedDocValues)

Aggregations

DocTermsIndexDocValues (org.apache.lucene.queries.function.docvalues.DocTermsIndexDocValues)2 BinaryDocValues (org.apache.lucene.index.BinaryDocValues)1 FieldInfo (org.apache.lucene.index.FieldInfo)1 SortedDocValues (org.apache.lucene.index.SortedDocValues)1 SortedSetDocValues (org.apache.lucene.index.SortedSetDocValues)1 FunctionValues (org.apache.lucene.queries.function.FunctionValues)1 BytesRef (org.apache.lucene.util.BytesRef)1 BytesRefBuilder (org.apache.lucene.util.BytesRefBuilder)1 MutableValueStr (org.apache.lucene.util.mutable.MutableValueStr)1