IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 大数据 -> elasticsearch学习笔记 -> 正文阅读

[大数据]elasticsearch学习笔记

学习地址:elasticsearch学习视频

1 开篇

我们查询的信息:文章、视频、图片、网站信息等

按数据格式分类:
1、结构化数据
2、非结构化数据
3、半结构化数据

结构化数据

使用特定的结构来组织和管理数据,一般表现为二维表结构
在这里插入图片描述
缺点:扩展现有的结构不方便

非结构化数据

无法用二维表结构表示的数据,如:服务器日志、视频、报表和图片等
在这里插入图片描述

半结构化数据

数据的结构和内容混在一起,没有明显的区分,如:xml文件、html文件等

缺点:查询内容不方便

在这里插入图片描述

2 技术选型

Elasticsearch是什么

The Elastic Stack, 包括 Elasticsearch、Kibana、Beats 和 Logstash(也称为 ELK Stack)。
能够安全可靠地获取任何来源、任何格式的数据,然后实时地对数据进行搜索、分析和可视
化。Elaticsearch,简称为 ES,ES 是一个开源的高扩展的分布式全文搜索引擎,是整个 Elastic
Stack 技术栈的核心。它可以近乎实时的存储、检索数据;本身扩展性很好,可以扩展到上
百台服务器,处理 PB 级别的数据

Elasticsearch And Solr

目前市面上流行的搜索引擎软件,主流的就两款:ElasticsearchSolr,两者都可以独立部署启动的搜索引擎服务软件。

Elasticsearch Or Solr

Elasticsearch 和 Solr 都是开源搜索引擎,那么我们在使用时该如何选择呢?

  • Google 搜索趋势结果表明,与 Solr 相比,Elasticsearch 具有很大的吸引力,但这并不意味着 Apache Solr 已经死亡。虽然有些人可能不这么认为,但 Solr 仍然是最受欢迎的搜索引擎之一,拥有强大的社区和开源支持。
  • 与 Solr 相比,Elasticsearch 易于安装且非常轻巧。此外,你可以在几分钟内安装并运行Elasticsearch。但是,如果 Elasticsearch 管理不当,这种易于部署和使用可能会成为一个问题。基于 JSON 的配置很简单,但如果要为文件中的每个配置指定注释,那么它不适合您。总的来说,如果你的应用使用的是 JSON,那么 Elasticsearch 是一个更好的选择。否则,请使用 Solr,因为它的schema.xml 和 solrconfig.xml 都有很好的文档记录。
  • Solr 拥有更大,更成熟的用户,开发者和贡献者社区。ES 虽拥有的规模较小但活跃的用户社区以及不断增长的贡献者社区。Solr 贡献者和提交者来自许多不同的组织,而 Elasticsearch 提交者来自单个公司。
  • Solr 更成熟,但 ES 增长迅速,更稳定。
  • Solr 是一个非常有据可查的产品,具有清晰的示例和 API 用例场景。 Elasticsearch 的 文档组织良好,但它缺乏好的示例和清晰的配置说明

3 略

4 入门——环境准备

官方地址:https://www.elastic.co/cn/
下载地址:https://www.elastic.co/cn/downloads/past-releases#elasticsearch

Elasticsearch 分为 Linux 和 Windows 版本,基于我们主要学习的是 Elasticsearch 的 Java客户端的使用,所以课程中使用的是安装较为简便的 Windows 版本。

请添加图片描述

安装软件

Windows 版的 Elasticsearch 的安装很简单,解压即安装完毕,解压后的 Elasticsearch 的目录结构如下
请添加图片描述

请添加图片描述
解压后,进入 bin 文件目录,点击 elasticsearch.bat 文件启动 ES 服务

注意:9300 端口为 Elasticsearch 集群间组件的通信端口,9200 端口为浏览器访问的 http协议 RESTful 端口。

打开浏览器(推荐使用谷歌浏览器),输入地址:http://localhost:9200,测试结果

请添加图片描述

问题解决

  • Elasticsearch 是使用 java 开发的,且 7.8 版本的 ES 需要 JDK 版本 1.8 以上,默认安装包带有 jdk 环境,如果系统配置JAVA_HOME,那么使用系统默认的 JDK,如果没有配置使用自带的 JDK,一般建议使用系统配置的 JDK。
  • 双击启动窗口闪退,通过路径访问追踪错误,如果是“空间不足”,请修改config/jvm.options 配置文件
# 设置 JVM 初始内存为 1G。此值可以设置与-Xmx 相同,以避免每次垃圾回收完成后 JVM 重新分配内存
# Xms represents the initial size of total heap space
# 设置 JVM 最大可用内存为 1G
# Xmx represents the maximum size of total heap space
-Xms1g
-Xmx1g

5 RESTful & JSON

  • 在服务器端,应用程序状态和功能可以分为各种资源。资源是一个有趣的概念实体,它向客户端公开。资源的例子有:应用程序对象、数据库记录、算法等等。每个资源都使用 URI (Universal Resource Identifier) 得到一个唯一的地址。所有资源都共享统一的接口,以便在客户端和服务器之间传输状态。使用的是标准的 HTTP 方法,比如 GET、PUT、POST 和DELETE。

  • 在 REST 样式的 Web 服务中,每个资源都有一个地址。资源本身都是方法调用的目标,方法列表对所有资源都是一样的。这些方法都是标准方法,包括 HTTP GET、POST、PUT、DELETE,还可能包括 HEAD 和 OPTIONS。简单的理解就是,如果想要访问互联网上的资源,就必须向资源所在的服务器发出请求,请求体中必须包含资源的网络路径,以及对资源进行的操作(增删改查)

基本的json对象:

var obj={"name":"zhangsan","age":30}

对象嵌套:

var obj={"name":"zhangsan","age":30,"info":{"email":"xxxxxx"}}

即使用大括号嵌套即可

对象集合

var objs=[obj1,obj2]

使用中括号,对象之间逗号隔开即可

上述的表示容易转换为字符串从而在网络中表示,从而在网络中传递。而我们所熟悉的对象,是无法在网络中传递的,如new Object(),是不能在网络中传递的,只能将其序列化,然后接收端再将其反序列化

JSON字符串:网络中传递的字符串的格式符合JSON格式,就将其统称为JSON字符串

6 Postman客户端工具

如果直接通过浏览器向 Elasticsearch 服务器发请求,那么需要在发送的请求中包含HTTP 标准的方法,而 HTTP 的大部分特性且仅支持 GET 和 POST 方法。所以为了能方便地进行客户端的访问,可以使用 Postman 软件

Postman 是一款强大的网页调试工具,提供功能强大的 Web API 和 HTTP 请求调试。软件功能强大,界面简洁明晰、操作方便快捷,设计得很人性化。Postman 中文版能够发送任何类型的 HTTP 请求 (GET, HEAD, POST, PUT…),不仅能够表单提交,且可以附带任意类型请求体。
Postman 官网:https://www.getpostman.com
Postman 下载:https://www.getpostman.com/apps

7 倒排索引

数据格式

Elasticsearch是面向文档型数据库,一条数据在这里表现出来就是一个文档。将Elasticsearch里存储文档数据和关系型数据库MySQL存储数据的概念进行类比如下:
请添加图片描述

ES 里的 Index 可以看做一个库,而 Types 相当于表,Documents 则相当于表的行。
这里 Types 的概念已经被逐渐弱化,Elasticsearch 6.X 中,一个 index 下已经只能包含一个type,Elasticsearch 7.X 中, Type 的概念已经被删除了

ES软件专门用于全文检索数据,因此索引是整个搜索引擎的关键,为了能够快速准确地查询数据,它使用了一种特殊的概念来存储和查询数据:倒排索引

倒排索引对应于正排索引(正向索引)

正向索引:

idcontent
1001My name is zhang san
1002My name is li si

将id设置为主键,生成主键索引,通过主键索引快速关联到对应的content信息,这种索引就是正排索引(正向索引)

但是如果我们想要查询文章的内容中包含了哪些热门词汇,就需要采取模糊查询,而模糊查询效率就低了很多。因此我们需要换一种方式将索引和数据关联起来:倒排索引

将关键字和id关联起来

keywordid

如果查询关键字为name,那么得到对应的id就是1001,1002
如果查询关键字为zhang,那么得到对应的id就是1001

keywordid
name1001,1002
zhang1001

那么这样就是通过关键字keyword来查询主键id,然后再关联到数据content

8 Http-索引-创建

来到Postman软件中进行操作

对比关系型数据库,创建索引就等同于创建数据库
在Postman中,向ES服务器发PUT请求:http://127.0.0.1:9200/shopshop就是我们要创建的索引

请添加图片描述

请求后,服务器返回响应:

请添加图片描述

请添加图片描述

如果此时,发送同样的创建shop索引请求,就会报错,因为当前shop索引已经存在了

请添加图片描述

9 Http-索引-查询&删除

查询刚刚创建的shop索引,使用GET请求:http://127.0.0.1:9200/shop

请添加图片描述

请求后,ES服务器返回的结果:
请添加图片描述

http://127.0.0.1:9200/_cat/indices?v查询所有索引

这里请求路径中的_cat表示查看的意思,indices表示索引,所以整体含义就是查看当前ES服务器中的所有索引,由于索引等同于数据库,因此该命令就像是mysql中的show databases命令

请添加图片描述
shopping索引是我之前创建了的

请添加图片描述

删除索引

请添加图片描述

发送DELETE请求后,ES服务器返回结果:

请添加图片描述

10 Http-文档-创建(PUT&POST)

索引已经创建好了,下面可以来创建文档并添加数据。这里的文档可类比为mysql中的表数据,添加的数据格式为JSON格式

在Postman中,向ES服务器发POST请求:http://127.0.0.1:9200/shop/_doc

