Elasticsearch 7.17 Java Client Api

这篇具有很好参考价值的文章主要介绍了Elasticsearch 7.17 Java Client Api。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

Elasticsearch官方建议使用新版的Java Api Client替代原有的Rest客户端,这篇文章会简单讲解

新版api的使用。

The Elasticsearch Java API Client is an entirely new client library that has no relation to the older High Level Rest Client (HLRC). This was a deliberate choice to provide a library that is independent from the Elasticsearch server code and that provides a very consistent and easier to use API for all Elasticsearch features.

首先引入依赖

		<elastic.client.version>7.17.5</elastic.client.version>
        <jackson.databind>2.13.2</jackson.databind>
        <jakarta.json>2.0.1</jakarta.json>
        <dependency>
                <groupId>co.elastic.clients</groupId>
                <artifactId>elasticsearch-java</artifactId>
                <version>${elastic.client.version}</version>
            </dependency>


            <dependency>
                <groupId>com.fasterxml.jackson.core</groupId>
                <artifactId>jackson-databind</artifactId>
                <version>${jackson.databind}</version>
            </dependency>

            <dependency>
                <groupId>com.fasterxml.jackson.core</groupId>
                <artifactId>jackson-core</artifactId>
                <version>${jackson.databind}</version>
            </dependency>

            <dependency>
                <groupId>com.fasterxml.jackson.core</groupId>
                <artifactId>jackson-annotations</artifactId>
                <version>${jackson.databind}</version>
            </dependency>


            <dependency>
                <groupId>org.glassfish</groupId>
                <artifactId>jakarta.json</artifactId>
                <version>${jakarta.json}</version>
            </dependency>

创建elasticsearch客户端

package com.pic.framework.config;

import co.elastic.clients.elasticsearch.ElasticsearchClient;
import co.elastic.clients.json.jackson.JacksonJsonpMapper;
import co.elastic.clients.transport.ElasticsearchTransport;
import co.elastic.clients.transport.rest_client.RestClientTransport;
import org.apache.http.HttpHost;
import org.apache.http.auth.AuthScope;
import org.apache.http.auth.UsernamePasswordCredentials;
import org.apache.http.client.CredentialsProvider;
import org.apache.http.impl.client.BasicCredentialsProvider;
import org.elasticsearch.client.RestClient;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;

import java.net.InetAddress;

/**
 * @author 91989
 * @title: ElasticSearchConfig
 * @projectName xy-reader
 * @description: ES配置类
 * @date 2022/6/15 15:26
 */
@Configuration
public class ElasticSearchConfig {
    //注入IOC容器
    @Bean
    public ElasticsearchClient elasticsearchClient() {
        final CredentialsProvider credentialsProvider = new BasicCredentialsProvider();
        credentialsProvider.setCredentials(AuthScope.ANY,
                new UsernamePasswordCredentials("elastic", "111111"));
        RestClient client = RestClient.builder(new HttpHost("localhost", 9200, "http"))
                .setHttpClientConfigCallback(httpAsyncClientBuilder -> {
                    httpAsyncClientBuilder.disableAuthCaching();
                    return httpAsyncClientBuilder.setDefaultCredentialsProvider(credentialsProvider);
                }).build();
        ElasticsearchTransport transport = new RestClientTransport(client, new JacksonJsonpMapper());
        return new ElasticsearchClient(transport);
    }

}

相关CRUD操作文章来源地址https://www.toymoban.com/news/detail-510204.html

package com.reader.web.controller.es;

import cn.hutool.core.date.DateUtil;
import cn.hutool.core.util.NumberUtil;
import cn.hutool.core.util.StrUtil;
import co.elastic.clients.elasticsearch.ElasticsearchClient;
import co.elastic.clients.elasticsearch._types.SortOrder;
import co.elastic.clients.elasticsearch._types.mapping.*;
import co.elastic.clients.elasticsearch._types.query_dsl.*;
import co.elastic.clients.elasticsearch.core.*;
import co.elastic.clients.elasticsearch.core.search.Highlight;
import co.elastic.clients.elasticsearch.core.search.HighlightBase;
import co.elastic.clients.elasticsearch.core.search.HighlightField;
import co.elastic.clients.elasticsearch.core.search.Hit;
import co.elastic.clients.elasticsearch.indices.CreateIndexRequest;
import co.elastic.clients.elasticsearch.indices.CreateIndexResponse;
import co.elastic.clients.elasticsearch.indices.IndexSettings;
import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.JSONArray;
import com.alibaba.fastjson.JSONObject;
import com.reader.common.core.domain.AjaxResult;
import com.reader.common.core.domain.entity.SysUser;
import com.reader.framework.config.ElasticSearchConfig;
import javafx.scene.input.PickResult;
import org.apache.poi.ss.formula.functions.T;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;

import javax.swing.text.Highlighter;
import java.io.IOException;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

