ElasticSearch

2023-11-20

ElasticSearch

一、ES介绍

ES是一款基于倒排索引的NoSQL数据库,传统数据库对于模糊查询存在性能瓶颈,而ES更擅长与大数据量的模糊查询

ES在存储数据的时候会先将数据进行分词,将分词的结果作为索引存入数据库中;当进行查询时也会将查询的参数进行分词,根据分词结果去ES中查询索引,根据索引查找到匹配的文档,从而将文档返回

请添加图片描述

二、ES请求方式

1、ES与MySQL

  • MySQL:数据存储在表中,表存储在数据库中
  • ES:document存储在Type中,type存储在index中
    • index:相当于数据库
    • type:相当于表(ES7之前可以创建多个,ES7之后只能创建一个,且默认创建,默认名为_doc)
    • docment:相当于数据库中的一条数据

2、请求方式

请添加图片描述

三、基本操作

ES的操作与MySQL类似,都是从数据库→数据表→数据,ES为从index→type→document

1、索引(表)

1.1创建索引

PUT index1

1.2查询索引

GET index1
GET index1/_settings
GET index1/_mapping
GET index1/_alias

查询结果为:

{
  "index1" : {
    "aliases" : { },
    "mappings" : { },
    "settings" : {
      "index" : {
        "creation_date" : "1640858096289",
        "number_of_shards" : "1",
        "number_of_replicas" : "1",
        "uuid" : "sh4a0xy9TbuJ-HkosiqIxg",
        "version" : {
          "created" : "7060299"
        },
        "provided_name" : "index1"
      }
    }
  }
}

其中,mappings为字段的映射,settings为索引的属性,aliases为索引别名
在settings中,number_of_shards字段为分片数量,number_of_replices字段为备份数量

可以在创建索引时设置索引的属性与映射

PUT index1
{
  "mappings":{
    "properties": {
      "bookId":{
        "type": "long"
      },
      "bookName":{
        "type": "text"
      },
      "bookPrice":{
        "type": "float"
      },
      "bookAuthor":{
        "type": "keyworkd"
      }
    }
  },
  "settings":{
    "number_of_shards":5,
    "number_of_replicas":2
  }
}

1.3删除索引

DELETE index1

2、document(数据)

对数据的操作需要先找到Index再找到type再找到 文档编号,其中文档编号类似于MySQL中的主键

2.1添加数据

POST index1/_doc/101
{
  "bookId":1,
  "bookName":"Java",
  "bookPrice":"15.2",
  "bookAuthor":"勒布朗·詹姆斯"
}

2.2查询数据

GET index1/_doc/101

2.3修改数据

修改数据与添加数据相同,若不存在给条数据则会创建一条数据

POST index1/_doc/101
{
  "bookId":1,
  "bookName":"Java",
  "bookPrice":"1.25",
  "bookAuthor":"勒布朗·詹姆斯"
}

若不存在数据则不会进行创建

POST index1/_doc/102/_update
{
  "doc":{
    "bookId":1,
    "bookName":"Java从入门到放弃",
    "bookPrice":"1.25",
    "bookAuthor":"终南山"
  }
}

2.4删除数据

DELETE index1/_doc/101

四、复杂查询

1、精确查询

1.1 term

不会对关键字进行分词,对关键词进行全匹配

GET /index1/_search
{
  "query":{
    "term":{
      "bookId": "1"
    }
  }
}

1.2 terms

多关键词全匹配

GET /index1/_search
{
  "query":{
    "terms":{
      "bookId": ["1","2","3"]
    }
  }
}

2、模糊查询

2.1 match

对关键词进行拆词匹配

GET /index1/_search
{
  "query":{
    "match":{
      "bookName": "入门"
    }
  }
}

2.2 match_all

GET /index1/_search
{
  "query":{
    "match_all":{
    }
  }
}

2.3 multi_match

多属性匹配

GET /index1/_search
{
  "query":{
    "multi_match":{
      "query": "语言",
      "fields": ["bookName","bookAuthor"]
    }
  }
}

3、分页查询

GET /index1/_search
{
  "query":{
    "match":{
      "bookName": "入门"
    }
  },
  "from":0,
  "size":3
}

4、排序

asc升序,desc降序

