ElasticSearch 学习笔记总结(一)

news2024/11/25 16:34:31

文章目录

  • 一、 数据的 分类
  • 二、 ElasticSearch 介绍
  • 三、 ElasticSearch 搭建
  • 四、正排索引 和 倒排索引
  • 五、ES HTTP 索引 操作
  • 六、ES HTTP 文档 操作
  • 七、ES HTTP 查询数据
    • 1. 条件查询
    • 2. 分页查询
    • 3. 排序查询
    • 4. 多条件查询
    • 5. 全文检索 完全匹配 高亮显示
    • 6. 聚合查询
  • 八、 ES HTTP 映射

一、 数据的 分类

结构化数据: 像表格、字段等都属于结构化数据,一般存储在 SQL数据库 中。缺点:一点结构固定,很难再去拓展。

非结构化数据: 像报表、图片、通讯记录、日志、视频等等都属于非结构化数据,一般存储在 NoSQL数据库 中。缺点:这些数据维度广、数据量大,对于数据存储和查询维护起来成本很大。

半结构化数据:html、xml这样的文件 属于半结构化数据。

简而言之,ElasticSearch就是用来处理这几种数据类型的。

二、 ElasticSearch 介绍

在这里插入图片描述
ES是一个开源的高扩展的分布式的全文搜索引擎。

Lucene是Apache软件基金会Jakarta项目组的一个子项目,提供了简单强大的应用程式接口,能够做全文检索和搜索,Lucene是基于java研发的,而ES就是基于Lucene的

Elasticsearch是面向文档型数据库,一条数据在这里就是一个文档。
在这里插入图片描述

使用案例:
在这里插入图片描述
在这里插入图片描述

三、 ElasticSearch 搭建

ES官方:https://www.elastic.co/cn/

下载安装,启动。
在这里插入图片描述
启动过程中,可能会遇到各种问题,常见的几个情况:

  • jdk版本低。
  • 内存空间不足,以下为解决方式。
    在这里插入图片描述
  • 再个就是不能以root用户进行登录。创建或使用其他用户,注意要赋予用户权限。

四、正排索引 和 倒排索引

两种索引类型:

  • 正排(正向)索引:
    在这里插入图片描述
  • 倒排索引。
    在这里插入图片描述

五、ES HTTP 索引 操作

创建索引:(等同于创建数据库)

  • 发送put请求。
    例如:http://127.0.0.1:9200/shopping 。
    请求后面的shopping就是索引名称。(rest风格)

在这里插入图片描述

获取索引信息:

  • 只需要将方法换成get就可以。

查询所有索引信息:

  • http://127.0.0.1:9200/_cat/indices?v (v是一个参数)

删除索引:

  • 只需要将方法换成delete就可以。

六、ES HTTP 文档 操作

幂等性操作都可以发送put请求。

幂等性: 所谓的幂等性,是分布式环境下的一个常见问题,一般是指我们在进行多次操作时,所得到的结果是一样的,即多次运算结果是一致的。

创建文档:

  • 发送Post请求:
    http://127.0.0.1:9200/shopping/_doc 。
    注意:body请求体不能为空。
  • 还可以自定义id:
    http://127.0.0.1:9200/shopping/_doc/1001
    也可以发送Put请求(幂等性)
    还可以通过_create访问:http://127.0.0.1:9200/shopping/_create/1002

查询文档:

  • 同上发送get请求:
    http://127.0.0.1:9200/shopping/_doc/1001 后面跟的是_id。

查询当前索引下的所有文档:

  • 发送get请求,访问_search路径:
    http://127.0.0.1:9200/shopping/_search

全量文档修改:(全部修改)

  • 发送put请求:(幂等性)
    http://127.0.0.1:9200/shopping/_doc/1001

局部文档修改:(局部修改)

  • 发送post请求:
    http://127.0.0.1:9200/shopping/_update/1001 (使用_update方便知道调用的局部修改。)
    在这里插入图片描述

删除文档:

  • 发送delete请求:
    http://127.0.0.1:9200/shopping/_doc/1001

七、ES HTTP 查询数据

1. 条件查询

get方法直接查询:(有点麻烦,并且参数放到url里面容易乱码)

# get方法直接查询:(有点麻烦,并且参数放到url里面容易乱码)
http://127.0.0.1:9200/shopping/_search?q=category:小米

post方法:(推荐使用)
在这里插入图片描述
直接发送match_all不传参数就可以查询全部:

{
    "query":{
        "match_all":{

        }
    }
}

2. 分页查询

只需要修改对应参数:

{
    "query":{
        "match_all":{

        }
    },
    "from":0, // from从第几页开始, 也就是页码
    "size":2, // 一页多少数据
    "_source":["title"] // 负责控制返回值_source(里面存着数据的属性),这样就只返回了title属性。
}

3. 排序查询