/**
 * @author 91989
 * @title: EsTestController
 * @projectName xy-reader
 * @description: TODO
 * @date 2022/7/1 16:42
 */
@SuppressWarnings("rawtypes")
@RestController
@RequestMapping("/es")
public class EsTestController {

    @Autowired
    private ElasticsearchClient client;


    @PostMapping("/createIndex")
    public AjaxResult createIndex(String indexName) throws IOException {
        //定义索引的别名
        String KEYWORD = "";
        String indexAliasName = indexName + "_alias";
        Map<String, Property> propertyMap = new HashMap<>();
        //构建索引类型
        propertyMap.put("content_id", new Property(new IntegerNumberProperty.Builder().index(true).build()));
        propertyMap.put("content", new Property(new TextProperty.Builder().index(true).analyzer("ik_max_word").build()));
        propertyMap.put("content_en", new Property(new TextProperty.Builder().index(true).analyzer("standard").build()));
        propertyMap.put("create_time", new Property(new DateProperty.Builder().index(true).build()));
        //构建设置
        TypeMapping mapping = new TypeMapping.Builder().properties(propertyMap).build();
        IndexSettings indexSettings = new IndexSettings.Builder().numberOfShards(String.valueOf(1)).numberOfReplicas(String.valueOf(0)).build();
        CreateIndexRequest createIndexRequest = new CreateIndexRequest.Builder()
                .index("ik_test_index")
                .mappings(mapping)
                .settings(indexSettings)
                .build();
        //执行创建索引操作并返回结果
        CreateIndexResponse createIndexResponse = client.indices().create(createIndexRequest);
        return AjaxResult.success();
    }

    /**
     *   * @description: 插入文档
     *   * @author Lin
     *   * @date 2022/7/5 17:26
     */
    @PostMapping("/insertDoc")
    public AjaxResult insertDoc(String doc, String docEn) throws IOException {
        String indexName = "ik_test_index";
        Map<String, Object> paramMap = new HashMap<>();
        int[] randomInt = NumberUtil.generateRandomNumber(1, 10000, 1);
        paramMap.put("content_id", randomInt[0]);
        paramMap.put("content", doc);
        paramMap.put("content_en", docEn);
        paramMap.put("create_time", DateUtil.date());

        //插入文档
        IndexResponse response = client.index(i -> i.index(indexName).document(paramMap));

        return AjaxResult.success(response);

    }

    /**
     *   * @description: 基于索引数据的多维度查询
     *   * @author Lin
     *   * @date 2022/7/7 9:56
     */
    @GetMapping("/getEs")
    public AjaxResult getEs(String keyword) throws IOException {
        String str = "li";

        //分词查询构造器
        MatchQuery matchQuery = QueryBuilders.match().field("content_en").query(keyword).build();
        //布尔查询构造器
        BoolQuery.Builder queryBuilders = QueryBuilders.bool();
        queryBuilders.must(matchQuery._toQuery());
        //模糊匹配查询构造器 类似like查询
        WildcardQuery.Builder wildBuilder = QueryBuilders.wildcard();
        str = StrUtil.addSuffixIfNot(str, "*");
        WildcardQuery wildcardQuery = wildBuilder.field("name").wildcard(str).build();
        //精确匹配查询构造器
        TermQuery.Builder termBuilder = QueryBuilders.term();
        TermQuery termQuery = termBuilder.field("content_id").value("name").build();
        //布尔查询增加and条件
        queryBuilders.must(termQuery._toQuery());
        //构建出布尔查询
        BoolQuery boolQuery = queryBuilders.build();
        //高亮查询
        HighlightField.Builder highlightFieldBuilder = new HighlightField.Builder();
        HighlightField highlightField = highlightFieldBuilder.build();
        //构建高亮字段
        Highlight.Builder highlightBuilder = new Highlight.Builder();
        Highlight highlight = highlightBuilder.fields("content_en", highlightField).build();


        SearchRequest searchRequest = new SearchRequest.Builder().query(matchQuery._toQuery()).highlight(highlight).index("ik_test_index").build();
        /*SearchRequest searchRequest = new SearchRequest.Builder().index("new_index").build();*/
        /* SearchResponse search = client.search(s -> s.index("new_index").
                query(q -> q.match(m -> m.field("name").query(r->r.stringValue("li")))),
                Map.class);*/
        SearchResponse searchResponse = client.search(searchRequest, Map.class);
        //命中list
        List<Hit> list = searchResponse.hits().hits();
        //处理结果list
        List<Map<String,Object>> resList = new ArrayList<>();
        for (Hit hit : list) {
            Map<String,Object> resMap = new HashMap<>();
            Map highLight = hit.highlight();
            Double score = hit.score();
            Map map = (Map) hit.source();
            resMap.put("highLight",highLight);
            resMap.put("score",score);
            resMap.put("source",map);
            resList.add(resMap);
        }
        return AjaxResult.success(resList);
    }


}

