Example usage for org.apache.lucene.index Fields terms

List of usage examples for org.apache.lucene.index Fields terms

Introduction

In this page you can find the example usage for org.apache.lucene.index Fields terms.

Prototype

public abstract Terms terms(String field) throws IOException;

Source Link

Document

Get the Terms for this field.

Usage

From source file:org.elasticsearch.common.lucene.search.XTermsFilter.java

License:Apache License

@Override
public DocIdSet getDocIdSet(AtomicReaderContext context, Bits acceptDocs) throws IOException {
    final AtomicReader reader = context.reader();
    FixedBitSet result = null; // lazy init if needed - no need to create a big bitset ahead of time
    final Fields fields = reader.fields();
    final BytesRef spare = new BytesRef(this.termsBytes);
    if (fields == null) {
        return result;
    }/*from  ww w.jav  a  2s . c  om*/
    Terms terms = null;
    TermsEnum termsEnum = null;
    DocsEnum docs = null;
    for (TermsAndField termsAndField : this.termsAndFields) {
        if ((terms = fields.terms(termsAndField.field)) != null) {
            termsEnum = terms.iterator(termsEnum); // this won't return null
            for (int i = termsAndField.start; i < termsAndField.end; i++) {
                spare.offset = offsets[i];
                spare.length = offsets[i + 1] - offsets[i];
                if (termsEnum.seekExact(spare, false)) { // don't use cache since we could pollute the cache here easily
                    docs = termsEnum.docs(acceptDocs, docs, 0); // no freq since we don't need them
                    if (result == null) {
                        if (docs.nextDoc() != DocIdSetIterator.NO_MORE_DOCS) {
                            result = new FixedBitSet(reader.maxDoc());
                            // lazy init but don't do it in the hot loop since we could read many docs
                            result.set(docs.docID());
                        }
                    }
                    while (docs.nextDoc() != DocIdSetIterator.NO_MORE_DOCS) {
                        result.set(docs.docID());
                    }
                }
            }
        }
    }
    return result;
}

From source file:org.elasticsearch.common.lucene.uid.PerThreadIDAndVersionLookup.java

License:Apache License

/**
 * Initialize lookup for the provided segment
 *//*from  w w w. ja  v a  2s  . c o  m*/
public PerThreadIDAndVersionLookup(LeafReader reader) throws IOException {
    TermsEnum termsEnum = null;
    NumericDocValues versions = null;
    boolean hasPayloads = false;

    Fields fields = reader.fields();
    if (fields != null) {
        Terms terms = fields.terms(UidFieldMapper.NAME);
        if (terms != null) {
            hasPayloads = terms.hasPayloads();
            termsEnum = terms.iterator();
            assert termsEnum != null;
            versions = reader.getNumericDocValues(VersionFieldMapper.NAME);
        }
    }

    this.versions = versions;
    this.termsEnum = termsEnum;
    this.hasPayloads = hasPayloads;
}

From source file:org.elasticsearch.common.lucene.uid.VersionsResolver.java

License:Apache License

/**
 * Returns the sequence number for the given uid term, returning
 * {@code SequenceNumbersService.UNASSIGNED_SEQ_NO} if none is found.
 *//*from   www . j  a va 2 s. com*/
public static long loadSeqNo(IndexReader reader, Term term) throws IOException {
    assert term.field().equals(UidFieldMapper.NAME) : "can only load _seq_no by uid";
    List<LeafReaderContext> leaves = reader.leaves();
    if (leaves.isEmpty()) {
        return SequenceNumbersService.UNASSIGNED_SEQ_NO;
    }

    // iterate backwards to optimize for the frequently updated documents
    // which are likely to be in the last segments
    for (int i = leaves.size() - 1; i >= 0; i--) {
        LeafReader leaf = leaves.get(i).reader();
        Bits liveDocs = leaf.getLiveDocs();

        TermsEnum termsEnum = null;
        SortedNumericDocValues dvField = null;
        PostingsEnum docsEnum = null;

        final Fields fields = leaf.fields();
        if (fields != null) {
            Terms terms = fields.terms(UidFieldMapper.NAME);
            if (terms != null) {
                termsEnum = terms.iterator();
                assert termsEnum != null;
                dvField = leaf.getSortedNumericDocValues(SeqNoFieldMapper.NAME);
                assert dvField != null;

                final BytesRef id = term.bytes();
                if (termsEnum.seekExact(id)) {
                    // there may be more than one matching docID, in the
                    // case of nested docs, so we want the last one:
                    docsEnum = termsEnum.postings(docsEnum, 0);
                    int docID = DocIdSetIterator.NO_MORE_DOCS;
                    for (int d = docsEnum.nextDoc(); d != DocIdSetIterator.NO_MORE_DOCS; d = docsEnum
                            .nextDoc()) {
                        if (liveDocs != null && liveDocs.get(d) == false) {
                            continue;
                        }
                        docID = d;
                    }

                    if (docID != DocIdSetIterator.NO_MORE_DOCS) {
                        dvField.setDocument(docID);
                        assert dvField.count() == 1 : "expected only a single value for _seq_no but got "
                                + dvField.count();
                        return dvField.valueAt(0);
                    }
                }
            }
        }

    }
    return SequenceNumbersService.UNASSIGNED_SEQ_NO;
}

