Java 程序可以通过 Elasticsearch 的 Java API 对接 Elasticsearch。Java API 提供了与 Elasticsearch 交互的各种方法,包括索引、搜索、聚合等操作。

以下是一个简单的 Java 程序示例,演示如何使用 Java API 连接并操作 Elasticsearch:

import org.elasticsearch.client.*;
import org.elasticsearch.action.index.*;
import org.elasticsearch.action.search.*;
import org.elasticsearch.action.search.SearchResponse;
import org.elasticsearch.index.query.QueryBuilders;
import org.elasticsearch.index.query.QueryBuilder;
import org.elasticsearch.search.SearchHit;
import org.elasticsearch.search.SearchHits;
import org.elasticsearch.search.aggregations.AggregationBuilders;
import org.elasticsearch.search.aggregations.bucket.terms.Terms;
import org.elasticsearch.search.aggregations.metrics.sum.Sum;

public class EsJavaDemo {
    
    public static void main(String[] args) throws Exception {
        // 创建连接
        RestClient restClient = RestClient.builder(new HttpHost("localhost", 9200)).build();
        
        // 索引一条数据
        IndexRequest indexRequest = new IndexRequest("my-index");
        indexRequest.id("1");
        indexRequest.source("title", "Java 编程思想", "author", "Bruce Eckel");
        IndexResponse indexResponse = restClient.index(indexRequest, RequestOptions.DEFAULT);
        System.out.println(indexResponse.getResult().name());
        
        // 搜索数据
        SearchRequest searchRequest = new SearchRequest("my-index");
        QueryBuilder queryBuilder = QueryBuilders.matchQuery("title", "Java");
        SearchSourceBuilder searchSourceBuilder = new SearchSourceBuilder();
        searchSourceBuilder.query(queryBuilder);
        searchRequest.source(searchSourceBuilder);
        SearchResponse searchResponse = restClient.search(searchRequest, RequestOptions.DEFAULT);
        SearchHits hits = searchResponse.getHits();
        for (SearchHit hit : hits) {
            System.out.println(hit.getSourceAsString());
        }
        
        // 聚合数据
        searchSourceBuilder.aggregation(AggregationBuilders.terms("by_author").field("author").subAggregation(AggregationBuilders.sum("sales").field("sales")));
        searchRequest.source(searchSourceBuilder);
        searchResponse = restClient.search(searchRequest, RequestOptions.DEFAULT);
        Terms terms = searchResponse.getAggregations().get("by_author");
        for (Terms.Bucket bucket : terms.getBuckets()) {
            System.out.println(bucket.getKeyAsString() + ": " + bucket.getDocCount() + " books, " + ((Sum) bucket.getAggregations().get("sales")).getValue() + " sales");
        }
        
        // 关闭连接
        restClient.close();
    }
}

这个程序演示了三个操作:

  1. 索引一条数据。
  2. 搜索包含 'Java' 关键字的文档。
  3. 按作者聚合数据,并计算每个作者的图书数量和销售总量。

程序中使用了 RestClient 来连接 Elasticsearch,使用 IndexRequest 来索引数据,使用 SearchRequest 和 SearchSourceBuilder 来搜索和聚合数据。查询条件使用了 QueryBuilder,聚合使用了 AggregationBuilders。搜索结果使用了 SearchHit 和 SearchHits 对象,聚合结果使用了 Terms 和 Bucket 对象。这些类和方法都是 Elasticsearch Java API 中提供的。

Java Elasticsearch API 对接教程 - 索引、搜索和聚合示例

原文地址: https://www.cveoy.top/t/topic/lFvE 著作权归作者所有。请勿转载和采集!

免费AI点我,无需注册和登录