java Api操作Elasticsearch

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

本次使用 elasticsearch 版本为7.17.0,建议使用 7.X 版本,8.1.2版本会遇到一些 Springboot(本人使用版本2.6.6) 版本不兼容的问题。此文章会列举一个例子。

导包

<dependency>
     <groupId>org.springframework.boot</groupId>
     <artifactId>spring-boot-starter-data-elasticsearch</artifactId>
</dependency>

创建客户端

我们在测试类中先创建一个客户端,用来向 ES 发送请求

	//创建ES客户端
	RestHighLevelClient esClient = new RestHighLevelClient(
    	RestClient.builder(new HttpHost("localhost", 9200, "http"))
	);

索引操作

创建索引

测试代码如下:

	//创建索引
	CreateIndexRequest request = new CreateIndexRequest("user");
	CreateIndexResponse response = esClient.indices().create(request, RequestOptions.DEFAULT);
	//响应状态
	boolean acknowledged = response.isAcknowledged();
	System.out.println("索引操作:" + acknowledged);

	//关闭ES客户端
	esClient.close();

控制台输出信息如下:
java Api操作Elasticsearch
此处会遇到坑:
运行之后报错信息如下:

Exception in thread "main" ElasticsearchStatusException[Elasticsearch exception [type=illegal_argument_exception, reason=request [/book] contains unrecognized parameter: [include_type_name]]]

原因是:CreateIndexRequest 对象有两个,导报如果是下面这个包就会报错,因为已经不推荐使用此对象去创建索引,可以看到 create() 方法也有不推荐的横线

import org.elasticsearch.action.admin.indices.create.CreateIndexRequest;

应该导包如下:

import org.elasticsearch.client.indices.CreateIndexRequest;

查看索引

测试代码如下:

	//查询索引
	GetIndexRequest getIndexRequest = new GetIndexRequest("user");
	GetIndexResponse getIndexResponse = esClient.indices().get(getIndexRequest, RequestOptions.DEFAULT);
	//相应状态
	System.out.println(getIndexResponse.getSettings());

	//关闭ES客户端
	esClient.close();

控制台输出信息如下:

{user={"index.creation_date":"1650436113234","index.number_of_replicas":"1","index.number_of_shards":"1","index.provided_name":"user","index.routing.allocation.include._tier_preference":"data_content","index.uuid":"XhZ5LlZxSJaVG3Zmjs4YJQ","index.version.created":"8010299"}}

删除索引

测试代码如下:

 	//删除索引
	DeleteIndexRequest user = new DeleteIndexRequest("user");
	AcknowledgedResponse delete = esClient.indices().delete(user, RequestOptions.DEFAULT);
	//相应状态
	System.out.println("delete:" + delete.isAcknowledged());

	//关闭ES客户端
	esClient.close();

控制台输出信息如下:
java Api操作Elasticsearch

文档操作

新增文档

测试代码如下:

		//创建请求对象(指明索引和ID)
        IndexRequest request = new IndexRequest();
        request.index("user").id("1001");

        User user = new User();
        user.setName("wangda");
        user.setAge(30);
        user.setSex("男");

        ObjectMapper mapper = new ObjectMapper();
        String userJson = mapper.writeValueAsString(user);
        request.source(userJson, XContentType.JSON);

        IndexResponse response = esClient.index(request, RequestOptions.DEFAULT);
        System.out.println(response.getResult());

        //关闭ES客户端
        esClient.close();

此时遇到 ES8.1.2 版本与 Springboot 不兼容的问题:
报错信息如下:

ElasticsearchException[java.util.concurrent.ExecutionException: java.net.ConnectException: Timeout connecting to [/10.253.117.204:9200]

但是通过 ApiPost 查看数据已插入
java Api操作Elasticsearch
经测试,ES 7.17.0 版本正常!
java Api操作Elasticsearch

批量新增文档

测试代码如下:

//创建批量新增请求对象
	BulkRequest request = new BulkRequest();
	request.add(new IndexRequest().index("user").id("1002").source(XContentType.JSON, "name", "猪八戒", "age", 20, "sex", "男"));
	request.add(new IndexRequest().index("user").id("1003").source(XContentType.JSON, "name", "沙悟净", "age", 18, "sex", "男"));
	request.add(new IndexRequest().index("user").id("1004").source(XContentType.JSON, "name", "白龙马", "age", 16, "sex", "女"));
	//客户端发送请求
	BulkResponse response = esClient.bulk(request, RequestOptions.DEFAULT);
	//打印结果信息
	System.out.println("took:" + response.getTook());
	System.out.println("items:" + response.getItems());

	//关闭ES客户端
	esClient.close();

控制台输出信息如下:
java Api操作Elasticsearch

根据ID查询文档

测试代码如下:

	GetRequest request = new GetRequest();
	request.index("user").id("1001");
	GetResponse response = esClient.get(request, RequestOptions.DEFAULT);
	System.out.println(response.getSourceAsString());

//关闭ES客户端
esClient.close();

控制台输出结果如下:
java Api操作Elasticsearch

查询所有文档

测试代码如下:

//创建搜索请求对象
        SearchRequest request = new SearchRequest();
        request.indices("user");
        //构建查询的请求体
        SearchSourceBuilder sourceBuilder = new SearchSourceBuilder();
        //查询所有数据
        sourceBuilder.query(QueryBuilders.matchAllQuery());
        request.source(sourceBuilder);
        SearchResponse response = esClient.search(request, RequestOptions.DEFAULT);
        //查询匹配
        SearchHits hits = response.getHits();
        for (SearchHit hit : hits) {
            System.out.println(hit.getSourceAsString());
        }

        //关闭ES客户端
        esClient.close();

控制台响应结果如下:
java Api操作Elasticsearch

根据ID删除文档

测试代码如下:

		//创建删除请求对象
        DeleteRequest request = new DeleteRequest();
        request.index("user").id("1001");

        DeleteResponse delete = esClient.delete(request, RequestOptions.DEFAULT);
        System.out.println(delete.getResult());

        //关闭ES客户端
        esClient.close();

控制台响应结果如下:
java Api操作Elasticsearch

批量删除文档

测试代码如下:

		//创建批量删除请求对象
        BulkRequest request = new BulkRequest();
        request.add(new DeleteRequest().index("user").id("1002"));
        request.add(new DeleteRequest().index("user").id("1003"));
        request.add(new DeleteRequest().index("user").id("1004"));
        //客户端发送请求
        BulkResponse response = esClient.bulk(request, RequestOptions.DEFAULT);
        //打印结果信息
        System.out.println("took:" + response.getTook());
        System.out.println("items:" + response.getItems());

        //关闭ES客户端
        esClient.close();

控制台响应结果如下:
java Api操作Elasticsearch

修改文档

测试代码如下:

		//创建修改请求对象
        UpdateRequest request = new UpdateRequest();
        request.index("user").id("101");
        request.doc(XContentType.JSON, "name", "孙悟空");

        UpdateResponse update = esClient.update(request, RequestOptions.DEFAULT);
        System.out.println(update.getResult());

        //关闭ES客户端
        esClient.close();

控制台响应结果如下:
java Api操作Elasticsearch

高级查询

条件查询

测试代码如下:

		//创建搜索请求对象
        SearchRequest request = new SearchRequest();
        request.indices("user");
        //构建查询请求体
        request.source(new SearchSourceBuilder().query(QueryBuilders.matchQuery("age", 30)));
        SearchResponse response = esClient.search(request, RequestOptions.DEFAULT);
        //查询匹配
        SearchHits hits = response.getHits();
        for (SearchHit hit : hits) {
            System.out.println(hit);
        }

控制台输出结果如下:
java Api操作Elasticsearch

分页查询

测试代码如下:

		//创建搜索请求对象
        SearchRequest request = new SearchRequest();
        request.indices("user");
        //构建查询的请求体
        request.source(new SearchSourceBuilder().query(QueryBuilders.matchAllQuery()).from(0).size(2));

        SearchResponse response = esClient.search(request, RequestOptions.DEFAULT);
        SearchHits hits = response.getHits();
        for (SearchHit hit : hits) {
            System.out.println(hit);
        }

控制台输出信息如下:
java Api操作Elasticsearch

排序

测试代码如下:

		//创建搜索请求对象
        SearchRequest request = new SearchRequest();
        request.indices("user");
        //构建查询请求体
        request.source(new SearchSourceBuilder().query(QueryBuilders.matchAllQuery()).sort("age", SortOrder.DESC));

        SearchResponse response = esClient.search(request, RequestOptions.DEFAULT);
        SearchHits hits = response.getHits();
        for (SearchHit hit : hits) {
            System.out.println(hit);
        }

控制台输出信息如下:

{
  "_index" : "user",
  "_type" : "_doc",
  "_id" : "1001",
  "_score" : null,
  "_source" : {
    "name" : "孙悟空",
    "age" : 30,
    "sex" : "男"
  },
  "sort" : [
    30
  ]
}
{
  "_index" : "user",
  "_type" : "_doc",
  "_id" : "1002",
  "_score" : null,
  "_source" : {
    "name" : "猪八戒",
    "age" : 20,
    "sex" : "男"
  },
  "sort" : [
    20
  ]
}
{
  "_index" : "user",
  "_type" : "_doc",
  "_id" : "1003",
  "_score" : null,
  "_source" : {
    "name" : "沙悟净",
    "age" : 18,
    "sex" : "男"
  },
  "sort" : [
    18
  ]
}
{
  "_index" : "user",
  "_type" : "_doc",
  "_id" : "1004",
  "_score" : null,
  "_source" : {
    "name" : "白龙马",
    "age" : 16,
    "sex" : "女"
  },
  "sort" : [
    16
  ]
}

过滤字段(返回指定字段)

测试代码如下:

		//创建搜索请求对象
        SearchRequest request = new SearchRequest();
        request.indices("user");
        //构建查询请求体
        //过滤字段
        String[] excludes = {"age"};//排除字段
        String[] includes = {};//包含字段
        request.source(new SearchSourceBuilder().query(QueryBuilders.matchAllQuery()).fetchSource(includes, excludes));

        SearchResponse response = esClient.search(request, RequestOptions.DEFAULT);
        SearchHits hits = response.getHits();
        for (SearchHit hit : hits) {
            System.out.println(hit);
        }

控制台输出信息如下:
java Api操作Elasticsearch

范围查询

测试代码如下:

		//创建请求对象
        SearchRequest request = new SearchRequest();
        request.indices("user");
        //构建查询请求体
        //大于等于
        //小于等于
        request.source(new SearchSourceBuilder().query(new RangeQueryBuilder("age").gte("20").lte("30")));

        SearchResponse response = esClient.search(request, RequestOptions.DEFAULT);
        SearchHits hits = response.getHits();
        for (SearchHit hit : hits) {
            System.out.println(hit);
        }

控制台输出信息如下:
java Api操作Elasticsearch

模糊查询(相似的意思)

测试代码如下:

//创建请求对象
        SearchRequest request = new SearchRequest();
        request.indices("user");
        //构建请求体(这里的name故意写错一个字母wangdb,真实数据是wangda)
        request.source(new SearchSourceBuilder().query(QueryBuilders.fuzzyQuery("name", "wangdb").fuzziness(Fuzziness.ONE)));

        SearchResponse response = esClient.search(request, RequestOptions.DEFAULT);
        SearchHits hits = response.getHits();
        for (SearchHit hit : hits) {
            System.out.println(hit);
        }
    }