From source file:org.elasticsearch.common.lucene.uid.VersionsResolver.java

License:Apache License

/**
 * Returns the primary term for the given uid term, returning {@code 0} if none is found.
 *///w  w w  . j  av a  2  s.c o m
public static long loadPrimaryTerm(IndexReader reader, Term term) throws IOException {
    assert term.field().equals(UidFieldMapper.NAME) : "can only load _primary_term by uid";
    List<LeafReaderContext> leaves = reader.leaves();
    if (leaves.isEmpty()) {
        return 0;
    }

    // iterate backwards to optimize for the frequently updated documents
    // which are likely to be in the last segments
    for (int i = leaves.size() - 1; i >= 0; i--) {
        LeafReader leaf = leaves.get(i).reader();
        Bits liveDocs = leaf.getLiveDocs();

        TermsEnum termsEnum = null;
        NumericDocValues dvField = null;
        PostingsEnum docsEnum = null;

        final Fields fields = leaf.fields();
        if (fields != null) {
            Terms terms = fields.terms(UidFieldMapper.NAME);
            if (terms != null) {
                termsEnum = terms.iterator();
                assert termsEnum != null;
                dvField = leaf.getNumericDocValues(SeqNoFieldMapper.PRIMARY_TERM_NAME);
                assert dvField != null;

                final BytesRef id = term.bytes();
                if (termsEnum.seekExact(id)) {
                    // there may be more than one matching docID, in the
                    // case of nested docs, so we want the last one:
                    docsEnum = termsEnum.postings(docsEnum, 0);
                    int docID = DocIdSetIterator.NO_MORE_DOCS;
                    for (int d = docsEnum.nextDoc(); d != DocIdSetIterator.NO_MORE_DOCS; d = docsEnum
                            .nextDoc()) {
                        if (liveDocs != null && liveDocs.get(d) == false) {
                            continue;
                        }
                        docID = d;
                    }

                    if (docID != DocIdSetIterator.NO_MORE_DOCS) {
                        return dvField.get(docID);
                    }
                }
            }
        }

    }
    return 0;
}

From source file:org.elasticsearch.index.percolator.ExtractQueryTermsService.java

License:Apache License

/**
 * Creates a boolean query with a should clause for each term on all fields of the specified index reader.
 *//*from   w ww. ja  va2 s.  c  o m*/
public static Query createQueryTermsQuery(IndexReader indexReader, String queryMetadataField,
        String unknownQueryField) throws IOException {
    List<Term> extractedTerms = new ArrayList<>();
    extractedTerms.add(new Term(unknownQueryField));
    Fields fields = MultiFields.getFields(indexReader);
    for (String field : fields) {
        Terms terms = fields.terms(field);
        if (terms == null) {
            continue;
        }

        BytesRef fieldBr = new BytesRef(field);
        TermsEnum tenum = terms.iterator();
        for (BytesRef term = tenum.next(); term != null; term = tenum.next()) {
            BytesRefBuilder builder = new BytesRefBuilder();
            builder.append(fieldBr);
            builder.append(FIELD_VALUE_SEPARATOR);
            builder.append(term);
            extractedTerms.add(new Term(queryMetadataField, builder.toBytesRef()));
        }
    }
    return new TermsQuery(extractedTerms);
}

From source file:org.elasticsearch.index.termvectors.ShardTermVectorsService.java

License:Apache License