此处发送请求的方式必须为 POST,不能是PUT,否则会发生错误
请求体内容为:

{
 "title":"小米手机",
 "category":"小米",
 "images":"http://www.gulixueyuan.com/xm.jpg",
 "price":3999.00
}

请添加图片描述
返回结果:

请添加图片描述
请添加图片描述

上面的数据创建后,由于没有指定数据唯一性标识(ID),默认情况下,ES 服务器会随机生成一个。
如果想要自定义唯一性标识,需要在创建时指定:http://127.0.0.1:9200/shop/_doc/1001

请添加图片描述

此处需要注意:如果增加数据时明确数据主键,那么请求方式也可以为 PUT

11 Http-查询-主键查询&全查询

输入路径以及选定为GET请求即可:http://127.0.0.1:9200/shop/_doc/1001

1001就相当于主键
请添加图片描述

localhost:9200/shop/_search 查询索引下的所有数据(注意此时body中不能有数据,否则会报错)

12 Http-全量修改&局部修改&删除

全量修改:

http://127.0.0.1:9200/shop/_doc/1001,选择PUTPOST请求
请添加图片描述
局部修改

更新局部的数据,说明每次更新的结果不相同,因此不能采用put方式,只能采用post

注意要将请求路径中修改为_update,明确指明是要更新数据,json中的body指明要更新哪部分的数据
在这里插入图片描述

删除

在这里插入图片描述

13 Http-条件查询&分页查询&查询排序

条件查询:

通过请求路径进行条件查询:
GET请求

http://127.0.0.1:9200/shop/_search?q=category:小米

通过请求体进行条件查询:

{
    "query":{
        "match":{
            "category":"小米"
        }
    }
}

请添加图片描述
分页查询

from:当前页的起始索引,默认从 0 开始。 from = (pageNum - 1) * size
size:每页显示多少条
在 Postman 中,向 ES 服务器发 GET 请求 :http://127.0.0.1:9200/shop/_search

请求体:

{
    "query":{
        "match_all":{

        }
    },
    "from":0,
    "size":2
}

如果想指定显示title字段:
请求体:

{
    "query":{
        "match_all":{

        }
    },
    "from":0,
    "size":2,
    "_source":["title"]
}

排序查询:

{
    "query": {
        "match_all": {

        }
    },
    "sort": [
        {
        "price": {
        "order": "desc"
        }
    }
    ],
    "from": 0,
    "size": 2
}

14 多条件查询&范围查询

http://127.0.0.1:9200/shop/_search

条件体(使用bool)

{
    "query":{
        "bool":{
            "must":[
                {
                    "match":{
                    "category":"小米"
                }
            }
            ]

        }

    }
}

条件与(使用must)

{
    "query":{
        "bool":{
            "must":[
                {
                    "match":{
                    "category":"小米"
                    }
                },
                {
                    "match":{
                        "price":3999
                    }

                }
            ]

        }

    }
}

条件或(使用should)

{
    "query":{
        "bool":{
            "should":[
                {
                    "match":{
                    "category":"小米"
                    }
                },
                {
                    "match":{
                        "category":"华为"
                    }

                }
            ]

        }

    }
}

范围查询(使用filter和range,同时注意filter是在must或should外面)

{
    "query":{
        "bool":{
            "should":[
                {
                    "match":{
                    "category":"小米"
                    }
                },
                {
                    "match":{
                        "category":"华为"
                    }
                }
            ],
            "filter":{
                "range":{
                    "price":{
                        "gt":5000
                    }
                }
            }

        }

    }
}

15 Http-全文搜索&完全匹配&高亮查询

body内容

{
    "query":{
        "match":{
            "category":"小华"
        }
    }
}

那么category的值为小米/华为都会被匹配到,因为”小华“被进行分词了,被拆成”小“和”华“,因此匹配时”小米“和”华为“都能匹配到。

底层在匹配的时候会被拆分,形成一个个的词,然后进行倒排索引匹配,因此产生这样的现象

如果想要完全匹配,那么需要使用match_phrase

{
    "query":{
        "match_phrase":{
            "category":"小华"
        }
    }
}

匹配后高亮显示:

{
    "query":{
        "match_phrase":{
            "category":"小米"
        }
    },
    "highlight":{
        "fields":{
            "category":{}
        }
    }
}
  大数据 最新文章
实现Kafka至少消费一次
亚马逊云科技:还在苦于ETL?Zero ETL的时代
初探MapReduce
【SpringBoot框架篇】32.基于注解+redis实现
Elasticsearch:如何减少 Elasticsearch 集
Go redis操作
Redis面试题
专题五 Redis高并发场景
基于GBase8s和Calcite的多数据源查询
Redis——底层数据结构原理
上一篇文章      下一篇文章      查看所有文章
加:2021-07-29 11:43:03  更:2021-07-29 11:45:47 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年5日历 -2024/5/3 7:09:40-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码