Search in sources :

Example 6 with GetResult

use of org.elasticsearch.index.get.GetResult in project elasticsearch by elastic.

the class GeoShapeQueryBuilderTests method executeGet.

@Override
protected GetResponse executeGet(GetRequest getRequest) {
    assertThat(indexedShapeToReturn, notNullValue());
    assertThat(indexedShapeId, notNullValue());
    assertThat(indexedShapeType, notNullValue());
    assertThat(getRequest.id(), equalTo(indexedShapeId));
    assertThat(getRequest.type(), equalTo(indexedShapeType));
    String expectedShapeIndex = indexedShapeIndex == null ? GeoShapeQueryBuilder.DEFAULT_SHAPE_INDEX_NAME : indexedShapeIndex;
    assertThat(getRequest.index(), equalTo(expectedShapeIndex));
    String expectedShapePath = indexedShapePath == null ? GeoShapeQueryBuilder.DEFAULT_SHAPE_FIELD_NAME : indexedShapePath;
    String json;
    try {
        XContentBuilder builder = XContentFactory.jsonBuilder().prettyPrint();
        builder.startObject();
        builder.field(expectedShapePath, indexedShapeToReturn);
        builder.endObject();
        json = builder.string();
    } catch (IOException ex) {
        throw new ElasticsearchException("boom", ex);
    }
    return new GetResponse(new GetResult(indexedShapeIndex, indexedShapeType, indexedShapeId, 0, true, new BytesArray(json), null));
}
Also used : BytesArray(org.elasticsearch.common.bytes.BytesArray) GetResult(org.elasticsearch.index.get.GetResult) CoreMatchers.containsString(org.hamcrest.CoreMatchers.containsString) IOException(java.io.IOException) ElasticsearchException(org.elasticsearch.ElasticsearchException) GetResponse(org.elasticsearch.action.get.GetResponse) XContentBuilder(org.elasticsearch.common.xcontent.XContentBuilder)

Example 7 with GetResult

use of org.elasticsearch.index.get.GetResult in project elasticsearch by elastic.

the class TermsQueryBuilderTests method executeGet.

@Override
public GetResponse executeGet(GetRequest getRequest) {
    String json;
    try {
        XContentBuilder builder = XContentFactory.jsonBuilder().prettyPrint();
        builder.startObject();
        builder.array(termsPath, randomTerms.toArray(new Object[randomTerms.size()]));
        builder.endObject();
        json = builder.string();
    } catch (IOException ex) {
        throw new ElasticsearchException("boom", ex);
    }
    return new GetResponse(new GetResult(getRequest.index(), getRequest.type(), getRequest.id(), 0, true, new BytesArray(json), null));
}
Also used : BytesArray(org.elasticsearch.common.bytes.BytesArray) GetResult(org.elasticsearch.index.get.GetResult) Matchers.containsString(org.hamcrest.Matchers.containsString) IOException(java.io.IOException) ElasticsearchException(org.elasticsearch.ElasticsearchException) GetResponse(org.elasticsearch.action.get.GetResponse) XContentBuilder(org.elasticsearch.common.xcontent.XContentBuilder)

Example 8 with GetResult

use of org.elasticsearch.index.get.GetResult in project crate by crate.

the class TransportShardUpsertAction method prepareUpdate.

/**
     * Prepares an update request by converting it into an index request.
     * <p/>
     * TODO: detect a NOOP and return an update response if true
     */
