Update API

有两种方式更新索引:

  • 创建 UpdateRequest,通过client发送;
  • 使用 prepareUpdate() 方法;

使用UpdateRequest

  1. UpdateRequest updateRequest = new UpdateRequest();
  2. updateRequest.index("index");
  3. updateRequest.type("type");
  4. updateRequest.id("1");
  5. updateRequest.doc(jsonBuilder()
  6. .startObject()
  7. .field("gender", "male")
  8. .endObject());
  9. client.update(updateRequest).get();

使用 prepareUpdate() 方法

这里官方的示例有问题,new Script()参数错误,所以一下代码是我自己写的(2017/11/10)

  1. client.prepareUpdate("ttl", "doc", "1")
  2. .setScript(new Script("ctx._source.gender = \"male\"" ,ScriptService.ScriptType.INLINE, null, null))//脚本可以是本地文件存储的,如果使用文件存储的脚本,需要设置 ScriptService.ScriptType.FILE
  3. .get();
  4. client.prepareUpdate("ttl", "doc", "1")
  5. .setDoc(jsonBuilder() //合并到现有文档
  6. .startObject()
  7. .field("gender", "male")
  8. .endObject())
  9. .get();

Update by script

使用脚本更新文档

  1. UpdateRequest updateRequest = new UpdateRequest("ttl", "doc", "1")
  2. .script(new Script("ctx._source.gender = \"male\""));
  3. client.update(updateRequest).get();

Update by merging documents

合并文档

  1. UpdateRequest updateRequest = new UpdateRequest("index", "type", "1")
  2. .doc(jsonBuilder()
  3. .startObject()
  4. .field("gender", "male")
  5. .endObject());
  6. client.update(updateRequest).get();

Upsert

更新插入,如果存在文档就更新,如果不存在就插入

  1. IndexRequest indexRequest = new IndexRequest("index", "type", "1")
  2. .source(jsonBuilder()
  3. .startObject()
  4. .field("name", "Joe Smith")
  5. .field("gender", "male")
  6. .endObject());
  7. UpdateRequest updateRequest = new UpdateRequest("index", "type", "1")
  8. .doc(jsonBuilder()
  9. .startObject()
  10. .field("gender", "male")
  11. .endObject())
  12. .upsert(indexRequest); //如果不存在此文档 ,就增加 `indexRequest`
  13. client.update(updateRequest).get();

如果 index/type/1 存在,类似下面的文档:

  1. {
  2. "name" : "Joe Dalton",
  3. "gender": "male"
  4. }

如果不存在,会插入新的文档:

  1. {
  2. "name" : "Joe Smith",
  3. "gender": "male"
  4. }