控制台输出信息如下:
java Api操作Elasticsearch

模糊查询(类似于MySQl的like)

测试代码如下:

		//创建请求对象
        SearchRequest request = new SearchRequest();
        request.indices("user");
        //构建请求体(*类似于MySQL中的%,是通配符,表示零个或多个字符,?表示一个字符)
        request.source(new SearchSourceBuilder().query(QueryBuilders.wildcardQuery("name", "*悟*")));

        SearchResponse response = esClient.search(request, RequestOptions.DEFAULT);
        SearchHits hits = response.getHits();
        for (SearchHit hit : hits) {
            System.out.println(hit);
        }

控制台输出信息如下:
java Api操作Elasticsearch

高亮查询

测试代码如下:

		//创建请求对象
        SearchRequest request = new SearchRequest().indices("user");
        //构建请求体
        //创建查询请求体构建器
        SearchSourceBuilder sourceBuilder = new SearchSourceBuilder();
        //构建查询方式:高亮查询
        MatchPhraseQueryBuilder matchPhraseQueryBuilder = QueryBuilders.matchPhraseQuery("name", "孙悟空");

        //构建高亮字段
        HighlightBuilder highlightBuilder = new HighlightBuilder();
        highlightBuilder.preTags("<font color='red'>");//设置标签前缀
        highlightBuilder.postTags("</font>");//设置标签后缀
        highlightBuilder.field("name");//设置高亮字段
        //设置高亮构建对象
        sourceBuilder.highlighter(highlightBuilder);
        //设置查询方式
        sourceBuilder.query(matchPhraseQueryBuilder);
        //设置请求体
        request.source(sourceBuilder);


        SearchResponse response = esClient.search(request, RequestOptions.DEFAULT);
        SearchHits hits = response.getHits();
        for (SearchHit hit : hits) {
            System.out.println(hit);
        }

控制台输出信息如下:
java Api操作Elasticsearch

bool查询

测试代码如下:

		//创建搜索请求对象
        SearchRequest request = new SearchRequest();
        request.indices("user");
        //构建查询请求体
        SearchSourceBuilder sourceBuilder = new SearchSourceBuilder();
        BoolQueryBuilder boolQueryBuilder = QueryBuilders.boolQuery();
        //必须包含(30岁的男性)
        boolQueryBuilder.must(QueryBuilders.matchQuery("age", 30));
        boolQueryBuilder.must(QueryBuilders.matchQuery("sex", "男"));
        //必须不
//        boolQueryBuilder.mustNot(QueryBuilders.matchQuery("name","孙"));
        //可能包含
//        boolQueryBuilder.should(QueryBuilders.matchQuery("name","白"));

        sourceBuilder.query(boolQueryBuilder);
        request.source(sourceBuilder);
        SearchResponse response = esClient.search(request, RequestOptions.DEFAULT);
        SearchHits hits = response.getHits();
        for (SearchHit hit : hits) {
            System.out.println(hit);
        }

控制台输出信息如下:
java Api操作Elasticsearch

bool查询可以组合各种复杂的条件查询,比如类似于MySQL中的:where 条件1 and (条件2 or 条件3)文章来源地址https://www.toymoban.com/news/detail-408129.html

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

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

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

相关文章

  • ElasticSearch基础篇-Java API操作

    演示代码 创建连接 POM依赖 建立连接 索引操作 创建索引 删除索引 查询索引 文档操作 创建文档 删除文档 更新文档 查询文档 批量操作 批量新增 批量删除 高级操作 聚合查询 组合查询 条件查询 过滤查询 模糊查询 高亮查询 全量查询 结果排序 分页查询 范围查询

    2024年02月10日
    浏览(39)
  • ElasticSearch Java API 基本操作

    ElasticSearch Java API是ES官方在8.x版本推出的新java api,也可以适用于7.17.x版本的es。 本文主要参考了相关博文,自己手动编写了下相关操作代码,包括更新mappings等操作的java代码。 代码示例已上传github。 elasticsearch 版本: 7.17.9 ,修改 /elasticsearch-7.17.9/config/elasticsearch.yml ,新增

    2024年02月08日
    浏览(47)
  • Elasticsearch8.x版本中RestHighLevelClient被弃用,新版本中全新的Java客户端Elasticsearch Java API Client中常用API练习

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

    2023年04月08日
    浏览(52)
  • 【Elasticsearch学习笔记五】es常用的JAVA API、es整合SpringBoot项目中使用、利用JAVA代码操作es、RestHighLevelClient客户端对象

    目录 一、Maven项目集成Easticsearch 1)客户端对象 2)索引操作 3)文档操作 4)高级查询 二、springboot项目集成Spring Data操作Elasticsearch 1)pom文件 2)yaml 3)数据实体类 4)配置类 5)Dao数据访问对象 6)索引操作 7)文档操作 8)文档搜索 三、springboot项目集成bboss操作elasticsearch

    2023年04月09日
    浏览(51)
  • Elasticsearch Java REST Client 批量操作(Bulk API)

    上一篇:Elasticsearch Java REST Client Term Vectors API 下一篇:Elasticsearch Java REST Client Search APIs 查询 BulkRequest可用于使用单个请求执行多个索引、更新和/或删除操作。 它需要至少一个操作添加到 Bulk 请求中: multiGetAPI 在单个 http 请求中并行执行多个请求get 。 MultiGetRequest,添加 `M

    2024年02月11日
    浏览(51)
  • 使用postman和es插件操作elasticsearch API

    本文介绍了使用postman和es浏览器插件操作elasticsearch API的常用方法 本文使用的es浏览器插件时edge下的elasticvue,可以在edge的应用商店直接搜索安装,相较于es-head,这个插件一直在维护更新,使用还是很方便的     查看索引 查看索引主要使用get方法,可以查看单个or多个索引,

    2024年02月07日
    浏览(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日
    浏览(41)
  • 4、Elasticsearch7.6.1 Java api操作ES(CRUD、两种分页方式、高亮显示)和Elasticsearch SQL详细示例

    1、介绍lucene的功能以及建立索引、搜索单词、搜索词语和搜索句子四个示例实现 2、Elasticsearch7.6.1基本介绍、2种部署方式及验证、head插件安装、分词器安装及验证 3、Elasticsearch7.6.1信息搜索示例(索引操作、数据操作-添加、删除、导入等、数据搜索及分页) 4、Elasticsearch7

    2024年02月16日
    浏览(79)
  • Java SpringBoot API 实现ES(Elasticsearch)搜索引擎的一系列操作(超详细)(模拟数据库操作)

    小编使用的是elasticsearch-7.3.2 基础说明: 启动:进入elasticsearch-7.3.2/bin目录,双击elasticsearch.bat进行启动,当出现一下界面说明,启动成功。也可以访问http://localhost:9200/ 启动ES管理:进入elasticsearch-head-master文件夹,然后进入cmd命令界面,输入npm run start 即可启动。访问http

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

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

    2024年02月07日
    浏览(47)

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

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

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

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

二维码1

领取红包

二维码2

领红包