Búsqueda de texto completo Integración de ElasticSearch Integración de Springboot cliente de alto nivel

1.5 Elasticsearch - Resto - cliente

1、9300: TCP

Spring-data-elasticsearch: transport-api.jar

La versión de SpringBoot es diferente, transport-api.jar es diferente, no se puede adaptar a la versión es

7.x ya no es adecuado para su uso, se descartará después de 8

2、9200: HTTP

JestClient no es oficial y se actualiza lentamente

RestTemplate: las solicitudes HTTP se envían de forma predeterminada, y muchas operaciones de ES deben encapsularse y ser problemáticas

HttpClient: igual que arriba

Elasticsearch-Rest-Client: el RestClient oficial, que encapsula las operaciones de ES y tiene una clara jerarquía de API

Finalmente, elija Elasticsearch-Rest-Client (elasticsearch-rest-high-level-client)

1.5.1 Integración SpringBoot

1 、 Pom.xml

<!-- 导入es的 rest-high-level-client -->
<dependency>
    <groupId>org.elasticsearch.client</groupId>
    <artifactId>elasticsearch-rest-high-level-client</artifactId>
    <version>7.4.2</version>
</dependency>

¿Por qué importar esto? ¿De dónde vino esta configuración?

Sitio web oficial: https://www.elastic.co/guide/en/elasticsearch/client/java-rest/current/java-rest-high-getting-started-maven.html

1.5.2 Configuración de configuración

/**
 * @author gcq
 * @Create 2020-10-26
 *
 * 1、导入配置
 * 2、编写配置,给容器注入一个RestHighLevelClient
 * 3、参照API 官网进行开发
 */
@Configuration
public class GulimallElasticsearchConfig {
    
    


    public static final RequestOptions COMMON_OPTIONS;
    static {
    
    
        RequestOptions.Builder builder = RequestOptions.DEFAULT.toBuilder();
//        builder.addHeader("Authorization", "Bearer " + TOKEN);
//        builder.setHttpAsyncResponseConsumerFactory(
//                new HttpAsyncResponseConsumerFactory
//                        .HeapBufferedResponseConsumerFactory(30 * 1024 * 1024 * 1024));
        COMMON_OPTIONS = builder.build();
    }



    @Bean
    public RestHighLevelClient esRestClient() {
    
    
        RestClientBuilder builder = null;
        builder = RestClient.builder(new HttpHost("192.168.56.10", 9200, "http"));

        RestHighLevelClient client = new RestHighLevelClient(builder);
//        RestHighLevelClient client = new RestHighLevelClient(
//                RestClient.builder(
//                        new HttpHost("localhost", 9200, "http"),
//                        new HttpHost("localhost", 9201, "http")));
        return client;
    }

}

Sitio web oficial: https://www.elastic.co/guide/en/elasticsearch/client/java-rest/current/java-rest-high-getting-started-initialization.html

1.5.3 Uso

Pruebe si la inyección es exitosa

@Autowired
private RestHighLevelClient client;

@Test
public void contextLoads() {
    
    
    System.out.println(client);
}

Pruebe si los datos se pueden agregar o actualizar

/**
 * 添加或者更新
 * @throws IOException
 */
@Test
public void indexData() throws IOException {
    
    
    IndexRequest indexRequest = new IndexRequest("users");
    User user = new User();
    user.setAge(19);
    user.setGender("男");
    user.setUserName("张三");
    String jsonString = JSON.toJSONString(user);
    indexRequest.source(jsonString,XContentType.JSON);

    // 执行操作
    IndexResponse index = client.index(indexRequest, GulimallElasticsearchConfig.COMMON_OPTIONS);

    // 提取有用的响应数据
    System.out.println(index);
}

@Data
static class Account {
    
    
    private int account_number;
    private int balance;
    private String firstname;
    private String lastname;
    private int age;
    private String gender;
    private String address;
    private String employer;
    private String email;
    private String city;
    private String state;
}
//检索数据
@Test
public void searchData() throws IOException {
    
    
    //创建检索请求
    SearchRequest searchRequest = new SearchRequest();
    //指定索引
    searchRequest.indices("bank");
    //指定dsl检索条件
    SearchSourceBuilder sourceBuilder = new SearchSourceBuilder();
//       1.1) 构造检索条件
//        sourceBuilder.query();
//        sourceBuilder.from();
//        sourceBuilder.size();
    sourceBuilder.query(QueryBuilders.matchQuery("address", "mill"));

    //1.2)按照年龄的值分布进行聚合
    TermsAggregationBuilder ageAgg = AggregationBuilders.terms("ageAgg").field("age").size(10);
    sourceBuilder.aggregation(ageAgg);
    //1.3计算平均薪资
    AvgAggregationBuilder balanceAvg = AggregationBuilders.avg("balanceAvg").field("balance");
    sourceBuilder.aggregation(balanceAvg);

    System.out.println("检索条件:" + sourceBuilder.toString());
    searchRequest.source(sourceBuilder);
    //执行检索
    SearchResponse search = client.search(searchRequest, GulismallElasticSearchConfig.COMMON_OPTIONS);
    //3.分析结果
    System.out.println(search.toString());
    //3.1获取素有查询到的数据
    SearchHits hits = search.getHits();
    SearchHit[] searchHits = hits.getHits();

    for (SearchHit hit : searchHits) {
    
    
//            hit.getIndex();hit.getPrimaryTerm();hit.getId();
        Account account = JSON.parseObject(hit.getSourceAsString(), Account.class);
        System.out.println("account:" + account);
    }
    //3.2获取这次检索到的分析信息
    Aggregations aggregations = search.getAggregations();
//        for (Aggregation aggregation : aggregations.asList()) {
    
    
//            System.out.println("当前聚合:"+aggregation.getName());
//        }
    Terms ageAgg1 = aggregations.get("ageAgg");
    for (Terms.Bucket bucket : ageAgg1.getBuckets()) {
    
    
        System.out.println("年龄:" + bucket.getKeyAsString() + "==》" + bucket.getDocCount());
    }
    Avg balanceAvg1 = aggregations.get("balanceAvg");
    balanceAvg1.getValue();
    System.out.println("平均薪资:" + balanceAvg1.getValue());
}

El sql recuperado en kibana es el siguiente
Inserte la descripción de la imagen aquí

Supongo que te gusta

Origin blog.csdn.net/u014496893/article/details/113787182
Recomendado
Clasificación