java 连接 Elasticsearch 使用 TransportClient 根据查询结果进行修改或删除

依赖

<!-- org.elasticsearch.client/transport -->
<dependency>
    <groupId>org.elasticsearch.client</groupId>
    <artifactId>transport</artifactId>
    <version>7.13.3</version>
</dependency>

配置

@Configuration
public class ESConfig {

    @Bean
    public TransportClient getTransportClient() {
        Settings settings = Settings.builder()
                .put("cluster.name", "elasticsearch").build();
        try {
            TransportClient client = new PreBuiltTransportClient(settings)
                    //        TransportClient client = new PreBuiltTransportClient(Settings.EMPTY)
                    .addTransportAddress(new TransportAddress(InetAddress.getByName("localhost"), 9300))//通讯端口  而不是服务端口
                    .addTransportAddress(new TransportAddress(InetAddress.getByName("localhost"), 9301));
            return client;
        } catch (UnknownHostException e) {
            e.printStackTrace();
        }
        return null;
    }
}
@Autowired
private TransportClient transportClient;

删除单条数据

public void deleteData() {
    DeleteResponse response = transportClient
            .prepareDelete("product2", "_doc", "2")
            .get();
    System.out.println(response.getResult());
}

根据查询结果删除多条数据

public void deleteDataByQueryResult() {
    new DeleteByQueryRequestBuilder(transportClient, DeleteByQueryAction.INSTANCE)
    		//查询
            .filter(QueryBuilders.matchQuery("name", "aa"))
            .source("myindex")
            .execute(new ActionListener<BulkByScrollResponse>() {
                @Override
                public void onResponse(BulkByScrollResponse response) {
                    long deleted = response.getDeleted();
                    System.out.println("成功删除" + deleted + "条数据");
                }
                @Override
                public void onFailure(Exception e) {
                    System.out.println("删除失败");
                }
            });
}

修改单条数据

public void updateData() throws IOException {
    UpdateResponse response = transportClient
            .prepareUpdate("product2", "_doc", "2")
            .setDoc(XContentFactory.jsonBuilder()
                    .startObject()
                    .field("name", "update name")
                    .endObject())
            .get();
    System.out.println(response.getResult());
}

根据查询结果修改数据

public void updataDataByQueryResult() {
    UpdateByQueryRequestBuilder updateByQuery =
            new UpdateByQueryRequestBuilder(transportClient, UpdateByQueryAction.INSTANCE);
    updateByQuery.source("myindex")
    		//查询
            .filter(QueryBuilders.termQuery("name", "aa"))
            .maxDocs(1000)
            .script(new Script(ScriptType.INLINE,
                    "painless",
                    "ctx._source.awesome = 'absolutely'",
                    Collections.emptyMap()));
    BulkByScrollResponse response = updateByQuery.get();
}
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值