{
    "query":{
        "match_all":{

        }
    },
    "from":0,
    "size":2,
    "_source":["title"],
    "sort":{ // sort负责定义排序操作
        "price":{ // 指定哪个属性
            "order":"desc" // 排序方式
        }
    }
}

4. 多条件查询

Post请求如下:

{
    "query":{
        "bool" : {
        	// 必须匹配的内容中的每一条。
            "must":[
                {
                    "match":{
                        "category":"小米"
                    }
                },
                {
                    "match":{
                        "price":1999.00
                    }
                }
            ],
            // 符合下面其中一个即可
            "should":[
                {
                    "match":{
                        "category":"华为"
                    }
                },
                {
                    "match":{
                        "price":1999.00
                    }
                }
            ],
            // 过滤相关数据
            "filter":[
                {
                    "range":{
                        "price":{
                            "gt":5000
                        }
                    }
                }
            ]
        }
    }
}

5. 全文检索 完全匹配 高亮显示

http://127.0.0.1:9200/shopping/_search

全文检索匹配:会进行分词的效果,所有包含 ’ 小 ’ 和 ’ 米 '的都进行匹配出来。

{
    "query" : {
    	// 全文检索匹配
        "match" : {
            "category" : "小米"
        }
    }
}

完全匹配:完全进行匹配出来。

{
    "query" : {
    	// match_phrase是完全匹配。
        "match_phrase" : {
            "category" : "小米1"
        }
    }
}

高亮显示:

{
    "query" : {
        "match_phrase" : {
            "category" : "小米"
        }
    },
    // 高亮显示效果。
    "highlight": {
        "fields" : {
            "category" : {}
        }
    }
}

在这里插入图片描述

6. 聚合查询

聚合查询就是 一些像求和,多少数量,平均值等一系列的情况。

{
    "aggs" : { // 聚合操作
        "price_group" : { // 名称,随意起名 求平均值用price_avg
            "terms" : { // 分组
                "field" : "price" // 分组字段
            }
        }
    },
    "size" : 0 // 如果只需要聚合数据,不需要原始数据,直接讲size设置为0就可以了。
}

八、 ES HTTP 映射

http://127.0.0.1:9200/user/_mapping

指定某些属性为特殊情况:

{
    "properties" : {
        "name" : {
            "type" : "text",
            "index" : true
        },
        "sex" : {
            "type" : "keyword", // keyword关键字,查询就要精确查询。
            "index" : true
        },
        "tel" : {
            "type" : "keyword", // 关闭关键字就不会了。
            "index" : false
        }
    }
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/365284.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

2.22JVM

一.学习目标1)JVM内存区域划分2)JVM的类加载机制3)JVM的垃圾回收1.JVM执行流程程序在执行之前先要把Java代码转换为字节码(.class),JVM首先需要通过一定的方式类加载器把文件加载到运行时数据区,而字节码文件是JVM的一套指令集规范,并不能直接交给底层操作系统去执行,因此需要特…

【11-JVM面试专题-说说你知道的垃圾回收算法?垃圾回收器你知道吗?CMS、G1和ZGC垃圾回收器你有过了解吗?】

JVM面试专题-说说你知道的垃圾回收算法?垃圾回收器你知道吗?CMS、G1和ZGC垃圾回收器你有过了解吗? JVM面试专题-说说你知道的垃圾回收算法?垃圾回收器你知道吗?CMS、G1和ZGC垃圾回收器你有过了解吗?你掌握的…

Wincc Flexible smart V4触摸屏软件中批量导入PLC变量的具体方法示例(无需单个添加)

Wincc Flexible smart V4触摸屏软件中批量导入PLC变量的具体方法示例(无需单个添加) 具体操作步骤可参考以下例子中的内容: 打开STEP7-MicroWin smart软件,编辑自己的PLC程序(这里以一个简单的启保停程序为例), 如下图所示,打开Wincc Flexible smart V4触摸屏软件,新建…

双指针 (C/C++)

1. 双指针 双指针算法的核心思想:将暴力解法的时间复杂度,通常是O(N*N),通过某种特殊的性质优化到O(N)。 做题思路:先想想暴力解法的思路,然后分析这道题的特殊性质,一般是单调性。然后得出双指针算法的思路…

微信协议网页版微信协议解析

最近在做个微信机器人,所以研究了网页版的微信协议及相关接口,在这里简单总结一下。从表面上看,对于网页版微信我们的使用流程是这样的:很简单,只有四步,但如果细化到内里细节的话,上面这简单四…

一文带你快速入门zabbix6.0的日常操作

文章目录前言一. zabbix基本操作入门1.1 登录和配置用户1.1.1 登录zabbix1.1.2 防爆力破解机制1.1.3 创建用户1.1.4 创建报警媒介1.1.5 设置 权限选项卡1.1.6 设置用户的访问主机权限1.2 新建主机1.2.1 添加主机1.2.2 关于添加的信息注释1.3 新增监控项1.3.1 添加监控项1.3.2 配…

