整合springboot

springboot

依赖
<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-data-elasticsearch</artifactId>
</dependency>

spring中es版本和本地不一样,太老,要自己手动控制版本

<elasticsearch.version>7.15.1</elasticsearch.version>
client配置文件
@Configuration
public class ESClientConfig {
    @Bean
    public RestHighLevelClient restHighLevelClient() {
        return new RestHighLevelClient(
                RestClient.builder(
                        new HttpHost("localhost", 9200, "http")));
    }

}
索引操作测试
@Autowired
@Qualifier("restHighLevelClient")
private RestHighLevelClient client;

//创建索引
@Test
public void createIndex() throws IOException {
    CreateIndexRequest request = new CreateIndexRequest("jpy_index");
    CreateIndexResponse response = client.indices().create(request, RequestOptions.DEFAULT);
    System.out.println(response);
}

//判断索引是否存在
@Test
public void existsIndex() throws IOException {
    GetIndexRequest request = new GetIndexRequest("jpy_index");
    boolean exists = client.indices().exists(request, RequestOptions.DEFAULT);
    System.out.println(exists);
}

//删除索引
@Test
public void delIndex() throws IOException {
    DeleteIndexRequest request = new DeleteIndexRequest("jpy_index");
    AcknowledgedResponse response = client.indices().delete(request, RequestOptions.DEFAULT);
    System.out.println(response.isAcknowledged());
}
文档操作测试
@Test
public void addDoc() throws IOException {
    //数据对象
    User user = new User("桃子好好", 18);

    //创建请求
    IndexRequest request = new IndexRequest("jpy_index");

    //规则:PUT 索引/_doc/id
    request.id("1");
    request.timeout("1s");

    //将数据放入请求
    request.source(JSONObject.toJSONString(user), XContentType.JSON);

    //客户端发送请求
    IndexResponse response = client.index(request, RequestOptions.DEFAULT);
    System.out.println(response.toString());
    System.out.println(response.status());//状态,对应为CREATED
}

//判断是否存在某个文档
@Test
public void existsDoc() throws IOException {
    GetRequest request = new GetRequest("jpy_index", "2");
    //不获取返回的_source的上下文
    request.fetchSourceContext();
    boolean b = client.exists(request, RequestOptions.DEFAULT);
    System.out.println(b);
}

//获取文档信息
@Test
public void getDoc() throws IOException {
    GetRequest request = new GetRequest("jpy_index", "1");
    GetResponse response = client.get(request, RequestOptions.DEFAULT);
    System.out.println(response.toString());
    System.out.println(response.getSourceAsString());
    System.out.println(response.getSource());
    System.out.println(response.getSourceAsMap());
}

//更新文档
@Test
public void updateDoc() throws IOException {
    UpdateRequest request = new UpdateRequest("jpy_index", "1");
    User user = new User("桃子123", 19);
    request.doc(JSONObject.toJSONString(user), XContentType.JSON);
    UpdateResponse response = client.update(request, RequestOptions.DEFAULT);
    System.out.println(response.status());
}

//删除某条文档
@Test
public void deleteDoc() throws IOException {
    DeleteRequest request = new DeleteRequest("jpy_index", "1");
    DeleteResponse response = client.delete(request, RequestOptions.DEFAULT);
    System.out.println(response.status());//删除不存在的,会NOT_FOUND
}

//批量添加文档
//批量增删改都是如此
@Test
public void addBulkDoc() throws IOException {
    BulkRequest request = new BulkRequest("jpy_index");
    List<User> userList = new ArrayList<>();
    userList.add(new User("张三", 10));
    userList.add(new User("李四", 20));
    userList.add(new User("王五", 30));
    userList.add(new User("赵六", 40));

    for (int i = 0; i < userList.size(); i++) {
        request.add(new IndexRequest().id("" + (i + 1)).source(JSONObject.toJSONString(userList.get(i)), XContentType.JSON));
    }

    BulkResponse response = client.bulk(request, RequestOptions.DEFAULT);
    System.out.println(response.status());
}


/*
* 1.搜索请求 SearchRequest
* 2.条件构造 SearchSourceBuilder//////高亮构造 HighlightBuilder
* */
@Test
public void search() throws IOException {
    //创建搜索请求
    SearchRequest searchRequest = new SearchRequest("jpy_index");
    //构建搜索条件
    SearchSourceBuilder sourceBuilder = new SearchSourceBuilder();

    //高亮构造
    HighlightBuilder highlightBuilder = new HighlightBuilder();
    sourceBuilder.highlighter(highlightBuilder);
    

    //查询条件,我们可以通过QueryBuilders工具来实现
    //QueryBuilders.termQuery 精确
    //QueryBuilders.matchAllQuery() 匹配所有
    TermQueryBuilder termQueryBuilder = QueryBuilders.termQuery("name.keyword", "张三");
    sourceBuilder.query(termQueryBuilder);
    sourceBuilder.timeout(new TimeValue(60, TimeUnit.SECONDS));
    searchRequest.source(sourceBuilder);
    SearchResponse search = client.search(searchRequest, RequestOptions.DEFAULT);
    System.out.println(search.status());
    //System.out.println(JSONObject.toJSONString(search.getHits()));
    for (SearchHit hit : search.getHits().getHits()) {
        System.out.println(hit.getSourceAsMap());
    }
}
posted @   jpy  阅读(21)  评论(0编辑  收藏  举报
编辑推荐:
· 开发者必知的日志记录最佳实践
· SQL Server 2025 AI相关能力初探
· Linux系列:如何用 C#调用 C方法造成内存泄露
· AI与.NET技术实操系列(二):开始使用ML.NET
· 记一次.NET内存居高不下排查解决与启示
阅读排行:
· 开源Multi-agent AI智能体框架aevatar.ai,欢迎大家贡献代码
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧
· 园子的第一款AI主题卫衣上架——"HELLO! HOW CAN I ASSIST YOU TODAY
点击右上角即可分享
微信分享提示