繁体   English   中英

如何使用Java客户端更新Elastic Search上的条目

[英]How to update an entry on Elastic Search using Java client

我正在尝试使用弹性搜索客户端更新我的es模型信息

org.elasticsearch.client.Client

https://www.programcreek.com/java-api-examples/?api=org.elasticsearch.client.Client

我真的很难找到正确的方法,因为我不知道索引和匹配器,对不起,我非常喜欢这个主题。

  {
    "_index": "my_index_20",
    "_type": "student",
    "_id": "a80ae58",
    "_source": {
      "model": {
        "id": "a80ae58748e",
        "name": "John Doe"
        ....

我的代码到目前为止

 response = esClient.prepareUpdate("student", "name", "John Doe")
                    .setDoc(jsonBuilder()               
                    .startObject()
                    .field("name", "Joe Doe")
                    .endObject())
                    .get();

我使用正确的索引吗? 或者我可以在这里改变什么?

我没有收到任何错误,但“文档丢失”结果...意味着我可能没有使用正确的索引。

想法?

根据反馈和更多信息更新...

我把它移到了

response = esClient.prepareUpdate("my_index_20", "student", "a80ae58")
                    .setDoc(jsonBuilder()               
                    .startObject()
                    .field("name", "Joe Doe")
                    .endObject())
                    .get();

这有效,但由于我不知道索引ID我无法执行此操作,是否有任何方法可以通过查询生成器或其他功能执行此操作?

这是prepareUpdate方法的签名:

UpdateRequestBuilder prepareUpdate(String index, String type, String id);

所以正确的语法可能是

esClient.prepareUpdate("my_index_20", "student", "a80ae58").setDoc(...)...

如果要通过匹配其他字段来执行此操作,请按查询使用更新。

String indexName = "my_index_*"; //Assuming that you don't know the exact index, but know the global format (for example the beginning of the name of the index)
BoolQueryBuilder boolQuery = QueryBuilders.boolQuery();
boolQuery.filter(QueryBuilders.termQuery("name", "John Doe"));
boolQuery.filter(QueryBuilders.termQuery("otherField", "otherFieldValue"));
UpdateByQueryRequestBuilder updateByQuery = UpdateByQueryAction.INSTANCE.newRequestBuilder(esClient);
updateByQuery.source(indexName); 
updateByQuery.filter(boolQuery); 
BulkByScrollResponse updateResponse = updateByQuery.get();

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM