微服务——操作索引库+文档操作+RestClient操作索引库和文档(java程序)

这篇具有很好参考价值的文章主要介绍了微服务——操作索引库+文档操作+RestClient操作索引库和文档(java程序)。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

索引库操作

mapping属性

mapping是对文档的约束,常见约束属性包括:

微服务——操作索引库+文档操作+RestClient操作索引库和文档(java程序),SpringBoot,java,服务器,linux,es

创建索引库

微服务——操作索引库+文档操作+RestClient操作索引库和文档(java程序),SpringBoot,java,服务器,linux,es

#创建索引库
PUT /heima
{
  "mappings": {
    "properties": {
      "info":{
        "type": "text",
        "analyzer": "ik_smart"
      },
      "email":{
        "type": "keyword",
        "index": false
      },
      "name":{
        "type": "object",
        "properties": {
          "firstName":{
            "type":"keyword"
          },
          "lastName":{
            "type":"keyword"
          }
        }
      }
    }
  }
}

 如下所示,成功创建一个索引库微服务——操作索引库+文档操作+RestClient操作索引库和文档(java程序),SpringBoot,java,服务器,linux,es

查询,删除,修改索引库

微服务——操作索引库+文档操作+RestClient操作索引库和文档(java程序),SpringBoot,java,服务器,linux,es

 在es中不允许修改索引库,但可以添加新的字段

微服务——操作索引库+文档操作+RestClient操作索引库和文档(java程序),SpringBoot,java,服务器,linux,es

#添加新字段
PUT /heima/_mapping  
{
  "properties":{
    "age":{
      "type":"integer"
    }
  }
}

然后重新获取就有新的字段出现了

文档操作

新增文档

微服务——操作索引库+文档操作+RestClient操作索引库和文档(java程序),SpringBoot,java,服务器,linux,es

在索引库插入一个规定格式的数据就像在一个数据库表里面插入一条数据。 

POST /heima/_doc/1
{
  "info":"北岭山脚鼠鼠",
  "email":"yhy@beiling.cn",
  "name":{
    "firstName":"云",
    "lastName":"赵"
  }
}

查询和删除

微服务——操作索引库+文档操作+RestClient操作索引库和文档(java程序),SpringBoot,java,服务器,linux,es

 微服务——操作索引库+文档操作+RestClient操作索引库和文档(java程序),SpringBoot,java,服务器,linux,es

修改文档

有两种修改方式——全量修改

微服务——操作索引库+文档操作+RestClient操作索引库和文档(java程序),SpringBoot,java,服务器,linux,es

 全量修改与新增文档几乎一模一样就是方法名不同 

#全量修改文档

PUT /heima/_doc/1
{
  "info":"北岭鼠鼠",
  "email":"yhy@beiling.cn",
  "name":{
    "firstName":"云",
    "lastName":"赵"
  }
}
#局部修改文档字段
POST /heima/_doc/1
{
  "doc":{
    "email":"123@123.cn"
  }
}

RestClient操作索引库(java)

微服务——操作索引库+文档操作+RestClient操作索引库和文档(java程序),SpringBoot,java,服务器,linux,es

入门案例

微服务——操作索引库+文档操作+RestClient操作索引库和文档(java程序),SpringBoot,java,服务器,linux,es

导入Demo

创建一个名为heima的数据库运行给好的SQL文件就可以得到如下。

微服务——操作索引库+文档操作+RestClient操作索引库和文档(java程序),SpringBoot,java,服务器,linux,es

 然后导入准备好的项目

微服务——操作索引库+文档操作+RestClient操作索引库和文档(java程序),SpringBoot,java,服务器,linux,es

 分析数据结构

微服务——操作索引库+文档操作+RestClient操作索引库和文档(java程序),SpringBoot,java,服务器,linux,es

 id属性较为特殊,在索引库里面是字符串,并且不分词,所以用的是keyword类型

address不参与搜索,选择index置为false.

starName使用驼峰命名法。

地理坐标较为特殊,由两个字段组成,使用一个location字段表示

微服务——操作索引库+文档操作+RestClient操作索引库和文档(java程序),SpringBoot,java,服务器,linux,es

 有多个字段同时参与搜索,但是通常一个字段的查询效率比较高,解决方法如下,用一个all字段包含多个字段就可以根据其中一个字段搜索到多个字段的内容了。并且all字段不参与倒排索引

微服务——操作索引库+文档操作+RestClient操作索引库和文档(java程序),SpringBoot,java,服务器,linux,es

定义对应的Mapping映射

PUT /hotel
{
  "mappings": {
    "properties": {
      "id":{
        "type": "keyword"
      },
      "name":{
        "type": "text",
        "analyzer": "ik_max_word"
        , "copy_to": "all"
      },
      "address":{
        "type":"keyword",
        "index": false
      },
      "price":{
        "type":"integer"
      },
      "score":{
        "type": "integer"
      },
      "brand":{
        "type": "keyword",
        "copy_to": "all"
      },
      "city":{
        "type": "keyword"        
      },
      "starName":{
        "type": "keyword"
      },
      "business":{
        "type": "keyword",
        "copy_to": "all"
      },
      "location":{
        "type":"geo_point"
      },
      "pic":{
        "type":"keyword",
        "index": false
      },
      "all":{
        "type": "text",
        "analyzer": "ik_max_word"
      }
    }
  }
}

初始化JavaRestClient

微服务——操作索引库+文档操作+RestClient操作索引库和文档(java程序),SpringBoot,java,服务器,linux,es

        <!--elasticsearch-->
        <dependency>
            <groupId>org.elasticsearch.client</groupId>
            <artifactId>elasticsearch-rest-high-level-client</artifactId>
            <version>7.12.1</version>
        </dependency>

不指定版本的话里面有子依赖会用默认7.6版本。

创建新的测试类

使用Before注解在最开始创建,之后可以直接使用。

public class HotelIndexTest {
    private RestHighLevelClient client;
    @Test
    void testInit(){
        System.out.println(client);
    }
    
    //执行前初始化
    @BeforeEach
    void setUp(){
        this.client=new RestHighLevelClient(RestClient.builder(
                HttpHost.create("http://xxx.xxx.xxx.xxx:9200")
              //HttpHost.create("http://xxx.xxx.xxx.xxx:9200") 集群时添加更多的地址
        ));
    }

    //销毁
    @AfterEach
    void tearDown() throws IOException {
        this.client.close();
    }
}

创建索引库

微服务——操作索引库+文档操作+RestClient操作索引库和文档(java程序),SpringBoot,java,服务器,linux,es

 准备一个实体对象静态属性

public class HotelConstants {
    public static final String MAPPING_TEMPLATE="{\n" +
            "  \"mappings\": {\n" +
            "    \"properties\": {\n" +
            "      \"id\":{\n" +
            "        \"type\": \"keyword\"\n" +
            "      },\n" +
            "      \"name\":{\n" +
            "        \"type\": \"text\",\n" +
            "        \"analyzer\": \"ik_max_word\"\n" +
            "        , \"copy_to\": \"all\"\n" +
            "      },\n" +
            "      \"address\":{\n" +
            "        \"type\":\"keyword\",\n" +
            "        \"index\": false\n" +
            "      },\n" +
            "      \"price\":{\n" +
            "        \"type\":\"integer\"\n" +
            "      },\n" +
            "      \"score\":{\n" +
            "        \"type\": \"integer\"\n" +
            "      },\n" +
            "      \"brand\":{\n" +
            "        \"type\": \"keyword\",\n" +
            "        \"copy_to\": \"all\"\n" +
            "      },\n" +
            "      \"city\":{\n" +
            "        \"type\": \"keyword\"        \n" +
            "      },\n" +
            "      \"starName\":{\n" +
            "        \"type\": \"keyword\"\n" +
            "      },\n" +
            "      \"business\":{\n" +
            "        \"type\": \"keyword\",\n" +
            "        \"copy_to\": \"all\"\n" +
            "      },\n" +
            "      \"location\":{\n" +
            "        \"type\":\"geo_point\"\n" +
            "      },\n" +
            "      \"pic\":{\n" +
            "        \"type\":\"keyword\",\n" +
            "        \"index\": false\n" +
            "      },\n" +
            "      \"all\":{\n" +
            "        \"type\": \"text\",\n" +
            "        \"analyzer\": \"ik_max_word\"\n" +
            "      }\n" +
            "    }\n" +
            "  }\n" +
            "}";
}
    @Test
    void createHotelIndex() throws IOException {
        //1.创建Request对象
        CreateIndexRequest request = new CreateIndexRequest("hotel");
        //2.准备请求的参数
        request.source(MAPPING_TEMPLATE, XContentType.JSON);
        //3.发送请求
        client.indices().create(request, RequestOptions.DEFAULT);
    }

运行后可以查询到对应的索引库

微服务——操作索引库+文档操作+RestClient操作索引库和文档(java程序),SpringBoot,java,服务器,linux,es

 删除和判断索引库

微服务——操作索引库+文档操作+RestClient操作索引库和文档(java程序),SpringBoot,java,服务器,linux,es

    @Test
    void testDeleteHotelIndex() throws IOException {
        //1.创建Request对象
        DeleteIndexRequest request = new DeleteIndexRequest("hotel");
        //2.发送请求
        client.indices().delete(request, RequestOptions.DEFAULT);
    }
    @Test
    void testExistsHotelIndex() throws IOException {
        //1.创建Request对象
        GetIndexRequest request = new GetIndexRequest("hotel");
        //2.发送请求
        boolean exists = client.indices().exists(request, RequestOptions.DEFAULT);
        //3.输出
        System.out.println(exists?"索引库已存在":"索引库不存在");
    }

总结:

微服务——操作索引库+文档操作+RestClient操作索引库和文档(java程序),SpringBoot,java,服务器,linux,es

 RestClient操作文档

微服务——操作索引库+文档操作+RestClient操作索引库和文档(java程序),SpringBoot,java,服务器,linux,es

初始化和上面一样

 添加文档

微服务——操作索引库+文档操作+RestClient操作索引库和文档(java程序),SpringBoot,java,服务器,linux,es

 这里将查询数据库的数据插入到索引库当中,但是索引库中的location是将两个数据拼到一起的,所以这里有两个实体类,一个对应数据库,一个对应索引库,从数据库查出来之后还要转到索引库数据类型。

然后再序列化层JSON风格的数据。

@SpringBootTest
public class HotelDocumentTest {
    private RestHighLevelClient client;


    @Autowired
    private IHotelService hotelService;
    @Test
    void testAddDocument() throws IOException {

        //根据id查询酒店数据
        Hotel hotel = hotelService.getById(61083L);
        //转换为文档类型
        HotelDoc hotelDoc = new HotelDoc(hotel);

        //1.准备Request对象
        IndexRequest request = new IndexRequest("hotel").id(hotel.getId().toString());
        //2.准备JSON文档
        request.source(JSON.toJSONString(hotelDoc),XContentType.JSON);
        //3.发送请求
        client.index(request,RequestOptions.DEFAULT);
    }
    //执行前初始化
    @BeforeEach
    void setUp(){
        this.client=new RestHighLevelClient(RestClient.builder(
                HttpHost.create("http://xxx.xxx.xxx.xxx:9200")
              //HttpHost.create("http://xxx.xxx.xxx.xxx:9200") 集群时添加更多的地址
        ));
    }

    //销毁
    @AfterEach
    void tearDown() throws IOException {
        this.client.close();
    }
}

这里使用给定的项目代码在数据库配置中有错误

改成如下

url: jdbc:mysql://localhost:3306/heima?allowPublicKeyRetrieval=true&useSSL=false

成功弄执行后便可查询到 

微服务——操作索引库+文档操作+RestClient操作索引库和文档(java程序),SpringBoot,java,服务器,linux,es

 查询文档

微服务——操作索引库+文档操作+RestClient操作索引库和文档(java程序),SpringBoot,java,服务器,linux,es

    @Test
    void testGetDocumentById() throws IOException {
        //1.准备request
        GetRequest request = new GetRequest("hotel", "61083");
        //2.发送请求,得到响应
        GetResponse response = client.get(request, RequestOptions.DEFAULT);
        //3.解析响应结果
        String json = response.getSourceAsString();

        HotelDoc hotelDoc = JSON.parseObject(json,  HotelDoc.class);
        System.out.println(hotelDoc);
    }

成功查询得到

微服务——操作索引库+文档操作+RestClient操作索引库和文档(java程序),SpringBoot,java,服务器,linux,es

更新文档

微服务——操作索引库+文档操作+RestClient操作索引库和文档(java程序),SpringBoot,java,服务器,linux,es

    @Test
    void testUpdate() throws IOException {
        //1.准备request
        UpdateRequest request = new UpdateRequest("hotel", "61083");
        //2.准备请求参数
        request.doc(
                "price","961",
                "starName","三转"
        );
        //3.发送请求
        client.update(request,RequestOptions.DEFAULT);
    }

删除文档 


    @Test
    void testDeleteDocument() throws IOException {
        //1.准备request
        DeleteRequest request = new DeleteRequest("hotel", "61083");
        //2.发送请求
        client.delete(request,RequestOptions.DEFAULT);
    }

 总结

微服务——操作索引库+文档操作+RestClient操作索引库和文档(java程序),SpringBoot,java,服务器,linux,es

批量导入文档

微服务——操作索引库+文档操作+RestClient操作索引库和文档(java程序),SpringBoot,java,服务器,linux,es

    @Test
    void testBulkRequest() throws IOException {
        //批量查询酒店数据
        List<Hotel> hotels = hotelService.list();

        //1.创建request
        BulkRequest request = new BulkRequest();
        //2.准备参数,添加多个新增的request
        for (Hotel hotel : hotels) {
            //转换为文档类型
            HotelDoc hotelDoc = new HotelDoc(hotel);
            //创建新增文档的Request对象
            request.add(new IndexRequest("hotel")
                    .id(hotel.getId().toString())
                    .source(JSON.toJSONString(hotelDoc),XContentType.JSON));
        }

        //3.发送请求
        client.bulk(request,RequestOptions.DEFAULT);
    }

 然后可以查询得到201条数据

微服务——操作索引库+文档操作+RestClient操作索引库和文档(java程序),SpringBoot,java,服务器,linux,es文章来源地址https://www.toymoban.com/news/detail-637504.html

到了这里,关于微服务——操作索引库+文档操作+RestClient操作索引库和文档(java程序)的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

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

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

相关文章

  • 微服务学习|初识elasticsearch、操作索引库、文档操作、RestClient操作索引库、RestClient操作文档

    elasticsearch是一款非常强大的开源搜索引擎,可以帮助我们从海量数据中快速找到需要的内容。 elasticsearch结合kibana、Logstash、Beats,也就是elastic stack (ELK)。被广泛应用在日志数据分析、实时监控等领域 elasticsearch是elastic stack的核心,负责存储、搜索、分析数据 Lucene是一个jav

    2024年01月18日
    浏览(46)
  • 【ElasticSearch】基于 Java 客户端 RestClient 实现对 ElasticSearch 索引库、文档的增删改查操作,以及文档的批量导入

    ElasticSearch 官方提供了各种不同语言的客户端,用来操作 ES。这些客户端的本质就是组装 DSL 语句,通过 HTTP 请求发送给 ES 服务器。 官方文档地址:https://www.elastic.co/guide/en/elasticsearch/client/index.html。 在本文中,我们将着重介绍 ElasticSearch Java 客户端中的 RestClient,并演示如何

    2024年02月08日
    浏览(47)
  • ElasticSearch索引库、文档、RestClient操作

    es中的索引是指相同类型的文档集合 ,即mysql中表的概念 映射:索引中文档字段的约束,比如名称、类型 mapping映射是对索引库中文档的约束。类似mysql对表单字段的约束 type :字段数据类型,常见的类型有: 字符串:text(可分词的文本)、keyword(不可分词的文本,例如国家

    2024年02月10日
    浏览(47)
  • ElasticSearch基础1——索引和文档。Kibana,RestClient操作索引和文档+黑马旅游ES库导入

    导航: 【黑马Java笔记+踩坑汇总】JavaSE+JavaWeb+SSM+SpringBoot+瑞吉外卖+SpringCloud/SpringCloudAlibaba+黑马旅游+谷粒商城 黑马旅游源码:  https://wwmg.lanzouk.com/ikjTE135ybje 目录 1.初识弹性搜索elasticsearch 1.1.了解ES 1.1.1.elasticsearch的作用 1.1.2.ELK弹性栈 1.1.3.elasticsearch和lucene 1.1.4.搜索引擎技术

    2024年02月01日
    浏览(55)
  • Elasticsearch索引库和文档的相关操作

    前言:最近一直在复习Elasticsearch相关的知识,公司搜索相关的技术用到了这个,用公司电脑配了环境,借鉴网上的课程进行了总结。希望能够加深自己的印象以及帮助到其他的小伙伴儿们😉😉。 如果文章有什么需要改进的地方还请大佬不吝赐教👏👏。 小威在此先感谢各位

    2024年02月02日
    浏览(49)
  • 微服务分布式搜索引擎 Elastic Search RestClient 操作文档

    本文参考黑马 分布式Elastic search Elasticsearch是一款非常强大的开源搜索引擎,具备非常多强大功能,可以帮助我们从海量数据中快速找到需要的内容 初始化RestHighLevelClient 为了与索引库操作分离,我们再次参加一个测试类,做两件事情: 初始化RestHighLevelClient 我们的酒店数据

    2024年01月24日
    浏览(38)
  • 【ElasticSearch】使用 Java 客户端 RestClient 实现对文档的查询操作,以及对搜索结果的排序、分页、高亮处理

    在 Elasticsearch 中,通过 RestAPI 进行 DSL 查询语句的构建通常是通过 HighLevelRestClient 中的 resource() 方法来实现的。该方法包含了查询、排序、分页、高亮等所有功能,为构建复杂的查询提供了便捷的接口。 RestAPI 中构建查询条件的核心部分是由一个名为 QueryBuilders 的工具类提供

    2024年01月16日
    浏览(60)
  • 【SpringBoot】整合Elasticsearch 操作索引及文档

    官网操作文档:Elasticsearch Clients | Elastic                踩坑太多了。。。这里表明一下Spring Boot2.4以上版本可能会出现问题,所以我降到了2.2.1.RELEASE。对于现在2023年6月而言,Es版本已经到了8.8,而SpringBoot版本已经到了3.x版本。如果是高版本的Boot在配置类的时候会发现

    2024年02月09日
    浏览(51)
  • 【Elasticsearch篇】详解使用RestClient操作索引库的相关操作

    Elasticsearch是一个开源的分布式搜索和分析引擎, 用于实时搜索、分析和存储大规模数据 。它基于Apache Lucene库构建,提供了一个简单而强大的分布式搜索解决方案。 Elasticsearch具有以下特点: 分布式架构:Elasticsearch可以在多个节点上分布数据,并自动处理数据的复制、故障

    2024年01月24日
    浏览(43)
  • 【ElasticSearch】JavaRestClient实现索引库和文档的增删改查

    ES官方提供了各种不同语言的客户端,用来操作ES,即RestClient。这些 客户端的本质就是组装DSL语句,通过http请求发送给ES。 数据库信息如下: 导入demo工程,基本结构如下: ES的mapping要考虑的点主要有: 字段名(name) 字段类型(type) 是否参与搜索(index) 是否分词(typ

    2024年02月13日
    浏览(35)

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

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

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

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

二维码1

领取红包

二维码2

领红包