我的编程空间,编程开发者的网络收藏夹
学习永远不晚

Java怎么调用ElasticSearch API

短信预约 -IT技能 免费直播动态提醒
省份

北京

  • 北京
  • 上海
  • 天津
  • 重庆
  • 河北
  • 山东
  • 辽宁
  • 黑龙江
  • 吉林
  • 甘肃
  • 青海
  • 河南
  • 江苏
  • 湖北
  • 湖南
  • 江西
  • 浙江
  • 广东
  • 云南
  • 福建
  • 海南
  • 山西
  • 四川
  • 陕西
  • 贵州
  • 安徽
  • 广西
  • 内蒙
  • 西藏
  • 新疆
  • 宁夏
  • 兵团
手机号立即预约

请填写图片验证码后获取短信验证码

看不清楚,换张图片

免费获取短信验证码

Java怎么调用ElasticSearch API

本篇内容介绍了“Java怎么调用ElasticSearch API”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!

java操作es有两种方式

通过操作es的9300端口,9300是tcp端口,集群节点之间通信也是通过9300端口,会通过9300和es建立一个长连接,下面的es的依赖可以直接操作

但是随着es的版本的提升spring-data需要封装不同版本的es的jar包,好像还没封装到这个版本(2019),另外官方也不推荐通过9300来操作es,而且这种方式在es8以后将被废弃

通过9200操作,发送http请求

  • JestClient,非官方,更新慢

  • RestTemplate(springboot),模拟发http请求,es很多操作需要自己封装,麻烦

  • HttpCLient,同上

  • Elasticsearch-Rest-Client,官方RestClient,封装了ES操作,API层次分明,上手简单

我们在浏览官方文档的时候发现,js可以直接操作es,那为什么我们不直接用js来操作es呢?

  • 出于安全,因为es集群属于后端集群服务器,端口一般不对外暴露,如果对外暴露,会被别人恶意利用

  • js对es支持度有些低,我们如果用js操作的话,不需要通过官网提供的api,我们直接发送ajax请求,用原生es语句即可

其中,官网的java api是通过9300来操作的,java rest api是通过9200来操作的

官网中有Java Low Level REST Client和Java High Level REST Client,关系就和mybatis和jdbc一样

Elasticsearch-Rest-Client(官方,推荐)

maven

<?xml version="1.0" encoding="UTF-8"?><project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd">    <modelVersion>4.0.0</modelVersion>    <parent>        <groupId>org.springframework.boot</groupId>        <artifactId>spring-boot-starter-parent</artifactId>        <version>2.5.5</version>        <relativePath/> <!-- lookup parent from repository -->    </parent>    <groupId>com.atlinxi.gulimall</groupId>    <artifactId>gulimall-search</artifactId>    <version>0.0.1-SNAPSHOT</version>    <name>gulimall-search</name>    <description>elasticsearch检索服务</description>    <properties>        <java.version>1.8</java.version>        <elasticsearch.version>7.4.2</elasticsearch.version>        <spring-cloud.version>2020.0.4</spring-cloud.version>    </properties>    <dependencies>        <dependency>            <groupId>com.atlinxi.gulimall</groupId>            <artifactId>gulimall-common</artifactId>            <version>0.0.1-SNAPSHOT</version>        </dependency>        <dependency>            <groupId>org.springframework.boot</groupId>            <artifactId>spring-boot-starter-web</artifactId>        </dependency>        <dependency>            <groupId>org.elasticsearch.client</groupId>            <artifactId>elasticsearch-rest-high-level-client</artifactId>            <version>7.4.2</version>        </dependency>        <dependency>            <groupId>com.alibaba</groupId>            <artifactId>fastjson</artifactId>            <version>1.2.47</version>        </dependency>        <dependency>            <groupId>org.springframework.boot</groupId>            <artifactId>spring-boot-starter-test</artifactId>            <scope>test</scope>        </dependency>    </dependencies>    <dependencyManagement>        <dependencies>            <dependency>                <groupId>org.springframework.cloud</groupId>                <artifactId>spring-cloud-dependencies</artifactId>                <version>${spring-cloud.version}</version>                <type>pom</type>                <scope>import</scope>            </dependency>        </dependencies>    </dependencyManagement>    <build>        <plugins>            <plugin>                <groupId>org.springframework.boot</groupId>                <artifactId>spring-boot-maven-plugin</artifactId>            </plugin>        </plugins>    </build></project>

