# 分布式搜索引擎-- elasticsearch基础

本文介绍了Elasticsearch作为强大的搜索引擎,其核心概念如倒排索引,ELK技术栈(Elasticsearch,Kibana,Logstash,Beats)以及与MySQL的区别。此外,还讲解了Java操作Elasticsearch的RestHighLevelClient和索引库、文档的基本操作方法。
摘要由CSDN通过智能技术生成

1.1什么是elasticsearch?        

elasticsearch是一款非常强大的开源搜索引擎,具备非常多强大功能,可以帮助我们从海量数据中快速找到需要的内容,,可以用来实现搜索、日志统计、分析、系统监控等功能

1.1.1什么是ELK技术栈?

   是以elasticsearch为核心的技术栈,都包括:

  • ElasticSearch(存储,计算,搜索数据)
  • kibana(数据可视化)
  • Logstash(数据抓取)
  • Beats(数据抓取)

被广泛应用在日志数据分析、实时监控等领域.

 1.1.2什么是Lucene?

  • 是Apache的开源搜索引擎类库,提供了搜索引擎的核心API,elasticsearch底层是基于lucene来实现的。

  • Lucene是一个Java语言的搜索引擎类库,是Apache公司的顶级项目,由DougCutting于1999年研发。官网地址:Apache Lucene - Welcome to Apache Lucene

 2.1ElasticSearch采用"倒排索引",搜索很快


  •  正向索引:从第一个开始一行一行的搜,需要遍历所有,速度慢,逐行扫描,也就是全表扫描,随着数据量增加,其查询效率也会越来越低。当数据量达到数百万时,就是一场灾难。
  •  倒排索引:保存文章后,分词器会拆成一个一个的词,这个词那个文档用过,都会记录下来文档id比如想搜 "华为手机" ,倒推出来,文档id(1,2,3),和华为手机有关系,直接根据这个(1,2,3),列表去磁盘查找,速度很快.
            总之,倒排索引就是你给我一个词,我能定位到那几个文档用过他,我直接去查用过他的文档,无需全表扫描。

3.1Mysql和Elasticsearch

  • Mysql:擅长事务类型操作,可以确保数据的安全和一致性

  • Elasticsearch:擅长海量数据的搜索、分析、计算

    因此在企业中,往往是两者结合使用:

  • 对安全性要求较高的写操作,使用mysql实现

  • 对查询性能要求较高的搜索需求,使用elasticsearch实现

  • 两者再基于某种方式,实现数据的同步,保证一致性

4.1.1mapping映射属性

      索引库就类似MySQL数据库表,mapping映射就类似表的结构。

      我们要向es中存储数据,必须先创建“库”和“表”。

  • mapping是对索引库中文档的约束,常见的mapping属性包括:
  • type:字段数据类型,常见的简单类型有:
  •   - 字符串:text(可分词的文本)、keyword(指定不拆分,如:品牌、国家、ip地址)
  •   - 数值:long、integer、short、byte、double、float、
  •   - 布尔:boolean
  •   - 日期:date
  •   - 对象:object
  • - index:是否创建索引,默认为true
  • - analyzer:使用哪种分词器
  • - properties:该字段的子字段

 


5.1通过Java操作ES ,RestAPI

  • ES官方提供了各种不同语言的客户端,用来操作ES。这些客户端的本质就是组装DSL语句,通过http请求发送给ES。官方文档地址:https://www.elastic.co/guide/en/elasticsearch/client/index.html
  • 其中的Java Rest Client又包括两种:
    - Java Low Level Rest Client
    - Java High Level Rest Client 

 5.2RestHighLevelClient 

 在elasticsearch提供的API中,与elasticsearch一切交互都封装在一个名为RestHighLevelClient的类中,必须先完成这个对象的初始化,建立与elasticsearch的连接。分三步:

  • 第一步:引入es的RestHighLevelClient依赖:
<dependency>
    <groupId>org.elasticsearch.client</groupId>
    <artifactId>elasticsearch-rest-high-level-client</artifactId>
</dependency>
  • 第二步:因为SpringBoot默认的ES版本是7.6.2,所以我们需要覆盖默认的ES版本:
<properties>
    <java.version>1.8</java.version>
    <elasticsearch.version>7.12.1</elasticsearch.version>
</properties>
  • 第三步:在application.yml加配置(根据自己的情况来配置,我这是以部署到linux上为例)
    ​​​​​
    spring:
        elasticsearch: # es
        rest:
          uris: 192.168.74.129:9200 #指定自己linux的IP地址,9200是固定端口

5.3RestClient操作索引库

JavaRestClient操作elasticsearch的流程基本类似。核心是client.indices()方法来获取索引库的操作对象。

索引库操作的基本步骤:

- 初始化RestHighLevelClient
- 创建XxxIndexRequest。XXX是Create、Get、Delete
- 准备DSL( Create时需要,其它是无参)
- 发送请求。调用RestHighLevelClient#indices().xxx()方法,xxx是create、exists、delete

 5.4RestClient操作文档

文档操作的基本步骤:

- 初始化RestHighLevelClient
- 创建XxxRequest。XXX是Index、Get、Update、Delete、Bulk
- 准备参数(Index、Update、Bulk时需要)
- 发送请求。调用RestHighLevelClient#.xxx()方法,xxx是index、get、update、delete、bulk
- 解析结果(Get时需要)

  • 17
    点赞
  • 27
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值