private Fields mergeFields(Fields fields1, Fields fields2) throws IOException {
    ParallelFields parallelFields = new ParallelFields();
    for (String fieldName : fields2) {
        Terms terms = fields2.terms(fieldName);
        if (terms != null) {
            parallelFields.addField(fieldName, terms);
        }/*www  .j a  v  a  2 s .c  o m*/
    }
    for (String fieldName : fields1) {
        if (parallelFields.fields.containsKey(fieldName)) {
            continue;
        }
        Terms terms = fields1.terms(fieldName);
        if (terms != null) {
            parallelFields.addField(fieldName, terms);
        }
    }
    return parallelFields;
}

From source file:org.elasticsearch.index.termvectors.TermVectorsService.java

License:Apache License

private static Fields mergeFields(Fields fields1, Fields fields2) throws IOException {
    ParallelFields parallelFields = new ParallelFields();
    for (String fieldName : fields2) {
        Terms terms = fields2.terms(fieldName);
        if (terms != null) {
            parallelFields.addField(fieldName, terms);
        }/*from   w  w w .j  ava 2 s.c o m*/
    }
    for (String fieldName : fields1) {
        if (parallelFields.fields.containsKey(fieldName)) {
            continue;
        }
        Terms terms = fields1.terms(fieldName);
        if (terms != null) {
            parallelFields.addField(fieldName, terms);
        }
    }
    return parallelFields;
}

From source file:org.elasticsearch.percolator.ExtractQueryTermsService.java

License:Apache License

/**
 * Creates a terms query containing all terms from all fields of the specified index reader.
 *//*from www  .j  a  v a  2  s .  co m*/
public static Query createQueryTermsQuery(IndexReader indexReader, String queryMetadataField,
        Term... optionalTerms) throws IOException {
    Objects.requireNonNull(queryMetadataField);

    List<Term> extractedTerms = new ArrayList<>();
    Collections.addAll(extractedTerms, optionalTerms);

    Fields fields = MultiFields.getFields(indexReader);
    for (String field : fields) {
        Terms terms = fields.terms(field);
        if (terms == null) {
            continue;
        }

        BytesRef fieldBr = new BytesRef(field);
        TermsEnum tenum = terms.iterator();
        for (BytesRef term = tenum.next(); term != null; term = tenum.next()) {
            BytesRefBuilder builder = new BytesRefBuilder();
            builder.append(fieldBr);
            builder.append(FIELD_VALUE_SEPARATOR);
            builder.append(term);
            extractedTerms.add(new Term(queryMetadataField, builder.toBytesRef()));
        }
    }
    return new TermsQuery(extractedTerms);
}

From source file:org.elasticsearch.search.lookup.IndexFieldTerm.java

License:Apache License

private DocsEnum getDocsAndPosEnum(int luceneFlags, AtomicReader reader) throws IOException {
    assert identifier.field() != null;
    assert identifier.bytes() != null;
    final Fields fields = reader.fields();
    DocsEnum newDocsEnum = null;//w w w .  java 2  s.  c o m
    if (fields != null) {
        final Terms terms = fields.terms(identifier.field());
        if (terms != null) {
            if (terms.hasPositions()) {
                final TermsEnum termsEnum = terms.iterator(null);
                if (termsEnum.seekExact(identifier.bytes())) {
                    newDocsEnum = termsEnum.docsAndPositions(reader.getLiveDocs(),
                            docsEnum instanceof DocsAndPositionsEnum ? (DocsAndPositionsEnum) docsEnum : null,
                            luceneFlags);
                }
            }
        }
    }
    return newDocsEnum;
}

From source file:org.elasticsearch.search.lookup.IndexFieldTerm.java

License:Apache License

private DocsEnum getOnlyDocsEnum(int luceneFlags, AtomicReader reader) throws IOException {
    assert identifier.field() != null;
    assert identifier.bytes() != null;
    final Fields fields = reader.fields();
    DocsEnum newDocsEnum = null;/*from  w w  w  . j  a va  2 s .c o m*/
    if (fields != null) {
        final Terms terms = fields.terms(identifier.field());
        if (terms != null) {
            TermsEnum termsEnum = terms.iterator(null);
            if (termsEnum.seekExact(identifier.bytes())) {
                newDocsEnum = termsEnum.docs(reader.getLiveDocs(), docsEnum, luceneFlags);
            }
        }
    }
    if (newDocsEnum == null) {
        newDocsEnum = EMPTY_DOCS_ENUM;
    }
    return newDocsEnum;
}