@SuppressWarnings("unchecked")
private SourceAndVersion prepareUpdate(DocTableInfo tableInfo, ShardUpsertRequest request, ShardUpsertRequest.Item item, IndexShard indexShard) throws ElasticsearchException {
    final GetResult getResult = indexShard.getService().get(request.type(), item.id(), new String[] { RoutingFieldMapper.NAME, ParentFieldMapper.NAME, TTLFieldMapper.NAME }, true, Versions.MATCH_ANY, VersionType.INTERNAL, FetchSourceContext.FETCH_SOURCE, false);
    if (!getResult.isExists()) {
        throw new DocumentMissingException(request.shardId(), request.type(), item.id());
    }
    if (getResult.internalSourceRef() == null) {
        // no source, we can't do nothing, through a failure...
        throw new DocumentSourceMissingException(request.shardId(), request.type(), item.id());
    }
    if (item.version() != Versions.MATCH_ANY && item.version() != getResult.getVersion()) {
        throw new VersionConflictEngineException(indexShard.shardId(), Constants.DEFAULT_MAPPING_TYPE, item.id(), getResult.getVersion(), item.version());
    }
    Tuple<XContentType, Map<String, Object>> sourceAndContent = XContentHelper.convertToMap(getResult.internalSourceRef(), true);
    final Map<String, Object> updatedSourceAsMap;
    final XContentType updateSourceContentType = sourceAndContent.v1();
    updatedSourceAsMap = sourceAndContent.v2();
    SymbolToFieldExtractorContext ctx = new SymbolToFieldExtractorContext(functions, item.insertValues());
    Map<String, Object> pathsToUpdate = new LinkedHashMap<>();
    Map<String, Object> updatedGeneratedColumns = new LinkedHashMap<>();
    for (int i = 0; i < request.updateColumns().length; i++) {
        /*
             * NOTE: mapping isn't applied. So if an Insert was done using the ES Rest Endpoint
             * the data might be returned in the wrong format (date as string instead of long)
             */
        String columnPath = request.updateColumns()[i];
        Object value = SYMBOL_TO_FIELD_EXTRACTOR.convert(item.updateAssignments()[i], ctx).apply(getResult);
        Reference reference = tableInfo.getReference(ColumnIdent.fromPath(columnPath));
        if (reference != null) {
            /*
                 * it is possible to insert NULL into column that does not exist yet.
                 * if there is no column reference, we must not validate!
                 */
            ConstraintsValidator.validate(value, reference);
        }
        if (reference instanceof GeneratedReference) {
            updatedGeneratedColumns.put(columnPath, value);
        } else {
            pathsToUpdate.put(columnPath, value);
        }
    }
    // For updates we always have to enforce the validation of constraints on shards.
    // Currently the validation is done only for generated columns.
    processGeneratedColumns(tableInfo, pathsToUpdate, updatedGeneratedColumns, true, getResult);
    updateSourceByPaths(updatedSourceAsMap, pathsToUpdate);
    try {
        XContentBuilder builder = XContentFactory.contentBuilder(updateSourceContentType);
        builder.map(updatedSourceAsMap);
        return new SourceAndVersion(builder.bytes(), getResult.getVersion());
    } catch (IOException e) {
        throw new ElasticsearchGenerationException("Failed to generate [" + updatedSourceAsMap + "]", e);
    }
}
Also used : GetResult(org.elasticsearch.index.get.GetResult) BytesReference(org.elasticsearch.common.bytes.BytesReference) IOException(java.io.IOException) XContentType(org.elasticsearch.common.xcontent.XContentType) XContentBuilder(org.elasticsearch.common.xcontent.XContentBuilder) ElasticsearchGenerationException(org.elasticsearch.ElasticsearchGenerationException)

Example 9 with GetResult

use of org.elasticsearch.index.get.GetResult in project elasticsearch by elastic.

the class TermVectorsService method addGeneratedTermVectors.

private static Fields addGeneratedTermVectors(IndexShard indexShard, Engine.GetResult get, Fields termVectorsByField, TermVectorsRequest request, Set<String> selectedFields) throws IOException {
    /* only keep valid fields */
    Set<String> validFields = new HashSet<>();
    for (String field : selectedFields) {
        MappedFieldType fieldType = indexShard.mapperService().fullName(field);
        if (!isValidField(fieldType)) {
            continue;
        }
        // already retrieved, only if the analyzer hasn't been overridden at the field
        if (fieldType.storeTermVectors() && (request.perFieldAnalyzer() == null || !request.perFieldAnalyzer().containsKey(field))) {
            continue;
        }
        validFields.add(field);
    }
    if (validFields.isEmpty()) {
        return termVectorsByField;
    }
    /* generate term vectors from fetched document fields */
    String[] getFields = validFields.toArray(new String[validFields.size() + 1]);
    getFields[getFields.length - 1] = SourceFieldMapper.NAME;
    GetResult getResult = indexShard.getService().get(get, request.id(), request.type(), getFields, null);
    Fields generatedTermVectors = generateTermVectors(indexShard, getResult.sourceAsMap(), getResult.getFields().values(), request.offsets(), request.perFieldAnalyzer(), validFields);
    /* merge with existing Fields */
    if (termVectorsByField == null) {
        return generatedTermVectors;
    } else {
        return mergeFields(termVectorsByField, generatedTermVectors);
    }
}
Also used : Fields(org.apache.lucene.index.Fields) MultiFields(org.apache.lucene.index.MultiFields) GetResult(org.elasticsearch.index.get.GetResult) MappedFieldType(org.elasticsearch.index.mapper.MappedFieldType) HashSet(java.util.HashSet)

