0
내 봄 부팅 프로젝트에 봄 데이터 Elasticsearch API를 사용하고 있는데 나는 다음과 같은 DeviceVO 클래스가 : 나는 부분적으로 DeviceTag에 태그를 추가/제거에서이 문서를 업데이트해야Elasticsearch 부분 업데이트를 수집
@Document(indexName = "devices", type = "device")
@Data
@NoArgsConstructor
@AllArgsConstructor
@Builder
public class DeviceVO {
@Id
private String id;
@Field(type = FieldType.text)
private String name;
//other fields
@Field(type = FieldType.Nested)
private Set<DeviceTagVO> deviceTags;
private LocalDateTime createdOn;
}
을 세트.
은 내가 속성을 업데이트하기 위해 다음과 같은 사용자를 할 수 있습니다 알고
IndexRequest indexRequest = new IndexRequest();
indexRequest.source("name", newName);
UpdateQuery updateQuery = new UpdateQueryBuilder().withId(DeviceVO.getId()).withClass(DeviceVO.class).withIndexRequest(indexRequest).build();
elasticsearchTemplate.update(updateQuery);
내가 업데이트 쿼리를 사용하여 설정 항목을 제거 추가 할 수있는 방법
?
private void updateSearchIndexRemoveDeviceTag(DeviceVO deviceVO, DeviceTagVO tag) {
String scriptTagId = "{\n" +
" \"script\": {\n" +
" \"lang\": \"painless\",\n" +
" \"inline\": \"(ctx._source.deviceTagIds = ctx._source.deviceTagIds ?: []).remove(ctx._source.deviceTagIds.indexOf(params.tags))\",\n" + //check if device tags is null
" \"params\": {\n" +
" \"tags\": \"" + tag.getId() + "\"\n" +
" }\n" +
" }\n" +
"}";
try {
client.execute(new Update.Builder(scriptTagId).index("devices").type("device").id(deviceVO.getId()).build());
} catch (IOException e) {
throw new ElasticSearchException("error.updating.device.index", "remove device tag from index");
}
}
(봄에 사용) 농담 아직이 기능을 지원하지 않기 때문에, 우리는 업데이트 쿼리 내 인라인 스크립트를 사용