Spring & elasticsearch -按特定字段而不是id向上插入文档列表

3mpgtkmj  于 2022-11-02  发布在  ElasticSearch
关注(0)|答案(1)|浏览(191)

当前我们正在基于给定的id更新插入文档。但是,我们最近进行了一些更改,即id将自动生成,并且我们创建了一个新字段“main_id”,它将作为主id。我们如何按“main_id”而不是按id使用更新插入?下面是示例实体:

@Data
@Document(indexName = "person")
public class Person {

  @Id
  @JsonIgnore
  private String id;

   private String mainId;

  private String name;
}

目前,我们的方法实现如下:

public void bulkCreateOrUpdate(final List<T> objectList) {

    List<UpdateQuery> updateList = new ArrayList<>();

    for (T st: objectList) {
      UpdateQuery updateQuery = UpdateQuery.builder(st.getId())
          .withDocument(this.operations.getElasticsearchConverter().mapObject(st))
          .withDocAsUpsert(true)
          .build();
      updateList.add(updateQuery);
    }

    this.operations.bulkUpdate(updateList,
        this.operations.getIndexCoordinatesFor(this.entityClass));
  }
svgewumm

svgewumm1#

Elasticsearch的update API需要文档的id。
还有update by query,它也可以在Spring Data Elasticsearch中使用,但是在那里你不能传入一个新的或更新的文档,而只能传入一个脚本来进行更新。
因此,如果不使用id,就无法直接进行更新。

相关问题