从elasticsearch索引返回特定字段或更新查询

时间:2017-08-18 09:40:11

标签: java elasticsearch

以下是我的索引或更新文档代码的一部分。我想得到'_source'中的特定字段值'documentID'。这里'json'是文档模型的JSONObject。

 String jsonForUpdate = json.toString();
    String uuid = UUID.randomUUID().toString();
    json.put("documentID", uuid);
    String jsonForIndex = json.toString();   
    IndexRequest indexRequest = new IndexRequest(indexName, typeName, documentModel.getId());
    indexRequest.source(jsonForIndex);
    UpdateResponse updateResponse = elasticsearchTemplate.getClient().prepareUpdate(indexName, typeName , documentModel.getId()).setDoc(jsonForUpdate).setUpsert(indexRequest).setFields("documentID").get();

我尝试使用此代码获取文档字段的值。

updateResponse.getGetResult().getFields().get("documentID").getValue().toString();

但是在更新文档时它对我没有用。在索引文档时工作正常。

1 个答案:

答案 0 :(得分:1)

如果你看一下:https://techpunch.co.uk/development/create-custom-doctrine2-hydrator-symfony2

您可以看到可在更新时传递的以下参数:

_source

Allows to control if and how the updated source should be returned in the response. By default the updated source is not returned. See source filtering for details.

这意味着您prepareUpdate可以使用setFetchSource(true)方法,但这会带来完整的文档。

<强>更新 对于2.3.3版,您仍然可以使用:

/**
 * Explicitly specify the fields that will be returned. By default, nothing is returned.
 */
public UpdateRequestBuilder setFields(String... fields) {
    request.fields(fields);
    return this;
}

Elasticsearch doc:https://www.elastic.co/guide/en/elasticsearch/reference/current/docs-update.html

该方法在UpdateRequestBuilder上可用,它是prepareUpdate返回的对象的类。