ElasticSearch与Kibana基本概念和使用

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

目录

一、什么是elasticsearch?

二、什么是kibana?

三、elasticsearch的优点

四、elasticsearch怎么实现查询的?

五、引入:正向索引、倒排索引

5.1 概念

5.2、优缺点: 

六、es的概念

6.1、文档和字段

6.2、索引和映射

七、索引库操作

7.1、mapping映射属性

 7.2、索引库操作

7.3、 文档操作

八、RestAPI(Java HighLevel Rest Client客户端API )

8.1 、引入依赖

8.2、RestClien操作t索引库

8.3、 RestClient操作文档


一、什么是elasticsearch?

        它是一款非常强大的分布式搜索引擎 ,它可以帮助我们在大量的数据中快速的查询我们需要的内容,并且可以实现搜索、日志统计、分析、系统监控等功能 。

二、什么是kibana?

它是elasticsearch的一种可视化工具

三、elasticsearch的优点

  • 支持分布式、可水平拓展
  • 提供Restful接口,可被任何语言调用

四、elasticsearch怎么实现查询的?

        创建倒排索引是对正向索引的一种特殊处理,流程如下:

  • 将每一个文档的数据利用算法分词,得到一个个词条

  • 创建表,每行数据包括词条、词条所在文档id、位置等信息

  • 因为词条唯一性,可以给词条创建索引,例如hash表结构索引

五、引入:正向索引、倒排索引

5.1 概念

正向索引:如果根据一个表的id来查询,查询速度非常快。但是如果根据其他字段则,无法查看或 者查询效率变低。这时候可以采取倒排索引。

倒排索引

  • 文档(Document):用来搜索的数据,其中的每一条数据就是一个文档。例如一个网页、一个商品信息

  • 词条(Term):对文档数据或用户搜索数据,利用某种算法分词,得到的具备含义的词语就是词条。例如:我是中国人,就可以分为:我、是、中国人、中国、国人这样的几个词条

总结:

  • 正向索引是最传统的,根据id索引的方式。但根据词条查询时,必须先逐条获取每个文档,然后判断文档中是否包含所需要的词条,是根据文档找词条的过程

  • 倒排索引则相反,是先找到用户要搜索的词条,根据词条得到保护词条的文档的id,然后根据id获取文档。是根据词条找文档的过程

5.2、优缺点: 

正向索引

  • 优点:

    • 可以给多个字段创建索引

    • 根据索引字段搜索、排序速度非常快

  • 缺点:

    • 根据非索引字段,或者索引字段中的部分词条查找时,只能全表扫描。

倒排索引

  • 优点:

    • 根据词条搜索、模糊搜索时,速度非常快

  • 缺点:

    • 只能给词条创建索引,而不是字段

    • 无法根据字段做排序

 ----------------------------------------------接下来才是重点--------------------------------------------------------------------

六、es的概念

6.1、文档和字段

elasticsearch是面向文档(Document)存储的,可以是数据库中的一条商品数据,一个订单息。

文档数据会被序列化为json格式后存储在elasticsearch中 。

而Json文档中往往包含很多的字段(Field),类似于数据库中的列。

6.2、索引和映射

        索引(Index),就是相同类型的文档的集合。(我们可以把索引当做是数据库中的表 ) 。

        数据库的表会有约束信息,用来定义表的结构、字段的名称、类型等信息。因此,索引库中就有映射(mapping),是索引中文档的字段约束信息,类似表的结构约束。

七、索引库操作

7.1、mapping映射属性

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

  • type:字段数据类型,常见的简单类型有:

    • 字符串:text(可分词的文本)、keyword(精确值,例如:品牌、国家、ip地址)

    • 数值:long、integer、short、byte、double、float、

    • 布尔:boolean

    • 日期:date

    • 对象:object

  • index:是否创建索引,默认为true

  • analyzer:使用哪种分词器

  • properties:该字段的子字段

 7.2、索引库操作

  • 创建索引库:PUT /索引库名

  • 查询索引库:GET /索引库名

  • 删除索引库:DELETE /索引库名

  • 添加字段:PUT /索引库名/_mapping

# 创建索引库
PUT /索引库名称
{
  "mappings": {
    "properties": {
      "字段名":{
        "type": "text",
        "analyzer": "ik_smart"
      },
      "字段名2":{
        "type": "keyword",
        "index": "false"
      },
      "字段名3":{
        "properties": {
          "子字段": {
            "type": "keyword"
          }
        }
      }
    }
  }
}


# 查询索引库
GET /索引库名称

# 修改索引库(一旦创建索引库,就无法修改,但是可以添加)
PUT /索引库名/_mapping
{
  "properties": {
    "新字段名":{
      "type": "integer"
    }
  }
}

# 删除索引库
DELETE /索引库名

