List of usage examples for org.apache.lucene.index Fields terms
public abstract Terms terms(String field) throws IOException;
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; }