• Elasticsearch 索引库操作与 Rest API 使用详解


    1. 引入 Elasticsearch 依赖

    在开始之前,确保你的 Maven 或 Gradle 项目中已经引入了 Elasticsearch 的 Java 客户端库。你可以使用以下 Maven 依赖:

    ```xml

        org.elasticsearch.client
        elasticsearch-rest-high-level-client
        7.15.0

    ```

    2. 连接 Elasticsearch 服务器

    建立与 Elasticsearch 服务器的连接是使用它的第一步。以下是一个简单的连接示例:

    ```java
    import org.elasticsearch.client.RestHighLevelClient;
    import org.elasticsearch.client.RestClient;
    import org.elasticsearch.client.RestClientBuilder;

    RestHighLevelClient client = new RestHighLevelClient(
        RestClient.builder(new HttpHost("localhost", 9200, "http"))
    );
    ```

     3. 创建索引

    索引是 Elasticsearch 存储、索引和搜索的基本单元。下面是一个创建索引的示例:

    ```java
    import org.elasticsearch.client.indices.CreateIndexRequest;
    import org.elasticsearch.client.RequestOptions;

    CreateIndexRequest request = new CreateIndexRequest("blog");
    client.indices().create(request, RequestOptions.DEFAULT);
    ```

     4. 添加文档

    一旦索引创建完成,你可以向其添加文档。以下是一个添加文档的简单示例:

    ```java
    import org.elasticsearch.client.index.IndexRequest;

    IndexRequest indexRequest = new IndexRequest("blog")
        .id("1")
        .source(Map.of("title", "Getting Started with Elasticsearch",
                      "content", "Elasticsearch is a powerful search engine."));
    client.index(indexRequest, RequestOptions.DEFAULT);
    ```

    5. 查询文档

    使用 Elasticsearch 进行文档检索是其主要功能之一。以下是一个简单的查询示例:

    ```java
    import org.elasticsearch.action.search.SearchRequest;
    import org.elasticsearch.search.builder.SearchSourceBuilder;
    import org.elasticsearch.search.SearchHit;
    import org.elasticsearch.search.SearchHits;
    import org.elasticsearch.search.builder.QueryBuilders;

    SearchRequest searchRequest = new SearchRequest("blog");
    SearchSourceBuilder searchSourceBuilder = new SearchSourceBuilder();
    searchSourceBuilder.query(QueryBuilders.matchQuery("title", "Elasticsearch"));
    searchRequest.source(searchSourceBuilder);
    SearchHits searchHits = client.search(searchRequest, RequestOptions.DEFAULT).getHits();

    // 处理搜索结果
    for (SearchHit hit : searchHits) {
        Map sourceAsMap = hit.getSourceAsMap();
        System.out.println(sourceAsMap);
    }
    ```

    6. 更新文档

    更新文档是 Elasticsearch 中常见的操作之一。以下是一个更新文档的示例:

    ```java
    import org.elasticsearch.action.update.UpdateRequest;

    UpdateRequest updateRequest = new UpdateRequest("blog", "1")
        .doc(Map.of("content", "Elasticsearch is a scalable search engine."));
    client.update(updateRequest, RequestOptions.DEFAULT);
    ```

    7. 删除文档

    删除文档同样是常见的操作。以下是一个删除文档的示例:

    ```java
    import org.elasticsearch.client.DeleteRequest;

    DeleteRequest deleteRequest = new DeleteRequest("blog", "1");
    client.delete(deleteRequest, RequestOptions.DEFAULT);
    ```

    8. 异常处理和资源释放

    在实际开发中,务必注意异常处理和资源释放。使用 try-with-resources 语句可以确保资源在使用完毕后得到正确释放:

    ```java
    try (RestHighLevelClient client = new RestHighLevelClient(
        RestClient.builder(new HttpHost("localhost", 9200, "http"))
    )) {
        // 执行 Elasticsearch 操作
    } catch (IOException e) {
        e.printStackTrace();
    }
    ```

    9. 深入实战:高级搜索与聚合操作

    除了基本的增删改查操作,Elasticsearch 还提供了强大的搜索和聚合功能。例如,通过使用 `SearchSourceBuilder` 可以实现更复杂的查询条件,而聚合操作则能够对数据进行深度分析。在实际项目中,我们可以结合业务需求使用这些高级功能,提供更灵活和强大的搜索体验。

    ```java
    // 添加一个范围过滤条件
    searchSourceBuilder.query(QueryBuilders.rangeQuery("publish_date").gte("2022-01-01"));

    // 添加一个聚合操作,统计每个作者的文章数
    searchSourceBuilder.aggregation(AggregationBuilders
        .terms("authors").field("author.keyword")
        .subAggregation(AggregationBuilders.count("article_count").field("title"))
    );

    // 执行搜索
    SearchHits advancedSearchHits = client.search(searchRequest, RequestOptions.DEFAULT).getHits();
    ```

     结语

    通过本文的介绍,你应该对 Elasticsearch 中索引库的基本操作和 Rest API 有了更深入的理解。这些操作是构建强大搜索引擎的基础,同时也是 Java 开发者在实际项目中不可或缺的技能。在实际项目中,我们还可以结合高级搜索和聚合操作,提供更灵活和强大的搜索功能。希望这篇文章对你有所帮助。

  • 相关阅读:
    Postgresql JSON对象和数组查询
    大佬的职场经验
    java 计算某个时间段在多个时间段中分别用时
    硬件开发笔记(十九):Altium Designer 21软件介绍和安装过程
    CentOS 7 安装指定版本的python环境
    PBR学习笔记
    国外问卷调查赚钱靠谱吗?
    ANSVC无功补偿装置助力江苏某环保能源项目
    初学者如何选择:前端开发还是后端开发?
    力扣第135题 分发糖果 c++ 贪心 加 思维
  • 原文地址:https://blog.csdn.net/weixin_64822448/article/details/134408313