7.3、 文档操作

  • 创建文档:POST /{索引库名}/_doc/文档id { json文档 }

  • 查询文档:GET /{索引库名}/_doc/文档id

  • 删除文档:DELETE /{索引库名}/_doc/文档id

  • 修改文档:

    • 全量修改:PUT /{索引库名}/_doc/文档id { json文档 }

    • 增量修改:POST /{索引库名}/_update/文档id { "doc": {字段}}

# 添加文档
POST /索引库名/_doc/文档id
{
    "字段1": "值1",
    "字段2": "值2",
    "字段3": {
        "子属性1": "值3",
        "子属性2": "值4"
    }
}

# 查询文档
GET /索引库名称/_doc/id值

# 删除文档
DELETE /索引库名/_doc/id值



# 修改文档

# 全量修改(全量修改是覆盖原来的文档)
# 注意:如果根据id删除时,id不存在,第二步的新增也会执行,也就从修改变成了新增操作了。
PUT /索引库名/_doc/文档id值
{
    "字段1": "值1",
    "字段2": "值2"
}

# 增量修改(增量修改是只修改指定id匹配的文档中的部分字段)
POST /索引库名/_update/文档id值
{
    "doc": {
         "字段名": "新的值",
    }
}


八、RestAPI(Java HighLevel Rest Client客户端API )

8.1 、引入依赖

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

1)引入es的RestHighLevelClient依赖

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

2)因为SpringBoot默认的ES版本是7.6.2,所以我们需要覆盖默认的ES版本

<properties>
    <java.version>1.8</java.version>
    <elasticsearch.version>7.12.1</elasticsearch.version>
</properties>

3)初始化RestHighLevelClient:

RestHighLevelClient client = new RestHighLevelClient(RestClient.builder(
        HttpHost.create("http://IP:端口")
));

8.2、RestClien操作t索引库

功能:用来操作ES

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

索引库操作的基本步骤:

  • 初始化RestHighLevelClient

  • 创建XxxIndexRequest。XXX是Create、Get、Delete

  • 准备DSL( Create时需要,其它是无参)

  • 发送请求。调用RestHighLevelClient#indices().xxx()方法,xxx是create、exists、delete

// 创建索引库
@Test
void createHotelIndex() throws IOException {
    // 1.创建Request对象
    CreateIndexRequest request = new CreateIndexRequest("hotel");
    // 2.准备请求的参数:DSL语句
    request.source(MAPPING_TEMPLATE, XContentType.JSON);
    // 3.发送请求
    client.indices().create(request, RequestOptions.DEFAULT);
}

// 删除索引库
@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.err.println(exists ? "索引库已经存在!" : "索引库不存在!");
}

8.3、 RestClient操作文档

文档操作的基本步骤:

  • 初始化RestHighLevelClient

  • 创建XxxRequest。XXX是Index、Get、Update、Delete、Bulk

  • 准备参数(Index、Update、Bulk时需要)

  • 发送请求。调用RestHighLevelClient#.xxx()方法,xxx是index、get、update、delete、bulk

  • 解析结果(Get时需要)文章来源地址https://www.toymoban.com/news/detail-418333.html

// 添加文档  
@Test
    void testAddDocument() throws IOException {
        Hotel hotel = hotelService.getById(38812);
        HotelDoc hotelDoc = new HotelDoc(hotel);
        // 1、准备request对象
        IndexRequest request = new IndexRequest("hotel").id(hotel.getId().toString());
        request.source(JSON.toJSONString(hotelDoc), XContentType.JSON);
        client.index(request,RequestOptions.DEFAULT);
    }

// 查看文档
    @Test
    void testGetDocument() throws IOException {
        GetRequest request = new GetRequest("hotel").id("38812");
        GetResponse response = client.get(request, RequestOptions.DEFAULT);
        String json = response.getSourceAsString();
        JSONObject jsonObject = JSON.parseObject(json);
        System.out.println(jsonObject);
    }


// 修改文档
    @Test
    void testUpdateDocument() throws IOException {
        UpdateRequest updateRequest = new UpdateRequest("hotel","38812");
        updateRequest.doc(
          "price","953"
        );
        client.update(updateRequest,RequestOptions.DEFAULT);
    }

// 删除文档

    @Test
    void testDeleteDocument() throws IOException {
        DeleteRequest deleteRequest = new DeleteRequest("hotel","38812");

        client.delete(deleteRequest,RequestOptions.DEFAULT);
    }

// 批量导入文档
    @Test
    void testBulkRequest() throws IOException {
        BulkRequest bulkRequest = new BulkRequest();
        List<Hotel> list = hotelService.list();
        for (Hotel hotel : list) {
            HotelDoc hotelDoc = new HotelDoc(hotel);
            bulkRequest.add(new IndexRequest("hotel").id(hotelDoc.getId().toString()).source(JSON.toJSONString(hotelDoc),XContentType.JSON));
        }
        client.bulk(bulkRequest,RequestOptions.DEFAULT);
    }

到了这里,关于ElasticSearch与Kibana基本概念和使用的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

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

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