Example 10 with GetResult

use of org.elasticsearch.index.get.GetResult in project elasticsearch by elastic.

the class UpdateHelper method extractGetResult.

/**
     * Applies {@link UpdateRequest#fetchSource()} to the _source of the updated document to be returned in a update response.
     * For BWC this function also extracts the {@link UpdateRequest#fields()} from the updated document to be returned in a update response
     */
public GetResult extractGetResult(final UpdateRequest request, String concreteIndex, long version, final Map<String, Object> source, XContentType sourceContentType, @Nullable final BytesReference sourceAsBytes) {
    if ((request.fields() == null || request.fields().length == 0) && (request.fetchSource() == null || request.fetchSource().fetchSource() == false)) {
        return null;
    }
    SourceLookup sourceLookup = new SourceLookup();
    sourceLookup.setSource(source);
    boolean sourceRequested = false;
    Map<String, GetField> fields = null;
    if (request.fields() != null && request.fields().length > 0) {
        for (String field : request.fields()) {
            if (field.equals("_source")) {
                sourceRequested = true;
                continue;
            }
            Object value = sourceLookup.extractValue(field);
            if (value != null) {
                if (fields == null) {
                    fields = new HashMap<>(2);
                }
                GetField getField = fields.get(field);
                if (getField == null) {
                    getField = new GetField(field, new ArrayList<>(2));
                    fields.put(field, getField);
                }
                getField.getValues().add(value);
            }
        }
    }
    BytesReference sourceFilteredAsBytes = sourceAsBytes;
    if (request.fetchSource() != null && request.fetchSource().fetchSource()) {
        sourceRequested = true;
        if (request.fetchSource().includes().length > 0 || request.fetchSource().excludes().length > 0) {
            Object value = sourceLookup.filter(request.fetchSource());
            try {
                final int initialCapacity = Math.min(1024, sourceAsBytes.length());
                BytesStreamOutput streamOutput = new BytesStreamOutput(initialCapacity);
                try (XContentBuilder builder = new XContentBuilder(sourceContentType.xContent(), streamOutput)) {
                    builder.value(value);
                    sourceFilteredAsBytes = builder.bytes();
                }
            } catch (IOException e) {
                throw new ElasticsearchException("Error filtering source", e);
            }
        }
    }
    // TODO when using delete/none, we can still return the source as bytes by generating it (using the sourceContentType)
    return new GetResult(concreteIndex, request.type(), request.id(), version, true, sourceRequested ? sourceFilteredAsBytes : null, fields);
}
Also used : BytesReference(org.elasticsearch.common.bytes.BytesReference) GetField(org.elasticsearch.index.get.GetField) SourceLookup(org.elasticsearch.search.lookup.SourceLookup) GetResult(org.elasticsearch.index.get.GetResult) ArrayList(java.util.ArrayList) IOException(java.io.IOException) ElasticsearchException(org.elasticsearch.ElasticsearchException) BytesStreamOutput(org.elasticsearch.common.io.stream.BytesStreamOutput) XContentBuilder(org.elasticsearch.common.xcontent.XContentBuilder)

Aggregations

GetResult (org.elasticsearch.index.get.GetResult)15 IOException (java.io.IOException)6 ElasticsearchException (org.elasticsearch.ElasticsearchException)5 XContentBuilder (org.elasticsearch.common.xcontent.XContentBuilder)5 BytesArray (org.elasticsearch.common.bytes.BytesArray)4 GetResponse (org.elasticsearch.action.get.GetResponse)3 BytesReference (org.elasticsearch.common.bytes.BytesReference)3 XContentType (org.elasticsearch.common.xcontent.XContentType)3 HashMap (java.util.HashMap)2 Map (java.util.Map)2 Explanation (org.apache.lucene.search.Explanation)2 IndexRequest (org.elasticsearch.action.index.IndexRequest)2 Settings (org.elasticsearch.common.settings.Settings)2 IndexService (org.elasticsearch.index.IndexService)2 GetField (org.elasticsearch.index.get.GetField)2 GetResultTests.copyGetResult (org.elasticsearch.index.get.GetResultTests.copyGetResult)2 GetResultTests.mutateGetResult (org.elasticsearch.index.get.GetResultTests.mutateGetResult)2 GetResultTests.randomGetResult (org.elasticsearch.index.get.GetResultTests.randomGetResult)2 IndexShard (org.elasticsearch.index.shard.IndexShard)2 ShardId (org.elasticsearch.index.shard.ShardId)2