若依系统如何集成qq邮件发送【超详细,建议收藏】

若依系统的部署博主就不在这儿阐述了,默认大家的电脑已经部署好了若依系统,这里直接开始集成邮件系统,首先我们得需要对qq邮箱进行配置;一套学不会你来打我😀; 一、开启我们的qq邮箱发送邮件的配置 1、先进…

Qt音视频开发16-通用悬浮按钮工具栏的设计

一、前言 通用悬浮按钮工具栏这个功能经过了好几个版本的迭代,一开始设计的时候是写在视频控件widget窗体中,当时功能简单就放一排按钮在顶部悬浮widget中就好,随着用户需求的变化,用户需要自定义悬浮条的要求越发强烈&#xff0…

K_A12_031 基于STM32等单片机驱动TEMT6000环境光传感器 串口与OLED0.96双显示

K_A12_031 基于STM32等单片机驱动TEMT6000环境光传感器 串口与OLED0.96双显示一、资源说明二、基本参数参数引脚说明三、驱动说明IIC地址/采集通道选择/时序对应程序:四、部分代码说明1、接线引脚定义1.1、STC89C52RCTEMT6000环境光传感器模块1.2、STM32F103C8T6TEMT6000环境光…

ZCMU--5009: 龙虎斗

轩轩和开开正在玩一款叫《龙虎斗》的游戏,游戏的棋盘是一条线段,线段上有n个兵营(自左至右编号1~n),相邻编号的兵营之间相隔1厘米,即棋盘为长度为n-1厘米的线段。i号兵营里有ci位工兵。 下面图1为n 6的示例: 轩轩在左侧&#xf…

如何通过IP找到地址?

在我们印象中,我们都知道可以通过 IP 地址找到某个人。但当我们细想一下,我们会发现其实 IP 地址与地理位置并不是直接相关的。那我们到底是如何通过 IP 地址找到地址的呢?答案是:通过自治系统(Autonomous System&…

大势前瞻!文旅还是短视频,你弯道超车风口在这了

三年前,新冠疫情的影响波及整个各行各业行业,互联网寒冬,房地产崩盘,教培团灭,在这样的背景下,行业都进入了发展“冰雪期”。老话说大疫后必有大变,如今风雪融化,万物复苏&#xff0…

day01_HTML常识

基础概念铺垫 认识网页 网页的组成:文字、图片、音频、视频、超链接一系列元素网页的本质:程序员写的代码通过浏览器转化(解析和渲染)成用户看到的网页网页是由网页元素组成的 , 这些元素是利用html标签描述出来&…

面试攻略,Java 基础面试 100 问(十八)

JAVA IO 包 JAVA NIO NIO 主要有三大核心部分:Channel(通道),Buffer(缓冲区), Selector。 传统 IO 基于字节流和字 符流进行操作,而 NIO 基于 Channel 和 Buffer(缓冲区)进行操作,数据总是从通道读取到缓冲区 中,或者…

不可替代的测试人:一文解释探索性测试是什么

剧本式测试 随着软件技术的发展,软件开发过程中对软件测试的需求越来越庞大,从原来单纯的寻找软件缺陷,到后来的学习软件、挖掘软件中存在的缺陷、评估软件可用性、性能等等方面,软件测试发挥着重要作用。 考虑到软件测试如此的…

视频流截取保存到本地路径(打包jar包CMD运行)

需求:现在有一批https的监控视频流URL,需要对视频流进行每三秒截屏一次,并保存到本地路径,png格式,以当前时间命名。代码:import org.bytedeco.javacv.FFmpegFrameGrabber; import org.bytedeco.javacv.Fra…

微信小程序登录

小程序登录 | 微信开放文档 (qq.com)https://developers.weixin.qq.com/miniprogram/dev/framework/open-ability/login.html 静默登录 首先需要在微信开发者工具中获取code(wx.login(Object object) | 微信开放文档 (qq.com)) 前端处理获取code其次:需要appid,se…

PyQt5数据库开发2 5.1 QSqlQueryModel

目录 一、Qt窗体设计 1. 新建Qt项目 2. 拷贝4-3的部分组件过来 3. 添加资源文件 4. 创建Action 5. 添加工具栏 6. 创建菜单项 7. 关闭Action的实现 8. 调整布局 8.1 调整两个groupbox的布局 8.3 为窗体设置全局布局 二、代码拷贝和删除 1. 新建项目目录 2. 编译…

游戏化销售管理是什么?使用CRM系统进行有什么用?

对于企业销售来说,高薪酬也伴随着更高的压力与挑战。高强度的单一工作会让销售人员逐渐失去对工作的兴趣,导致销售状态缺少动力和激情,工作开展愈加困难。您可以通过CRM系统进行游戏化销售管理,让销售人员重新干劲满满。 游戏并不…