ElasticSearch漫游 (5.RestClient初始化准备)

news/2024/7/7 5:49:34 标签: elasticsearch, java, mybatis

之前都是在客户端页面各种操作, 但是我们作为一个java开发者,需要使用代码的方式 来操作ES, 所以我们要先从 Rest Client 开始

准备数据

既然是ES 查数据 不整点测试数据 没法下饭是吧 先建个酒店表 搞点数据:
在这里插入图片描述
(新手可能会好奇? 我靠 不是玩ES吗?? 怎么扯到mysql里面来了,不着急 我们先把数据放着 到时候再弄进ES)

Rest Client

我们用redis 有jedis java客户端, 用rabbitmq 也有AMQP ,用mysql有jdbc。 那用ES 肯定也会有个java客户端对吧? 它就是 java rest client。


我们做一部分准备工作 包括idea 框架准备 mybatis依赖 数据库建表 导入数据,Rest Client依赖相关的都准备好。 这些很简单就不赘述了


分析数据结构

首先我们在数据库中的 旅店 表 ddl是这样的:

CREATE TABLE `tb_hotel` (
  `id` bigint NOT NULL COMMENT '酒店id',
  `name` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL COMMENT '酒店名称',
  `address` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL COMMENT '酒店地址',
  `price` int NOT NULL COMMENT '酒店价格',
  `score` int NOT NULL COMMENT '酒店评分',
  `brand` varchar(32) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL COMMENT '酒店品牌',
  `city` varchar(32) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL COMMENT '所在城市',
  `star_name` varchar(16) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci DEFAULT NULL COMMENT '酒店星级,1星到5星,1钻到5钻',
  `business` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci DEFAULT NULL COMMENT '商圈',
  `latitude` varchar(32) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL COMMENT '纬度',
  `longitude` varchar(32) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL COMMENT '经度',
  `pic` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci DEFAULT NULL COMMENT '酒店图片',
  PRIMARY KEY (`id`) USING BTREE
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci ROW_FORMAT=COMPACT;

在数据库里面大家都很熟悉, 但是有没想过我们上一篇讲过的ES的数据是怎么存的?建索引库 然后定义mapping, 包括里面有哪些字段 怎么定义 是否加索引 参与搜索, 是否分词,分词器是什么?

这些就是我们把上面mysql的数据导入到ES中的时候需要考虑的:

我们来实践编写一下mapping:

javascript">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"        
      }
    }
  }
}


这个地方要按照上一篇 ES 索引库 mapping的理解来写,比如有的字段需要分词 那么就text+分词器。 不需要分词 就用keyword。 不需要搜索的字段就加 “index”:false 。

然后还有定义了一个all。 它是一个分词的text, 它是由前面字段里面 所有带 copy to all的字段组合而成的。 意味着之后 我搜索的时候 可以这几个字段一起搜。


javaRestCliet_117">初始化javaRestCliet

引入依赖:

    <properties>
        <java.version>1.8</java.version>
        <elasticsearch.version>7.12.1</elasticsearch.version>
    </properties>
    <dependencies>
        <dependency>
            <groupId>org.elasticsearch.client</groupId>
            <artifactId>elasticsearch-rest-high-level-client</artifactId>
            <version>7.12.1</version>
        </dependency>

写一个简单的单元测试:

java">
public class HotelIndexTest {

    private RestHighLevelClient client;

    @BeforeEach
    void setUp(){
        this.client = new RestHighLevelClient(RestClient.builder(
                HttpHost.create("http://192.168.88.151:9200")
        ));
    }

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

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


http://www.niftyadmin.cn/n/337897.html

相关文章

Robust 2.0:支持Android R8的升级版热修复框架

2016年&#xff0c;我们对美团Android热更新方案Robust的技术原理做了详细介绍。近几年&#xff0c;Google 推出了新的代码优化混淆工具R8&#xff0c;Android 热修复补丁制作依赖二次构建包和线上包对比&#xff0c;需要对Proguard切换到R8提前进行适配和改造&#xff0c;本文…

文档处理容易“翻车”,来看看CCIG上的大咖怎么说

一、前言 哪怕在互联网时代高速发展的今天&#xff0c;文档依然是人们在日常生活、工作中产生的信息的重要载体。 学生的作业、开具的发票、医生的医嘱、合同、简历、金融票据等都是通过文档来呈现的&#xff0c;它在我们的生活中随处可见。 现在我们为了更高效、安全的开展业务…

理解搜索引擎优化

我们需要了解搜索引擎如何对网站进行排名&#xff0c;并优化我们的网站以便于搜索引擎的抓取&#xff0c;这被称为SEO&#xff08;搜索引擎优化&#xff09;。 搜索引擎的工作分为三个阶段&#xff1a; •爬虫读取页面内容&#xff08;HTML代码&#xff09;并跟随超链接读取更多…

金铲铲之战8.5版本

金币篇 1、如果有强大的经济基础&#xff0c;那么这个游戏赢下来回变的超级简单&#xff0c;因此获取更多的金币是吃鸡最基础也是最关键的保障 说明&#xff1a;金币可以用来升级、刷新商店和购买人口 金币来源&#xff1a; 1、基础金币&#xff1a;根据野怪波次给予金币奖励…

采集数据方法

数据采集是指通过各种手段和技术&#xff0c;从各种数据源中获取数据的过程。在当今信息化时代&#xff0c;数据采集已经成为了各个领域中不可或缺的一部分&#xff0c;它可以帮助我们更好地了解市场、用户、竞争对手等信息&#xff0c;从而更好地制定决策和规划。本文将从数据…

java并发-CyclicBarrier

### 1. 简介 CyclicBarrier是一个Java并发工具类&#xff0c;它可以让一组线程在到达某个屏障时停止执行&#xff0c;直到所有线程都到达屏障时才能继续执行。与CountDownLatch类似&#xff0c;CyclicBarrier也可以用来协调多个线程间的执行顺序&#xff0c;但是它的用途更加复…

如何进行MySQL漏洞扫描

MySQL是一款广泛使用的关系型数据库管理系统&#xff0c;但由于其复杂的结构和功能&#xff0c;也存在不少安全漏洞&#xff0c;容易被黑客攻击。为了解决这些安全问题&#xff0c;进行MySQL漏洞扫描是必要的。那么MySQL怎么进行漏洞扫描?如何进行漏洞扫描?接下来就让小编带大…

QT客户端外包开发流程及难点

QT是一种跨平台的C应用程序开发框架&#xff0c;可以用于开发各种类型的客户端软件&#xff0c;包括桌面应用程序、移动应用程序、嵌入式应用程序等。在开发跨平台的客户端语言中&#xff0c;QT应该是应用最广泛的&#xff0c;今天和大家分享开发流程及技术难点&#xff0c;希望…