配置文件

spring.cloud.nacos.discovery.server-addr=127.0.0.1:8848spring.application.name=gulimall-search

es配置类

package com.atlinxi.gulimall.search.config;import org.apache.http.HttpHost;import org.elasticsearch.client.RequestOptions;import org.elasticsearch.client.RestClient;import org.elasticsearch.client.RestHighLevelClient;import org.springframework.context.annotation.Bean;import org.springframework.context.annotation.Configuration;@Configurationpublic class GulimallElasticSearchConfig {    // 后端访问es的时候,出于安全考虑,可以携带一个请求头    // 现在暂时不用    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(){        RestHighLevelClient client = new RestHighLevelClient(                RestClient.builder(                        new HttpHost("192.168.56.10", 9200, "http")//                        new HttpHost("localhost", 9201, "http")                ));        return client;    }}

导包

package com.atlinxi.gulimall.search;import com.alibaba.fastjson.JSON;import com.atlinxi.gulimall.search.config.GulimallElasticSearchConfig;import lombok.Data;import lombok.ToString;import org.elasticsearch.action.index.IndexRequest;import org.elasticsearch.action.index.IndexResponse;import org.elasticsearch.action.search.SearchRequest;import org.elasticsearch.action.search.SearchResponse;import org.elasticsearch.client.RestHighLevelClient;import org.elasticsearch.common.xcontent.XContentType;import org.elasticsearch.index.query.QueryBuilders;import org.elasticsearch.search.SearchHit;import org.elasticsearch.search.SearchHits;import org.elasticsearch.search.aggregations.AggregationBuilders;import org.elasticsearch.search.aggregations.Aggregations;import org.elasticsearch.search.aggregations.bucket.terms.Terms;import org.elasticsearch.search.aggregations.bucket.terms.TermsAggregationBuilder;import org.elasticsearch.search.aggregations.metrics.Avg;import org.elasticsearch.search.aggregations.metrics.AvgAggregationBuilder;import org.elasticsearch.search.builder.SearchSourceBuilder;import org.junit.jupiter.api.Test;import org.springframework.beans.factory.annotation.Autowired;import org.springframework.boot.test.context.SpringBootTest;import java.io.IOException;@AutowiredRestHighLevelClient restHighLevelClient;

查询

// 1. 创建检索请求SearchRequest searchRequest = new SearchRequest();// 2. 指定索引searchRequest.indices("bank");// 3. 指定DSL,检索条件SearchSourceBuilder searchSourceBuilder = new SearchSourceBuilder();// 3.1 构造检索条件        // 所有的函数名都对应原生es DSL语句//        searchSourceBuilder.query();//        searchSourceBuilder.from();//        searchSourceBuilder.size();//        searchSourceBuilder.aggregation();BoolQueryBuilder boolQuery = QueryBuilders.boolQuery();boolQuery.must(QueryBuilders.matchQuery("skuTitle", param.getKeyword()));boolQuery.filter(QueryBuilders.termQuery("catalogId", param.getCatalog3Id()));boolQuery.filter(QueryBuilders.termsQuery("brandId", param.getBrandId()));BoolQueryBuilder nestedBoolQuery = QueryBuilders.boolQuery();QueryBuilders.nestedQuery("attrs", nestedBoolQuery, ScoreMode.None);boolQuery.filter(nestedQuery);QueryBuilders.rangeQuery("skuPrice");boolQuery.filter(rangeQuery);searchSourceBuilder.query(QueryBuilders.matchQuery("address","mill"));searchSourceBuilder.query(boolQuery);searchSourceBuilder.sort(field, order);sourceBuilder.from(0);sourceBuilder.size(10);HighlightBuilder builder = new HighlightBuilder();builder.field("skuTitle");builder.preTags("<b style='color:red'>");builder.postTags("</b>");sourceBuilder.highlighter(builder);// 3.2 聚合// 按照年龄的值分布进行聚合TermsAggregationBuilder ageAgg = AggregationBuilders.terms("ageAgg").field("age").size(10);// 计算平均薪资AvgAggregationBuilder balanceAvg = AggregationBuilders.avg("balanceAvg").field("balance");AggregationBuilders.nested("attr_agg", "attrs");        searchSourceBuilder.aggregation(balanceAvg);searchSourceBuilder.aggregation(ageAgg);// 4. 执行检索请求searchRequest.source(searchSourceBuilder);SearchResponse searchResponse = restHighLevelClient.search(searchRequest, GulimallElasticSearchConfig.COMMON_OPTIONS);// 5.获取响应结果SearchHits hits = searchResponse.getHits();SearchHit[] searchHits = hits.getHits();searchHit.getSourceAsString();// 3.1 获取聚合结果Aggregations aggregations = searchResponse.getAggregations();Terms ageAgg1 = aggregations.get("ageAgg");// 返回值为List<? extends Terms.Bucket>ageAgg1.getBuckets()bucket.getKeyAsString();aggregations.get("balanceAvg");

保存更新

// 添加数据有多种方式,例如hashmap、直接将json粘在这儿IndexRequest request = new IndexRequest("users");request.id("1");//        request.source("userName","zhangsan","age",12,"gender","男");//        String jsonString = "{" +//                "\"user\":\"kimchy\"," +//                "\"postDate\":\"2013-01-30\"," +//                "\"message\":\"trying out Elasticsearch\"" +//                "}";//        request.source(jsonString, XContentType.JSON);User user = new User();user.setUserName("zs");user.setAge(12);user.setGender("man");String jsonString = JSON.toJSONString(user);request.source(jsonString, XContentType.JSON);// 执行保存/更新操作IndexResponse index = restHighLevelClient.index(request, GulimallElasticSearchConfig.COMMON_OPTIONS);// 批量保存// 1. 建立索引 product 建立好映射关系(kibana操作)// 2. 给es中保存这些数据BulkRequest bulkRequest = new BulkRequest();IndexRequest indexRequest = new IndexRequest(EsConstant.Product_INDEX);indexRequest.id(skuEsModel.getSkuId().toString());String s = JSON.toJSONString(skuEsModel);indexRequest.source(s, XContentType.JSON);bulkRequest.add(indexRequest);BulkResponse bulk = restHighLevelClient.bulk(bulkRequest, GulimallElasticSearchConfig.COMMON_OPTIONS);// todo 如果批量错误,处理错误boolean b = bulk.hasFailures();bulk.getItems()

Spring Data ElasticSearch

Spring Data可以极大的简化JPA的写法,可以在几乎不用写实现的情况下,实现对数据的访问和操作。除了CRUD外,还包括如分页、排序等一些常用的功能。

配置文件

<?xml version="1.0" encoding="UTF-8"?><beans xmlns="http://www.springframework.org/schema/beans"       xmlns:es="http://www.springframework.org/schema/data/elasticsearch"       xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"       xsi:schemaLocation="       http://www.springframework.org/schema/beans       http://www.springframework.org/schema/beans/spring-beans.xsd       http://www.springframework.org/schema/data/elasticsearch       http://www.springframework.org/schema/data/elasticsearch/spring-elasticsearch.xsd">    <!--        如果你希望 进一步了解 xsd相关的知识 请求百度去 百度不着了  http://www.jk1123.com/?p=124    -->    <!--        配置 client 连上 es       配置 dao层的扫描       配置其他  一个叫做 esTemplate  就是一个简单对应client封装    -->     <es:transport-client id="client" cluster-nodes="127.0.0.1:9300" cluster-name="my-elasticsearch"/>    <es:repositories base-package="com.itheima.dao"></es:repositories>    <bean id="elasticsearchTemplate" class="org.springframework.data.elasticsearch.core.ElasticsearchTemplate">        <constructor-arg name="client" ref="client"></constructor-arg>    </bean></beans>

实体类

实体类的无参构造必须有,否则查询出来的对象无法映射到实体类

@Document(indexName=“blob3”,type=“article”):

  • indexName:索引的名称(必填项)

  • type:索引的类型

@Id:主键的唯一标识

@Field(index=true,analyzer=“ik_smart”,store=true,searchAnalyzer=“ik_smart”,type = FieldType.text)

  • analyzer:存储时使用的分词器

  • searchAnalyze:搜索时使用的分词器

  • store:是否存储

  • type: 数据类型

import org.springframework.data.annotation.Id;import org.springframework.data.elasticsearch.annotations.Document;import org.springframework.data.elasticsearch.annotations.Field;import org.springframework.data.elasticsearch.annotations.FieldType;//@Document 文档对象 (索引信息、文档类型 )@Document(indexName="test03",type="book")public class Book {    //@Id 文档主键 唯一标识    @Id    //@Field 每个文档的字段配置(类型、是否分词、是否存储、分词器 )    @Field(store = true, index = false, type = FieldType.Integer)    private Integer id;    @Field(analyzer = "ik_max_word", store = true, type = FieldType.text)    private String title;    @Field(analyzer = "ik_max_word", store = true, type = FieldType.text)    private String content;    @Field(index = false, store = true, type = FieldType.Long)    private Long sales;

dao

import com.itheima.domain.Book;import org.springframework.data.domain.Page;import org.springframework.data.domain.Pageable;import org.springframework.data.elasticsearch.repository.ElasticsearchRepository;import org.springframework.stereotype.Repository;import java.util.List;@Repositorypublic interface BookDao extends ElasticsearchRepository<Book, Integer> {// 除了系统自带的方法,还可以自定义命名    List<Book> findByContent(String content);    List<Book> findByContentAndTitle(String content, String title);    Page<Book> findByContent(String content, Pageable pageable);}

crud

import org.junit.Test;import org.junit.runner.RunWith;import org.springframework.beans.factory.annotation.Autowired;import org.springframework.data.elasticsearch.core.ElasticsearchTemplate;import org.springframework.test.context.ContextConfiguration;import org.springframework.test.context.junit4.SpringJUnit4ClassRunner;import javax.annotation.Resource;@RunWith(SpringJUnit4ClassRunner.class)@ContextConfiguration(locations = "classpath:beans.xml")public class AppTest {    @Resource    private BookDao bookDao;    @Autowired    private ElasticsearchTemplate elasticsearchTemplate;    // 创建索引库    @Test    public void testCreatIndex(){        elasticsearchTemplate.createIndex(Book.class);        elasticsearchTemplate.putMapping(Book.class);    }// 新增或者更新    @Test    public void save(){        Book book = new Book(20,"20","20",20L);        bookDao.save(book);    }    // 删除    @Test    public void testDelete(){        bookDao.deleteById(20);    }    @Test    public void testFindById(){        Book book = bookDao.findById(20).get();        System.out.println(book);    }@Test    public void testFindByPageAndSort() throws IOException {        // PageRequest.of()   构建的是一个Pageable对象,此对象是在spring-data-commons包下        // 所以凡是spring data 系列,都可以用该对象来进行分页        Page<Book> books = bookDao.findAll(PageRequest.of(0, 10,Sort.Direction.ASC,"sales"));        // 总条数        long totalElements = books.getTotalElements();        // 总页数        int totalPages = books.getTotalPages();        System.out.println(totalElements);        System.out.println(totalPages);        books.forEach(book -> System.out.println(book));    }

方法命名规则查询

Java怎么调用ElasticSearch API

import org.springframework.data.domain.Page;import org.springframework.data.domain.Pageable;import org.springframework.data.elasticsearch.repository.ElasticsearchRepository;import org.springframework.stereotype.Repository;import java.util.List;@Repositorypublic interface BookDao extends ElasticsearchRepository<Book, Integer> {    List<Book> findByContent(String content);    List<Book> findByContentAndTitle(String content, String title);    Page<Book> findByContent(String content, Pageable pageable);}@Test    public void testMethodName(){        List<Book> byContentAndTitle = bookDao.findByContentAndTitle("程序", "程序");        byContentAndTitle.forEach(book -> System.out.println(book));    }

springdata对es没有封装的方法

例如term、query_string、高亮显示等,就用原生api

@Test    public void  findQueryString(){        //没有封装 的方法        SearchQuery searchQuery=new NativeSearchQueryBuilder()                //依旧传递的查询方式  查询参数                .withQuery(QueryBuilders.queryStringQuery("我是程序员"))                .build();        Page<Book> page = bookDao.search(searchQuery);        long totalElements = page.getTotalElements();        System.out.println("总条数:"+totalElements);        int totalPages = page.getTotalPages();        System.out.println("总页数:"+totalPages);        List<Book> books = page.getContent();        books.forEach(b-> System.out.println(b));    }    @Test    public void  findTerm2(){        //没有封装 的方法        SearchQuery searchQuery=new NativeSearchQueryBuilder()                //依旧传递的查询方式  查询参数                .withQuery(QueryBuilders.termQuery("content","程序"))                .build();        Page<Book> page = bookDao.search(searchQuery);        long totalElements = page.getTotalElements();        System.out.println("总条数:"+totalElements);        int totalPages = page.getTotalPages();        System.out.println("总页数:"+totalPages);        List<Book> books = page.getContent();        books.forEach(b-> System.out.println(b));    }

高亮显示

@Test    public void testHighLight() {        SearchQuery searchQuery = new NativeSearchQueryBuilder()                //依旧传递的查询方式  查询参数                .withQuery(QueryBuilders.termQuery("content", "程序"))                .withHighlightFields(new HighlightBuilder.Field("content").preTags("<xh style='color:red'>").postTags("</xh>"))                .build();        AggregatedPage<Book> page = elasticsearchTemplate.queryForPage(searchQuery, Book.class, new SearchResultMapper() {            //自定义结果映射器 核心 将高亮字段取出 设置对象 返回数据就有高亮显示 而spring-data-es 默认实现            //DefaultResultMapper 它 不会取出高亮字段  不用            @Override            public <T> AggregatedPage<T> mapResults(SearchResponse searchResponse, Class<T> aClass, Pageable pageable) {                List<Book> books = new ArrayList<>();                // 总条数                long totalHits = searchResponse.getHits().getTotalHits();                //System.out.println(totalHits);                // 数据,包含高亮显示的字段                SearchHits hits = searchResponse.getHits();                Iterator<SearchHit> iterator = hits.iterator();                while (iterator.hasNext()) {                    SearchHit sh = iterator.next();                    // 每一条数据{id=17, title=程序员的自我修养—链接、装载与库, content=俯瞰程序前世今生参透代码如何变成程序在系统中运行 透过系统软件底层形成机制走进程序世界探索深层次的自己, sales=6856}                    //高亮字段{content=[content], fragments[[俯瞰<xh style='color:red'>程序</xh>前世今生参透代码如何变成<xh style='color:red'>程序</xh>在系统中运行 透过系统软件底层形成机制走进<xh style='color:red'>程序</xh>世界探索深层次的自己]]}                    Map<String, Object> source = sh.getSource();                     System.out.println("每一条数据" + source);                    Map<String, HighlightField> highlightFields = sh.getHighlightFields();                     System.out.println("高亮字段" + highlightFields);                    //开始封装book对象                    Book book = new Book();                    Integer id = (Integer) source.get("id");                    book.setId(id);                    String title = (String) source.get("title");                    book.setTitle(title);                    HighlightField content = highlightFields.get("content");                    book.setContent(content.getFragments()[0].toString());                    Integer sales = (Integer) source.get("sales");                    book.setSales(Long.valueOf(sales));                    books.add(book);                }                return new AggregatedPageImpl(books, pageable, totalHits);            }        });        long totalElements = page.getTotalElements();        System.out.println("总条数:" + totalElements);        int totalPages = page.getTotalPages();        System.out.println("总页数:" + totalPages);        List<Book> books = page.getContent();        books.forEach(b -> System.out.println(b));    }

elasticsearch transport 通过9300操作

maven

<dependencies>    <dependency>        <groupId>org.elasticsearch</groupId>        <artifactId>elasticsearch</artifactId>        <version>5.6.8</version>    </dependency>    <dependency>        <groupId>org.elasticsearch.client</groupId>        <artifactId>transport</artifactId>        <version>5.6.8</version>    </dependency>    <dependency>        <groupId>org.apache.logging.log4j</groupId>        <artifactId>log4j-to-slf4j</artifactId>        <version>2.9.1</version>    </dependency>    <dependency>        <groupId>org.slf4j</groupId>        <artifactId>slf4j-api</artifactId>        <version>1.7.24</version>    </dependency>    <dependency>        <groupId>org.slf4j</groupId>        <artifactId>slf4j-simple</artifactId>        <version>1.7.21</version>    </dependency>    <dependency>        <groupId>log4j</groupId>        <artifactId>log4j</artifactId>        <version>1.2.12</version>    </dependency>    <dependency>        <groupId>junit</groupId>        <artifactId>junit</artifactId>        <version>4.12</version>    </dependency>    <dependency>            <groupId>com.fasterxml.jackson.core</groupId>            <artifactId>jackson-core</artifactId>            <version>2.8.1</version>        </dependency>        <dependency>            <groupId>com.fasterxml.jackson.core</groupId>            <artifactId>jackson-databind</artifactId>            <version>2.8.1</version>        </dependency>        <dependency>            <groupId>com.fasterxml.jackson.core</groupId>            <artifactId>jackson-annotations</artifactId>            <version>2.8.1</version>        </dependency></dependencies>
// 创建客户端对象private TransportClient client;    // 创建客户端对象    @Before    public void init() {        try {            //创建一个客户端对象            Settings settings = Settings.builder()                    .put("cluster.name", "my-elasticsearch")                    .build();            client = new PreBuiltTransportClient(settings)                    //少服务器的地址                    .addTransportAddress(new InetSocketTransportAddress(InetAddress.getByName("127.0.0.1"), 9300));//                    .addTransportAddress(new InetSocketTransportAddress(InetAddress.getByName("127.0.0.1"),9301))//                    .addTransportAddress(new InetSocketTransportAddress(InetAddress.getByName("127.0.0.1"),9302));        } catch (UnknownHostException e) {            e.printStackTrace();        }    }// 创建type和mappingclient.admin().indices().preparePutMapping("test02")                .setType("book")                .setSource("{\n" +                        "        \"book\": {\n" +                        "            \"properties\": {\n" +                        "                \"id\": {\n" +                        "                \t\"type\": \"long\",\n" +                        "                    \"store\": true,\n" +                        "                    \"index\":\"not_analyzed\"\n" +                        "                },\n" +                        "                \"title\": {\n" +                        "                \t\"type\": \"text\",\n" +                        "                    \"store\": true,\n" +                        "                    \"index\":\"analyzed\",\n" +                        "                    \"analyzer\":\"ik_max_word\"\n" +                        "                },\n" +                        "                \"content\": {\n" +                        "                \t\"type\": \"text\",\n" +                        "                    \"store\": true,\n" +                        "                    \"index\":\"analyzed\",\n" +                        "                    \"analyzer\":\"ik_max_word\"\n" +                        "                },\n" +                        "                \"sales\":{\n" +                        "                    \"type\": \"long\",\n" +                        "                    \"store\": true,\n" +                        "                    \"index\":\"not_analyzed\"\n" +                        "                }\n" +                        "            }\n" +                        "        }\n" +                        "    }", XContentType.JSON)                .get();// 文档的crud@Test    public void testAdd(){        client.prepareIndex("test02", "book", "1")                .setSource(                        "{\n" +                                "\t\"id\":1,\n" +                                "\t\"title\":\"测试添加\",\n" +                                "\t\"content\":\"测试添加数据\",\n" +                                "\t\"sales\":666\n" +                                "}",XContentType.JSON                )                .get();    }// 实体类进行存储 @Test    public void testAdd() throws JsonProcessingException {        Book book = new Book();        book.setId(2L);        book.setTitle("对象测试");        book.setContent("对象测试内容");        book.setSales(1000L);        // 使用json转换工具        ObjectMapper mappers = new ObjectMapper();        String string = mappers.writeValueAsString(book);        client.prepareIndex("test02", "book", "2")                .setSource(                        string,XContentType.JSON                )                .get();    }@Testpublic void deleteDocument(){    client.prepareDelete("test02", "book", "1").get();}// 批量导入    @Test    public void bulkAdd() throws IOException {        BulkRequestBuilder bulkRequest = client.prepareBulk();        // 数据在本地中,进行读取        File file = new File("F:\\darkHorse\\darkHorsePool\\springbootSeries\\dailyQuest\\day90_elasticSearch\\resource\\esData.txt");        BufferedReader bufferedReader = new BufferedReader(new FileReader(file));        String line = null;        int i = 1000;        while ((line = bufferedReader.readLine()) != null){            bulkRequest.add(client.prepareIndex("test02", "book",i++ + "")                    .setSource(line,XContentType.JSON)            );        }        BulkResponse bulkResponse = bulkRequest.get();        if (bulkResponse.hasFailures()) {            // process failures by iterating through each bulk response item        }    } @Test    public void testFindIds(){        SearchRequestBuilder searchRequestBuilder = client.prepareSearch("test02")                .setTypes("book")                //这个地方 告诉构建器 使用什么类型查询方式                //查询方式 使用 QueryBuilders.term...matchall....queryString                .setQuery(QueryBuilders.idsQuery().addIds("1000","1002","1003"))                .setFrom(0)                .setSize(20);        //返回了一个 SearchResponse 响应对象        SearchResponse searchResponse = searchRequestBuilder.get();        SearchHits hits = searchResponse.getHits();        long totalHits = hits.getTotalHits();        System.out.println("一共多少条记录:"+totalHits);        Iterator<SearchHit> iterator = hits.iterator();        while (iterator.hasNext()){            SearchHit searchHit = iterator.next();            Map<String, Object> source = searchHit.getSource();            System.out.println(source);        }    }SearchRequestBuilder searchRequestBuilder = client.prepareSearch("test02")                .setTypes("book")                //这个地方 告诉构建器 使用什么类型查询方式                //查询方式 使用 QueryBuilders.term...matchall....queryString                .setQuery(QueryBuilders.termQuery("content","程序"))                .setFrom(0)                .setSize(20);@Test    public void highLight() {        HighlightBuilder highlightBuilder = new HighlightBuilder()                .preTags("<font style='color:red'>")                .postTags("</font>")                .field("content");        SearchRequestBuilder searchRequestBuilder = client.prepareSearch("test02")                .setTypes("book")                //这个地方 告诉构建器 使用什么类型查询方式                //查询方式 使用 QueryBuilders.term...matchall....queryString                .setQuery(QueryBuilders.termQuery("content", "程序"))                .setFrom(0)                .setSize(20)                .highlighter(highlightBuilder);        //返回了一个 SearchResponse 响应对象        SearchResponse searchResponse = searchRequestBuilder.get();        SearchHits hits = searchResponse.getHits();        long totalHits = hits.getTotalHits();        System.out.println("一共多少条记录:" + totalHits);        Iterator<SearchHit> iterator = hits.iterator();        while (iterator.hasNext()) {            SearchHit searchHit = iterator.next();            Map<String, Object> source = searchHit.getSource();            System.out.println(source);            //获取高亮显示的内容 这是一个map集合            Map<String, HighlightField> highlightFields = searchHit.getHighlightFields();            HighlightField content = highlightFields.get("content");            Text[] fragments = content.getFragments();            System.out.println(fragments[0].toString());        }    }

“Java怎么调用ElasticSearch API”的内容就介绍到这里了,感谢大家的阅读。如果想了解更多行业相关的知识可以关注编程网网站,小编将为大家输出更多高质量的实用文章!

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

Java怎么调用ElasticSearch API

下载Word文档到电脑,方便收藏和打印~

下载Word文档

猜你喜欢

Java怎么调用ElasticSearch API

本篇内容介绍了“Java怎么调用ElasticSearch API”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!java操作es有两种方式1
2023-07-05

Java实现调用ElasticSearch API的示例详解

这篇文章主要为大家详细介绍了Java调用ElasticSearch API的效果资料,文中的示例代码讲解详细,具有一定的参考价值,感兴趣的可以了解一下
2023-03-02

java怎么调用windows api

要调用Windows API,可以使用Java的JNI(Java Native Interface)来实现。以下是一些基本步骤:1. 创建一个包含Windows API函数声明的动态链接库(DLL)。你可以使用C/C++编写这个DLL,并在
2023-10-18

Python、JAVA、PHP怎么调用api接口

这篇文章主要讲解了“Python、JAVA、PHP怎么调用api接口”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“Python、JAVA、PHP怎么调用api接口”吧!返回说明:{"stat
2023-06-04

python调用java API

使用JPype来让python调用java API。JPype的下载地址:https://pypi.python.org/pypi/JPype1 JPype的帮助文档:http://jpype.readthedocs.io/en/lates
2023-01-31

python怎么调用api

这篇文章主要讲解了“python怎么调用api”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“python怎么调用api”吧!本文教程操作环境:windows7系统、Python 3.9.1,
2023-06-30

Java如何调用elasticsearch本地代码

本篇内容主要讲解“Java如何调用elasticsearch本地代码”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“Java如何调用elasticsearch本地代码”吧!一、为什么要进行本地调用
2023-06-14

Java中的Kafka 怎么利用API进行调用

今天就跟大家聊聊有关Java中的Kafka 怎么利用API进行调用,可能很多人都不太了解,为了让大家更加了解,小编给大家总结了以下内容,希望大家根据这篇文章可以有所收获。1.客户端创建对应协议的请求2.客户端发送请求给对应的broker3.
2023-05-31

.Net Api中怎么使用Elasticsearch存储文档

这篇文章主要介绍“.Net Api中怎么使用Elasticsearch存储文档”的相关知识,小编通过实际案例向大家展示操作过程,操作方法简单快捷,实用性强,希望这篇“.Net Api中怎么使用Elasticsearch存储文档”文章能帮助大
2023-06-29

elasticsearch怎么构造Client实现java客户端调用接口

本篇内容主要讲解“elasticsearch怎么构造Client实现java客户端调用接口”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“elasticsearch怎么构造Client实现java
2023-06-30

VB.NET怎么调用Window API

这篇文章主要介绍了VB.NET怎么调用Window API,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。VB.NET调用Window API的方法与 VB6中类似,也是必须使
2023-06-17

怎么在python中调用api

本篇文章给大家分享的是有关怎么在python中调用api,小编觉得挺实用的,因此分享给大家学习,希望大家阅读完这篇文章后可以有所收获,话不多说,跟着小编一起来看看吧。python可以做什么Python是一种编程语言,内置了许多有效的工具,P
2023-06-14

android怎么调用api接口

在Android中,可以使用HttpClient或者HttpURLConnection来调用API接口。使用HttpClient调用API接口的步骤如下:1. 创建HttpClient实例:```javaHttpClient httpCli
2023-08-25

php怎么调用api接口

要调用API接口,可以使用PHP的curl函数库或者file_get_contents函数。使用curl函数库的示例代码如下:```php// 创建一个cURL资源$curl = curl_init();// 设置请求的URLcurl_se
2023-09-07

ChatGPT介绍及Java API调用

本文主要介绍了ChatGPT介绍及Java API调用,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
2023-03-06

C#怎么使用RestClient调用Web API

这篇文章主要介绍“C#怎么使用RestClient调用Web API”,在日常操作中,相信很多人在C#怎么使用RestClient调用Web API问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”C#怎么使用R
2023-06-30

php、java、Python怎么调用新浪短链接api接口

本篇内容主要讲解“php、java、Python怎么调用新浪短链接api接口”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“php、java、Python怎么调用新浪短链接api接口”吧!1.AP
2023-06-03

编程热搜

  • Python 学习之路 - Python
    一、安装Python34Windows在Python官网(https://www.python.org/downloads/)下载安装包并安装。Python的默认安装路径是:C:\Python34配置环境变量:【右键计算机】--》【属性】-
    Python 学习之路 - Python
  • chatgpt的中文全称是什么
    chatgpt的中文全称是生成型预训练变换模型。ChatGPT是什么ChatGPT是美国人工智能研究实验室OpenAI开发的一种全新聊天机器人模型,它能够通过学习和理解人类的语言来进行对话,还能根据聊天的上下文进行互动,并协助人类完成一系列
    chatgpt的中文全称是什么
  • C/C++中extern函数使用详解
  • C/C++可变参数的使用
    可变参数的使用方法远远不止以下几种,不过在C,C++中使用可变参数时要小心,在使用printf()等函数时传入的参数个数一定不能比前面的格式化字符串中的’%’符号个数少,否则会产生访问越界,运气不好的话还会导致程序崩溃
    C/C++可变参数的使用
  • css样式文件该放在哪里
  • php中数组下标必须是连续的吗
  • Python 3 教程
    Python 3 教程 Python 的 3.0 版本,常被称为 Python 3000,或简称 Py3k。相对于 Python 的早期版本,这是一个较大的升级。为了不带入过多的累赘,Python 3.0 在设计的时候没有考虑向下兼容。 Python
    Python 3 教程
  • Python pip包管理
    一、前言    在Python中, 安装第三方模块是通过 setuptools 这个工具完成的。 Python有两个封装了 setuptools的包管理工具: easy_install  和  pip , 目前官方推荐使用 pip。    
    Python pip包管理
  • ubuntu如何重新编译内核
  • 改善Java代码之慎用java动态编译

目录