到了这里,关于Elasticsearch 7.17 Java Client Api的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • CentOS yum 安装 EFK 7.17

    软件 说明 elasticsearch 分布式、高扩展、高实时的搜索与数据分析引擎 kibana 一个基于浏览器的Elasticsearch分析和搜索仪表板 filebeat 收集文件数据 文档 文档链接 elasticsearch 7.17 yum 文档 https://www.elastic.co/guide/en/elasticsearch/reference/7.17/rpm.html kibana 7.17 yum 文档 https://www.elastic.co/guide

    2024年02月02日
    浏览(27)
  • ES7.5升级7.17后在写多读少场景下CPU、IO飙升

    1.ES PAAS管理的集群升级了100+,从7.5升级到7.17 (保证每个大版本最终仅维护一个小版本集群) 2.由于业务使用差异大,也出了不少问题,前面的文章也有提到过Integer类型字段使用terms查询效率低的情况 3.这里再分析一个CPU、IO飙升的场景 1.用户报障:“ES集群写入吞吐量变小了

    2023年04月08日
    浏览(27)
  • Java ElasticSearch Client 选型

    Elasticsearch 官方提供了很多版本的 Java 客户端,包含但不限于: Transport 客户端 Java REST 客户端 Low Level REST 客户端 High Level REST 客户端 Java API 客户端 非官方的 Java 客户端,包含但不限于: Jest 客户端 BBoss 客户端 Spring Data Elasticsearch 客户端 … 注意 : 某些版本的 Elasticsearch 和

    2023年04月18日
    浏览(27)
  • ElasticSearch系列——Elasticsearch Java API Client

    这是用于Elasticsearch的官方Java API客户端的文档。客户端为所有Elasticsearch API提供强类型请求和响应。我们要注意原来的HighRestAPIClient以及停用了,这是趋势,包括SpringData-ElasticSearch4.4.5之后配合ES8的推出也会更换 https://www.elastic.co/guide/en/elasticsearch/client/java-api-client/7.17/indexing.html

    2024年02月01日
    浏览(30)
  • Java 17官方编程手册都针对哪些方面做了更新?

    Java 17,官方编程手册, 《International Developer》杂志称为“全世界醉著名的编程书籍创作者之一”的Herbert Schildt倾情解读 《Java官方编程手册》从1996年首次出版以来,已经经历了数次改版,每次改版都反映 了Java不断演化的进程。本书是第12版,针对JavaSE 17(JDK 17)进行了更新。因

    2024年02月11日
    浏览(34)
  • Elasticsearch:从 Java High Level Rest Client 切换到新的 Java API Client

    作者:David Pilato 我经常在讨论中看到与 Java API 客户端使用相关的问题。 为此,我在 2019 年启动了一个 GitHub 存储库,以提供一些实际有效的代码示例并回答社区提出的问题。 从那时起,高级 Rest 客户端 (High Level Rest Cliet - HLRC) 已被弃用,并且新的 Java API 客户端已发布。 为了

    2024年03月19日
    浏览(42)
  • Elasticsearch-06-Elasticsearch Java API Client-Elasticsearch 8.0 的api

    在 Elasticsearch7.15版本之后,Elasticsearch官方将它的 高级客户端 RestHighLevelClient 标记为弃用状态。同时推出了全新的 Java API客户端 Elasticsearch Java API Client ,该客户端也将在 Elasticsearch8.0及以后版本中成为官方推荐使用的客户端。 Elasticsearch Java API Client 支持除 Vector tile search API 和

    2024年04月11日
    浏览(25)
  • Elasticsearch Java API Client 8.x使用方式

    客户端的变化 众所周知,Elasticsearch是基于Lucene的,提供了更高层次的封装、分布式方面的扩展,以及REST API来方便使用,我们先来看看java client的变化: 从图中可以看成,在8.x版本中,Elasticsearch提供了全新的Java API Client,用来代替之前广为使用的High Level Client,根据官网说法

    2024年02月07日
    浏览(35)
  • springboo整合elasticSearch8 java client api

    官方文档: https://www.elastic.co/guide/en/elasticsearch/client/java-api-client/current/connecting.html gradle maven 若无密码,可以使用下面方式: 使用es自动设置的mapping 设置mappings Doc是自定义实体类 比如 select * from doc where user_id in(1,2,3); 方式一: 方式二: 方式三:

    2024年02月13日
    浏览(37)
  • 最新版ES8的client API操作 Elasticsearch Java API client 8.0

    作者:ChenZhen 本人不常看网站消息,有问题通过下面的方式联系: 邮箱:1583296383@qq.com vx: ChenZhen_7 我的个人博客地址:https://www.chenzhen.space/🌐 版权:本文为博主的原创文章,本文版权归作者所有,转载请附上原文出处链接及本声明。📝 如果对你有帮助,请给一个小小的s

    2024年02月04日
    浏览(34)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包