@Override public XContentBuilder toXContent(XContentBuilder builder, Params params) throws IOException { assert index != null; assert type != null; assert id != null; builder.startObject(); builder.field(FieldStrings._INDEX, index); builder.field(FieldStrings._TYPE, type); if (!isArtificial()) { builder.field(FieldStrings._ID, id); } builder.field(FieldStrings._VERSION, docVersion); builder.field(FieldStrings.FOUND, isExists()); builder.field(FieldStrings.TOOK, tookInMillis); if (isExists()) { builder.startObject(FieldStrings.TERM_VECTORS); final CharsRefBuilder spare = new CharsRefBuilder(); Fields theFields = getFields(); Iterator<String> fieldIter = theFields.iterator(); while (fieldIter.hasNext()) { buildField(builder, spare, theFields, fieldIter); } builder.endObject(); } builder.endObject(); return builder; }
@Override public void readFrom(StreamInput in) throws IOException { if (in.readBoolean()) { failure = MultiTermVectorsResponse.Failure.readFailure(in); } else { response = new TermVectorsResponse(); response.readFrom(in); } }
private void buildField(XContentBuilder builder, final CharsRefBuilder spare, Fields theFields, Iterator<String> fieldIter) throws IOException { String fieldName = fieldIter.next(); builder.startObject(fieldName); Terms curTerms = theFields.terms(fieldName); // write field statistics buildFieldStatistics(builder, curTerms); builder.startObject(FieldStrings.TERMS); TermsEnum termIter = curTerms.iterator(); BoostAttribute boostAtt = termIter.attributes().addAttribute(BoostAttribute.class); for (int i = 0; i < curTerms.size(); i++) { buildTerm(builder, spare, curTerms, termIter, boostAtt); } builder.endObject(); builder.endObject(); }
private static Fields[] getFieldsFor(MultiTermVectorsResponse responses) throws IOException { List<Fields> likeFields = new ArrayList<>(); for (MultiTermVectorsItemResponse response : responses) { if (response.isFailed()) { checkRoutingMissingException(response); continue; } TermVectorsResponse getResponse = response.getResponse(); if (!getResponse.isExists()) { continue; } likeFields.add(getResponse.getFields()); } return likeFields.toArray(Fields.EMPTY_ARRAY); }
private void buildTerm(XContentBuilder builder, final CharsRefBuilder spare, Terms curTerms, TermsEnum termIter, BoostAttribute boostAtt) throws IOException { // start term, optimized writing BytesRef term = termIter.next(); spare.copyUTF8Bytes(term); builder.startObject(spare.toString()); buildTermStatistics(builder, termIter); // finally write the term vectors PostingsEnum posEnum = termIter.postings(null, PostingsEnum.ALL); int termFreq = posEnum.freq(); builder.field(FieldStrings.TERM_FREQ, termFreq); initMemory(curTerms, termFreq); initValues(curTerms, posEnum, termFreq); buildValues(builder, curTerms, termFreq); buildScore(builder, boostAtt); builder.endObject(); }
static TermVectorsResponse getTermVectors(IndexShard indexShard, TermVectorsRequest request, LongSupplier nanoTimeSupplier) { final long startTime = nanoTimeSupplier.getAsLong(); final TermVectorsResponse termVectorsResponse = new TermVectorsResponse(indexShard.shardId().getIndex().getName(), request.type(), request.id()); final Term uidTerm = indexShard.mapperService().createUidTerm(request.type(), request.id()); if (uidTerm == null) { termVectorsResponse.setExists(false); return termVectorsResponse; topLevelFields = termVectorsByField; termVectorsResponse.setArtificial(true); termVectorsResponse.setExists(true); termVectorsByField = addGeneratedTermVectors(indexShard, get, termVectorsByField, request, selectedFields); termVectorsResponse.setDocVersion(docIdAndVersion.version); termVectorsResponse.setExists(true); termVectorsResponse.setExists(false); termVectorsResponse.setFields(termVectorsByField, request.selectedFields(), request.getFlags(), topLevelFields, dfs, termVectorsFilter); termVectorsResponse.setTookInMillis(TimeUnit.NANOSECONDS.toMillis(nanoTimeSupplier.getAsLong() - startTime)); } catch (Exception ex) { throw new ElasticsearchException("failed to execute term vector request", ex);
private Collection<Term> getTerms(TermVectorsResponse termVectorsResponse) throws IOException { List<Term> termInfos = new ArrayList<>(); Fields fields = termVectorsResponse.getFields(); if (fields != null) { for (String field : fields) { Terms terms = fields.terms(field); if (terms != null) { TermsEnum termsIter = terms.iterator(); while (termsIter.next() != null) { termInfos.add(getTerm(termsIter)); } } } } return termInfos; }
@Override public TermVectorsResponse newResponse() { return new TermVectorsResponse(); }
/** * The id of the document. */ public String getId() { if (failure != null) { return failure.getId(); } return response.getId(); }
/** * The index name of the document. */ public String getIndex() { if (failure != null) { return failure.getIndex(); } return response.getIndex(); }
static TermVectorsResponse getTermVectors(IndexShard indexShard, TermVectorsRequest request, LongSupplier nanoTimeSupplier) { final long startTime = nanoTimeSupplier.getAsLong(); final TermVectorsResponse termVectorsResponse = new TermVectorsResponse(indexShard.shardId().getIndex().getName(), request.type(), request.id()); final Term uidTerm = indexShard.mapperService().createUidTerm(request.type(), request.id()); if (uidTerm == null) { termVectorsResponse.setExists(false); return termVectorsResponse; topLevelFields = termVectorsByField; termVectorsResponse.setArtificial(true); termVectorsResponse.setExists(true); termVectorsByField = addGeneratedTermVectors(indexShard, get, termVectorsByField, request, selectedFields); termVectorsResponse.setDocVersion(docIdAndVersion.version); termVectorsResponse.setExists(true); termVectorsResponse.setExists(false); termVectorsResponse.setFields(termVectorsByField, request.selectedFields(), request.getFlags(), topLevelFields, dfs, termVectorsFilter); termVectorsResponse.setTookInMillis(TimeUnit.NANOSECONDS.toMillis(nanoTimeSupplier.getAsLong() - startTime)); } catch (Exception ex) { throw new ElasticsearchException("failed to execute term vector request", ex);
private void buildTerm(XContentBuilder builder, final CharsRefBuilder spare, Terms curTerms, TermsEnum termIter, BoostAttribute boostAtt) throws IOException { // start term, optimized writing BytesRef term = termIter.next(); spare.copyUTF8Bytes(term); builder.startObject(spare.toString()); buildTermStatistics(builder, termIter); // finally write the term vectors PostingsEnum posEnum = termIter.postings(null, PostingsEnum.ALL); int termFreq = posEnum.freq(); builder.field(FieldStrings.TERM_FREQ, termFreq); initMemory(curTerms, termFreq); initValues(curTerms, posEnum, termFreq); buildValues(builder, curTerms, termFreq); buildScore(builder, boostAtt); builder.endObject(); }
private static Fields[] getFieldsFor(MultiTermVectorsResponse responses) throws IOException { List<Fields> likeFields = new ArrayList<>(); for (MultiTermVectorsItemResponse response : responses) { if (response.isFailed()) { continue; } TermVectorsResponse getResponse = response.getResponse(); if (!getResponse.isExists()) { continue; } likeFields.add(getResponse.getFields()); } return likeFields.toArray(Fields.EMPTY_ARRAY); }
import org.apache.lucene.index.Fields; import org.apache.lucene.index.Terms; import org.apache.lucene.index.TermsEnum; import org.apache.lucene.util.BytesRef; import org.elasticsearch.action.termvectors.TermVectorsResponse; ... public List<String> getTerms(TermVectorsResponse resp){ List<String> termStrings = new ArrayList<>(); Fields fields = resp.getFields(); Iterator<String> iterator = fields.iterator(); while (iterator.hasNext()) { String field = iterator.next(); Terms terms = fields.terms(field); TermsEnum termsEnum = terms.iterator(); while(termsEnum.next() != null){ BytesRef term = termsEnum.term(); if (term != null) { termStrings.add(term.utf8ToString()); } } } return termStrings; }
@Override protected TermVectorsResponse newResponse() { return new TermVectorsResponse(); }
/** * The id of the document. */ public String getId() { if (failure != null) { return failure.getId(); } return response.getId(); }
/** * The index name of the document. */ public String getIndex() { if (failure != null) { return failure.getIndex(); } return response.getIndex(); }
static TermVectorsResponse getTermVectors(IndexShard indexShard, TermVectorsRequest request, LongSupplier nanoTimeSupplier) { final long startTime = nanoTimeSupplier.getAsLong(); final TermVectorsResponse termVectorsResponse = new TermVectorsResponse(indexShard.shardId().getIndex().getName(), request.type(), request.id()); final Term uidTerm = indexShard.mapperService().createUidTerm(request.type(), request.id()); if (uidTerm == null) { termVectorsResponse.setExists(false); return termVectorsResponse; topLevelFields = termVectorsByField; termVectorsResponse.setArtificial(true); termVectorsResponse.setExists(true); termVectorsByField = addGeneratedTermVectors(indexShard, get, termVectorsByField, request, selectedFields); termVectorsResponse.setDocVersion(docIdAndVersion.version); termVectorsResponse.setExists(true); termVectorsResponse.setExists(false); termVectorsResponse.setFields(termVectorsByField, request.selectedFields(), request.getFlags(), topLevelFields, dfs, termVectorsFilter); termVectorsResponse.setTookInMillis(TimeUnit.NANOSECONDS.toMillis(nanoTimeSupplier.getAsLong() - startTime)); } catch (Exception ex) { throw new ElasticsearchException("failed to execute term vector request", ex);
private void buildTerm(XContentBuilder builder, final CharsRefBuilder spare, Terms curTerms, TermsEnum termIter, BoostAttribute boostAtt) throws IOException { // start term, optimized writing BytesRef term = termIter.next(); spare.copyUTF8Bytes(term); builder.startObject(spare.toString()); buildTermStatistics(builder, termIter); // finally write the term vectors PostingsEnum posEnum = termIter.postings(null, PostingsEnum.ALL); int termFreq = posEnum.freq(); builder.field(FieldStrings.TERM_FREQ, termFreq); initMemory(curTerms, termFreq); initValues(curTerms, posEnum, termFreq); buildValues(builder, curTerms, termFreq); buildScore(builder, boostAtt); builder.endObject(); }
@Override public XContentBuilder toXContent(XContentBuilder builder, Params params) throws IOException { assert index != null; assert type != null; assert id != null; builder.startObject(); builder.field(FieldStrings._INDEX, index); builder.field(FieldStrings._TYPE, type); if (!isArtificial()) { builder.field(FieldStrings._ID, id); } builder.field(FieldStrings._VERSION, docVersion); builder.field(FieldStrings.FOUND, isExists()); builder.field(FieldStrings.TOOK, tookInMillis); if (isExists()) { builder.startObject(FieldStrings.TERM_VECTORS); final CharsRefBuilder spare = new CharsRefBuilder(); Fields theFields = getFields(); Iterator<String> fieldIter = theFields.iterator(); while (fieldIter.hasNext()) { buildField(builder, spare, theFields, fieldIter); } builder.endObject(); } builder.endObject(); return builder; }