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();
}
posted @ 2022-03-07 18:04  叕叕666  阅读(113)  评论(0)    收藏  举报