GET /index1/_search
{
  "query":{
    "match":{
      "bookName": "入门"
    }
  },
  "from":0,
  "size":3,
  "sort": [
    {
      "bookId": {
        "order": "asc"
      }
    }
  ]
}

5、范围查询

GET /index1/_search
{
  "query":{
    "range": {
      "bookPrice": {
        "gte": 10,
        "lte": 20
      }
    }
  }
}

6、模糊查询

不是分词的模糊查询,是全模糊查询,类似与MySQL中的 like

GET /index1/_search
{
  "query":{
   "fuzzy": {
     "bookName": {
       "value": "nu"
     }
   }
  }
}

四、复合查询

must → and
should → or
must_not → not

1、多条件查询

GET index1/_search
{
  "query": {
    "bool":{
      "must": [
        {
          "match": {
            "bookName": "放弃"
          }
        }
      ],
      "should": [
        {
          "match": {
            "bookAuthor": "陈奕迅"
          }
        }
      ],
      "must_not": [
        {
          "match": {
            "bookPrice": "10.39"
          }
        }
      ]
    }
  },
  "sort": [
    {
      "bookId": {
        "order": "asc"
      }
    }
  ],
  "from": 0,
  "size": 5
}

2、高亮显示

highlight字段用于高亮显示

pre_tags 为前缀
post_tags 为后缀

GET index1/_search
{
  "query": {
    "bool":{
      "must": [
        {
          "match": {
            "bookName": "放弃"
          }
        }
      ]
    }
  },
  "sort": [
    {
      "bookId": {
        "order": "asc"
      }
    }
  ],
  "from": 0,
  "size": 5,
  "highlight": {
    "fields": {
      "bookName": {}
    },
    "pre_tags": "aaaa",
    "post_tags": "ddddd"
  }
}

3、显示字段

每一个query后面都可以跟 分页查询、高亮显示、排序、显示字段

显示字段用 “_sources” 字段