相关文章

  • Elasticsearch的一些基本概念

    Elasticsearch是面向文档的,文档是所有可搜索数据的最小单位。 文档会被序列化成JSON格式,保存在Elasticsearch中。 JSON对象由字段组成,每个字段都有对应的字段类型(字符串/数值/布尔/日期/二进制/范围类型)。 每个文档都有一个UniqueID,你可以自己指定ID,或者通过

    2024年02月12日
    浏览(26)
  • 引言:ElasticSearch的基本概念

    ElasticSearch是一个基于分布式搜索和分析的开源搜索引擎。它是一个实时、可扩展、高性能的搜索引擎,可以处理大量数据并提供快速、准确的搜索结果。ElasticSearch的核心概念包括索引、类型、文档、映射、查询和聚合等。在本文中,我们将深入探讨ElasticSearch的基本概念、核

    2024年02月19日
    浏览(26)
  • ElasticSearch的介绍、安装、基本概念

            ElasticSearch是一个基于Lucene的搜索服务器。它提供了一个分布式多用户能力的全文搜索引擎,基于RESTful web接口。Elasticsearch是用Java开发的,并作为Apache许可条款下的开放源码发布,是当前流行的企业级搜索引擎。设计用于云计算中,能够达到实时搜索,稳定,可靠

    2024年02月15日
    浏览(43)
  • Elasticsearch 系列(二)- ES的基本概念

    本章将和大家分享 Elasticsearch 的一些基本概念。话不多说,下面我们直接进入主题。 Lucene是Apache的开源搜索引擎类库,提供了搜索引擎的核心API。 1、Lucene的优势:易扩展、高性能(基于倒排索引) 2、Lucene的缺点:只限于Java语言开发、学习曲线陡峭、不支持水平扩展 Elast

    2024年02月05日
    浏览(25)
  • HTTP基本概念-HTTP 是什么?

    资料来源 : 小林coding 小林官方网站  : 小林coding (xiaolincoding.com) HTTP 是超文本传输协议,也就是HyperText Transfer Protocol。 能否详细解释「超文本传输协议」? HTTP 的名字「超文本协议传输」,它可以拆成三个部分: 超文本 传输 协议 1.「协议」 在生活中,我们也能随处可见「协议

    2024年02月20日
    浏览(24)
  • Elasticsearch下载安装,IK分词器、Kibana下载安装使用,elasticsearch使用演示

    首先给出自己使用版本的网盘链接:自己的版本7.17.14 链接:https://pan.baidu.com/s/1FSlI9jNf1KRP-OmZlCkEZw 提取码:1234 一般情况下 Elastic Search(ES) 并不单独使用,例如主流的技术组合 ELK(Elasticsearch + Logstash + Kibana ) 1. Elasticsearch下载 下载之前,先看下和 JDK 版本的对应关系,版本

    2024年02月05日
    浏览(32)
  • 【ElasticSearch】基于Docker 部署 ElasticSearch 和 Kibana,使用 Kibana 操作索引库,以及实现对文档的增删改查

    Elasticsearch 和 Kibana 是强大的工具,用于构建实时搜索和数据可视化解决方案。Elasticsearch 是一个分布式、高性能的搜索引擎,可以用于存储和检索各种类型的数据,从文本文档到地理空间数据。Kibana 则是 Elasticsearch 的可视化工具,用于实时分析和可视化大规模数据集。 在本

    2024年02月06日
    浏览(66)
  • Docker 搭建 ElasticSearch、Kibana 以及基础使用

    Elasticsearch: 权威指南 | Elastic 拉取ES以及Kibana镜像: ES部分搭建: 创建目录、配置文件、其他配置以及启动 1、目录部分: 2、端口部分: 3、配置文件创建 4、其他注意事项 5、启动容器 访问http://宿主机IP:9200/_cat/nodes?pretty 节点名称带表示为主节点*,这里作示范仅启动2个容器

    2024年02月04日
    浏览(41)
  • 使用 Docker Compose 部署 Elasticsearch + Kibana

    本篇文章主要介绍了使用 Docker Compse 部署 Elasticsearch + Kibana,并整合到 Spring Boot 项目中的详细步骤。 Elasticsearch + Kibana 版本: 7.17.0(7 的最新版本);Spring Boot 版本:2.7.5 。 Kibana 官方文档、Elasticsearch官方文档 在 config 目录下,编写 elasticsearch.yml 配置文件,内容如下。 在 ki

    2024年02月06日
    浏览(35)
  • docker部署elasticsearch:8.6.2, kibana,logstash 版本以及kibana的使用

    How to Run Elasticsearch 8 on Docker for Local Development Docker下elasticsearch8部署、扩容、基本操作实战(含kibana) 导入es数据 docker安装elasticsearch和head插件 docker安装elasticsearch和head插件,连接失败问题解决 需要输入token 生成token报错 ERROR: [xpack.security.enrollment.enabled] must be set to true to create an

    2024年02月16日
    浏览(67)

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

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

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

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

二维码1

领取红包

二维码2

领红包