GET index1/_search
{
  "query": {
    "bool":{
      "must": [
        {
          "match": {
            "bookName": "放弃"
          }
        }
      ]
    }
  },
  "sort": [
    {
      "bookId": {
        "order": "asc"
      }
    }
  ],
  "_source": ["bookId","bookName"], 
  "from": 0,
  "size": 5,
  "highlight": {
    "fields": {
      "bookName": {}
    },
    "pre_tags": "aaaa",
    "post_tags": "ddddd"
  }
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

ElasticSearch 的相关文章

随机推荐

  • Elasticsearch 索引模板:优化大数据搜索与分析

    Elasticsearch 是一个强大的分布式搜索和分析引擎 广泛应用于处理大数据量的搜索和分析任务 为了提高搜索效率和数据组织结构的一致性 Elasticsearch 提供了索引模板 template 的功能 索引模板允许我们在创建索引时
  • 《python语言程序设计》第5章 第23题 贷款计算

    LOAN AMOUNT 10000 number years 5 NUMBER OF YEAR number years 12 interest rate 5 month rate interest rate 1200 print f Lo
  • springboot跳转页面

    SpringBoot里面只有src目录 在src main resources下面有两个文件夹 static 和 templates springboot默认static中放静态页面 而templates中放动态页面 themleaf和fr
  • Egret游戏通用开发框架

    地址 https github com yicaoyimuys EgretGameEngine 简介 现在这套代码已经有几个项目都在使用了 主要用于各项目组间统一开发规范 便于开发人员调整 以及新手快速熟悉项目 支持Egret2 0 x和2
  • C#写的34401A串口232数据读取程序

    首先呢 请先设置惠普表为Talk only模式 也就是31 还不明白的自己查手册去 另外 各个表设置不一样 比如我这里2块表就不一样 一块是7位数据位 even校验 另一块是8位数据位 none校验 具体的可以看看表里的i o那里的设置 数
  • GPIO的两种引脚规则:BCM与BOARD

    树莓派 raspberry 针脚在python中BCM与BOARD模式的区别 在python程序中定义的GPI针脚有两种模式 BCM模式 BOARD模式 BCM模式 例如 GPIO setmode GPIO BCM 测试结果如下 物理针脚1
  • pycharm注释快捷键Ctrl+/

    行注释 取消行注释 Ctrl 块注释 Ctrl Shift
  • ArcGIS部分问题解决办法

    ArcGIS部分常见问题解决办法 最近在学习ArcGIS过程中 进行某些操作选项总是会会发生错误 不仅仅我自己一个人是这样 周围好多同学也是经常在操作的过程中报错 所以就很突发奇想把这段时间遇到的问题统一写下来 也是为了自己以后忘掉可以直接
  • 系统调用:用户级函数如何通过INT 80中断进入操作系统内核

    以printf 打印内核中的一段字符串为例 printf 是用户函数无法进入内核 因此需要进行系统调用 进入内核的方式是使用int 0x80中断 printf 函数想要进入系统内核是通过系统调用write 实现 位置 linux lib w
  • Usbkey原理介绍

    不好意思 百度来的 大家一起学习吧 文库中竟然收费5个币 Usbkey原理介绍 一 usbkey实现身份认证原理 采用冲击响应的认证方法 登录时在服务器端和客户端同时进行计算 客户端计算前要先验证USER PIN 通过后在硬件中使用HMAC
  • OD华为机试 23

    篮球比赛 描述 篮球 5V5 比赛中 每个球员拥有一个战斗力 每个队伍的所有球员战斗力之和为该队伍的总体战斗力 现有10个球员准备分为两队进行训练赛 教练希望2个队伍的战斗力差值能够尽可能的小 以达到最佳训练效果 给出10个球员的战斗力 如
  • docker搭建hadoop hdfs完全分布式集群

    1 制作hadoop镜像 参见 https www cnblogs com rmxd p 12051866 html 该博客中只参考制作镜像部分 固定IP及启动集群的部分应该跳过 这里注意 在做好的镜像里 要安装 which 工具 否则在执
  • DFS的个人理解和测试例题

    深度优先搜索 DFS 是一种搜索手段 可以理解为 它从某个位置 起点 开始 沿着一条路不断地向前走直到尽头 然后退后一步 去走其它没走过的路 没有的话 再退后一步 再去选择 直到找到目的地 终点 例如下图 从A 起点 开始走 先走ABD 在
  • 【MySQL】Ubuntu22.04安装MySQL8数据库详解

    00 目录 文章目录 00 目录 01 安装MySQL 02 配置MySQL 03 查看MySQL状态 04 登录MySQL数据库 05 问题讨论 06 附录 01 安装MySQL 1 1 更新软件源 deng local code 3li
  • MQTT.fx连接、订阅、发布OneNet平台(新版)

    第一步 打开MQTT fx 点击设置按钮 第二步 命名的话随便起 中文英文皆可以 token的下载地址 https open iot 10086 cn doc v5 develop detail 242 第三步 token生成密码 时间戳转
  • 数据结构之链表增删查改(最详细注释和最清晰思路,附完整代码)

    PZK学数据结构之链表 史上最详细思路和代码注释 完整代码我放在最后面了 可以直接跑 方便大家cv编程 文章目录 PZK学数据结构之链表 史上最详细思路和代码注释 完整代码我放在最后面了 可以直接跑 方便大家cv编程 前言 一 链表是什么
  • target属性里_blank _self _top _parent区别

    blank 是指超链接连接的网页 是通过一个新的网页窗口打开 self的话 是指在本身这个网页窗口来打开新的网页链接 top与 self差不很大 但是如果你用了时 就会知道两者的差别了 因为如果你的超链接是 做在 上时 如果用 self 点
  • broken pipe

    1 broken pipe的字面意思是 管道破裂 broken pip的原因是该管道的读端被关闭 2 broken pipe经常发生socket关闭之后 或者其他的描述符关闭之后 的write操作中 3 发生broken pipe错误时 进
  • Redis—列表(List)、集合(Set)、哈希(Hash)、有序集合 Zset

    Redis 列表List 集合Set 哈希Hash 有序集合 Zset 列表List 单键多值 常用命令 数据结构 Redis 集合 Set 常用命令 数据结构 Redis 哈希 Hash 常用命令 数据结构 Redis 有序集合 Zset
  • ElasticSearch

    ElasticSearch 一 ES介绍 ES是一款基于倒排索引的NoSQL数据库 传统数据库对于模糊查询存在性能瓶颈 而ES更擅长与大数据量的模糊查询 ES在存储数据的时候会先将数据进行分词 将分词的结果作为索引存入数据库中 当进行查询时