首页 > 其他分享 >elasticsearch7介绍和基础语法

elasticsearch7介绍和基础语法

时间:2025-01-12 17:02:43浏览次数:3  
标签:index keyword GET 介绍 语法 elasticsearch7 query type match

elasticsearch7介绍和基础语法

参考博客:https://blog.csdn.net/qq_47387991/article/details/129349790

什么是elasticsearch
  • 一个开源的分布式搜索引擎,可以用来实现搜索、日志统计、分析、系统监控等功能。 开源 分布式 搜索引擎
  • elasticsearch底层是基于lucene来实现的。

Lucene是一个Java语言的搜索引擎类库,是Apache公司的顶级项目,由DougCutting于1999年研发。官网地址:https://lucene.apache.org

Lucene的优势:

  • 易扩展
  • 高性能(基于倒排索引

Lucene的缺点:

  • 只限于java语言开发
  • 学习曲线陡峭
  • 不支持水平扩展
elasticsearchmysql有什么区别吗?
  • Elasticsearch:擅长海量数据的搜索、分析、计算

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

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

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

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

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


倒排索引是什么?

参考https://blog.csdn.net/qq_47387991/article/details/129349790

里面很详细,这里不再赘述。


elasticsearch中的概念
MySQLElasticsearch说明
TableIndex索引(index),就是文档的集合,类似数据库的表(table)
RowDocument文档(Document),就是一条条的数据,类似数据库中的行(Row),文档都是JSON格式
ColumnField字段(Field),就是JSON文档中的字段,类似数据库中的列(Column)
SchemaMappingMapping(映射)是索引中文档的约束,例如字段类型约束。类似数据库的表结构(Schema)
SQLDSLDSL(Domain Specific Language)是elasticsearch提供的JSON风格的请求语句,用来操作elasticsearch,实现CRUD

elasticsearch常用的请求语句(DSL)
  • 查看elasticsearch状态⬇
GET /_cat/nodes:查看所有节点
GET /_cat/health:查看 es 健康状况
GET /_cat/master:查看主节点
GET /_cat/indices:查看所有索引 
GET /_cat/indices?v:v参数表示以更易读的表格形式输出结果,包括索引名称、状态、文档数量、存储大小等详细信息
PUT /my_index #创建一个名为my_index的索引
GET my_index/_doc/1 #查询my_index索引下id为1的文档
  • 更新数据⬇
# 第一种更新方式
POST customer/external/1/_update
{
	"doc":{
	"name": "John Doew"
	}
}
# 更新同时增加新属性
POST customer/external/1/_update
{
	"doc": { "name": "Jane Doe", "age": 20 }
}
# 第二种更新方式
POST customer/external/1
{
"name": "John Doe2"
}
# 第三种更新方式
PUT customer/external/1
{
"name": "John Doe"
}
# 第一种POST操作会对比源文档数据,如果相同不会有什么操作,文档 version 不增加

# 第二种和第三种操作总会将数据重新保存并增加 version 版本
  • 删除数据⬇
# 删除一条数据
DELETE customer/_doc/1
# 删除整个索引
DELETE customer
# 批量操作
# 批量操作可以显著提高性能,因为它减少了网络往返次数和资源消耗
# 批量导入文档
POST /_bulk
{ "index" : { "_index" : "customer", "_type" : "external" } }
{ "name": "John Doe" }
{ "index" : { "_index" : "customer", "_type" : "external" } }
{ "name": "Jane Smith" }

# 批量更新文档
POST /_bulk
{ "update" : {"_id" : "1", "_index" : "customer", "_type" : "external"} }
{ "doc" : { "name" : "John Updated" } }
{ "update" : {"_id" : "2", "_index" : "customer", "_type" : "external"} }
{ "doc" : { "name" : "Jane Updated" } }

# 混合操作
POST /_bulk
{ "index" : { "_index" : "customer", "_type" : "external" } }
{ "name": "First Document" }
{ "delete" : {"_id" : "3", "_index" : "customer", "_type" : "external"} }
{ "update" : {"_id" : "4", "_index" : "customer", "_type" : "external"} }
{ "doc" : { "name" : "Fourth Document Updated" } }
  • 检索⬇
# 使用REST request URI发送搜索参数
GET bank/_search?q=*&sort=account_number:asc

# REST request body
POST bank/_search
{
  "query": {
    "match_all": {}
  },
  "sort": [
    {
      "account_number": {
        "order": "desc"
      }
    }
  ]
}

  • REST request body检索进阶
  • match_all匹配全部 ⬇

GET bank/_search
{
  "query": {
    "match_all": {}
  },
  "sort": [
    {
      "balance": {
        "order": "desc"
      }
    }
  ],
  "from": 5,
  "size": 5,
  "_source": ["balance", "firstname"]
}

# "from": 5,:定义从结果的哪个位置开始返回,这里设置为5,意味着从第6个结果开始返回。

# "size": 5,:定义返回结果的数量,这里设置为5,意味着返回5个结果。

# "_source": ["balance","firstname"]:定义返回的源字段,这里指定返回balance和firstname字段的值。
  • match根据提供的字段匹配 ⬇

  • 匹配查询有两种可能:

    • 完全匹配: 文档的"address"字段完全包含"Mill road"这个短语,例如:“123 Mill road”。

    • 部分匹配: 搜索关键词"Mill road"会被分词为"mill"和"road",如果"address"字段包含"Mill"和"road",就会被匹配到,如"198 Mill Lane"或"263 Aviation Road"。

GET bank/_search
{
  "query": {
    "match": {
      "address": "mill"
    }
  }
}
  • 短语匹配match_phrase
GET bank/_search
{
  "query": {
    "match_phrase": {
      "address": "Mill Road"
    }
  }
}
  • 多字段匹配multi_match
GET bank/_search
{
  "query": {
    "multi_match": {
      "query": "Albemarle",
      "fields": ["address", "firstname"]
    }
  }
}
  • bool复合查询
  • must必须满足的匹配条件 ⬇

{
  "query": {
    "bool": {
      "must": [
        {
          "match": {
            "gender": "M"
          }
        },
        {
          "match": {
            "address": "mill"
          }
        }
      ]
    }
  }
}
  • must not必须不满足的匹配条件 ⬇
{
  "query": {
    "bool": {
      "must": [
        {
          "match": {
            "gender": "M"
          }
        },
        {
          "match": {
            "address": "mill"
          }
        }
      ],
      "must_not": [
        {
          "match": {
            "age": "28"
          }
        }
      ]
    }
  }
}
  • should

    • should字句用于指定一组可选条件。这些条件不是必须满足的,但如果文档满足这些条件,它们可以提高文档的相关性得分

    • should子句通常与minimum_should_match参数一起使用,这个参数指定了至少需要多少个should条件被满足

GET bank/_search
{
  "query": {
    "bool": {
      "must": [
        {
          "match": {
            "gender": "M"
          }
        },
        {
          "match": {
            "address": "mill"
          }
        }
      ],
      "must_not": [
        {
          "match": {
            "age": "18"
          }
        }
      ],
      "should": [
        {
          "match": {
            "lastname": "Wallace"
          }
        }
      ],
      "minimum_should_match": 0
    }
  }
}
  • filter过滤⬇
    • 在语义上,filter和must非常相近,但与must不同的是,filter子句不会影响文档的相关性得分(_score)。
GET bank/_search
{
  "query": {
    "bool": {
      "must": [
        {
          "match": {
            "gender": "M"
          }
        },
        {
          "match": {
            "address": "mill"
          }
        }
      ],
      "must_not": [
        {
          "match": {
            "age": "18"
          }
        }
      ],
      "should": [
        {
          "match": {
            "lastname": "Wallace"
          }
        }
      ],
      "filter": [
        {
        # range:用于匹配数值或日期字段的某个范围内的值
          "range": { 
            "age": {
              "gte": 20,
              "lte": 30
            }
          }
        }
      ], 
      "minimum_should_match": 1
    }
  }
}
  • term不分词的精确查询
GET bank/_search
{
  "query": {
    "term": {
      "age": 28
    }
  }
}
  • keyword 精确查询
    • 用途:用于对keyword类型的字段执行精确匹配。
    • 特点:keyword查询通常用于那些在索引时不经过分词器处理的字段。它允许用户搜索确切的字符串值,而不考虑分词器的影响。
{
  "query": {
    "match": {
      "username.keyword": "john_doe"
    }
  }
}
  • aggregations聚合分析

​ 以下是聚合分析的几个例子:

  1. 搜索 address 中包含 mill 的所有人的年龄分布以及平均年龄,但不显示这些人的详情
GET bank/_search
{
  "query": {
    "match": {
      "address": "mill"
    }
  },
  "aggs": {
    "group_by_state": {
      "terms": {
        "field": "age"
      }
    },
    "avg_age": {
      "avg": {
        "field": "age"
      }
    }
  },
  "size": 0
}
  1. 按照年龄聚合,并且请求每个年龄的平均薪资
GET bank/_search
{
  "query": {
    "match_all": {}
  },
  "aggs": {
    "group_by_age": {
      "terms": {
        "field": "age"
      },
      "aggs": {
        "avg_balance": {
          "avg": {
            "field": "balance"
          }
        }
      }
    }
  },
  "size": 0
}

elasticsearch的结构(mapping)组织
PUT /my-index
{
  "mappings": {
    "properties": {
      "name": {
        "type": "text"
      },
      "age": {
        "type": "integer"
      },
      "date": {
        "type": "date",
        "format": "yyyy-MM-dd"
      }
    }
  }
}
  • 添加新的字段映射⬇
PUT /my_index/_mapping
{
  "properties": {
    "employee-id": {
      "type": "keyword",
      "index": false
    }
  }
}
  • 修改映射&数据迁移⬇

​ index索引的mapping是不能修改的。

​ 如果一定要修改,只能重新创建一个索引,再把数据迁移到新索引。

  • 新建索引⬇
PUT newbank
{
  "mappings" : {
      "properties" : {
        "account_number" : {
          "type" : "long"
        },
        "address" : {
          "type" : "text"
        },
        "age" : {
          "type" : "long"
        },
        "balance" : {
          "type" : "long"
        },
        "city" : {
          "type" : "text",
          "fields" : {
            "keyword" : {
              "type" : "keyword",
              "ignore_above" : 256
            }
          }
        },
        "email" : {
          "type" : "text",
          "fields" : {
            "keyword" : {
              "type" : "keyword",
              "ignore_above" : 256
            }
          }
        },
        "employer" : {
          "type" : "text",
          "fields" : {
            "keyword" : {
              "type" : "keyword",
              "ignore_above" : 256
            }
          }
        },
        "firstname" : {
          "type" : "keyword"
        },
        "gender" : {
          "type" : "keyword"
        },
        "lastname" : {
          "type" : "text",
          "fields" : {
            "keyword" : {
              "type" : "keyword",
              "ignore_above" : 256
            }
          }
        },
        "state" : {
          "type" : "text",
          "fields" : {
            "keyword" : {
              "type" : "keyword",
              "ignore_above" : 256
            }
          }
        }
      }
    }
}
  • 数据迁移⬇
POST /_reindex
{
  "source": {
    "index": "bank",
    "type": "acount"
  },
  "dest": {
    "index": "newbank"
  }
}

标签:index,keyword,GET,介绍,语法,elasticsearch7,query,type,match
From: https://blog.csdn.net/m0_70484213/article/details/145063564

相关文章

  • 惊叹数据结构之美,品味排序算法之妙:对四大排序的详细介绍
    大家好,这里是小编的博客频道小编的博客:就爱学编程很高兴在CSDN这个大家庭与大家相识,希望能在这里与大家共同进步,共同收获更好的自己!!!本文目录正文一、冒泡排序(BubbleSort)二、选择排序(SelectionSort)三、插入排序(InsertionSort)四、希尔排序(ShellSort)快乐的时光......
  • 惊叹数据结构之美,品味排序算法之妙:对快排的详细介绍
    大家好,这里是小编的博客频道小编的博客:就爱学编程很高兴在CSDN这个大家庭与大家相识,希望能在这里与大家共同进步,共同收获更好的自己!!!本文目录正文1.基本快速排序霍尔法(Hoare法)挖坑法快慢指针法2.随机化快速排序3.三向切分快速排序4.插入排序优化6.非递归优化......
  • 【大厂面试AI算法题中的知识点】方向涉及:ML/DL/CV/NLP/大数据...本篇介绍训练网络的时
    【大厂面试AI算法题中的知识点】方向涉及:ML/DL/CV/NLP/大数据…本篇介绍训练网络的时候如何判断过拟合和欠拟合?【大厂面试AI算法题中的知识点】方向涉及:ML/DL/CV/NLP/大数据…本篇介绍训练网络的时候如何判断过拟合和欠拟合?文章目录【大厂面试AI算法题中的知识点】方......
  • 常见的浏览器内核都有哪些?并介绍下你对内核的理解
    常见的浏览器内核主要包括以下几种:Trident(IE内核):由微软开发,也被称作IE内核。它是最早的浏览器内核之一,具有较好的兼容性,能够支持各种网站和网页标准。然而,其渲染速度相对较慢,页面渲染效果可能不如其他内核。尽管如此,由于其广泛的用户基础和成熟的接口设计,仍有许多浏览器选择使用......
  • 【圆圆的日语教室】日语入门第6课-自我介绍(1)很高兴认识你
    第六课——自我介绍(1)很高兴认识你日语中汉字的两种读音方式音读:根据当时传过去的汉字的汉语读音发展得来的不同朝代传过去的读音可能不同,所以一个汉字可能有多种音读吴:南北朝时期、汉:隋唐时期、唐:宋元明清时期例子“明”字:训读:汉字的含义所对应的日语原本的......
  • 【圆圆的日语教室】日语入门第7课-自我介绍(2)深入交流
    第七课——自我介绍(2)深入交流介绍国家常用单词我来自から:表示时间空间上的起点,“从”来ました:来(常规)まいりました:来(礼貌、自谦)两种“来”的说法都可以。介绍职业常用单词圆圆带读運転手:司机弁護士:律师我是介绍喜好常用单词喜好问答介绍家庭常用单词......
  • 【短视频】介绍一个视频剪辑过场动画嘎嘎爽的软件
    文章目录本系列校训三个主流的视频处理软件PR剪映万兴喵影三个软件的过场对比PR的过场PR转场的分析剪映的转场缺点:万兴喵影的转场本系列校训这年头不知道AI跟自媒体的,还你一定是从大清朝穿越过来的现在一刷小红书,B站啥的,真的是满屏的AI,短视频现在想做短视频......
  • 【大厂面试AI算法题中的知识点】方向涉及:ML/DL/CV/NLP/大数据...本篇介绍自动驾驶检测
    【大厂面试AI算法题中的知识点】方向涉及:ML/DL/CV/NLP/大数据…本篇介绍自动驾驶检测模型如何针对cornercase优化?【大厂面试AI算法题中的知识点】方向涉及:ML/DL/CV/NLP/大数据…本篇介绍自动驾驶检测模型如何针对cornercase优化?文章目录【大厂面试AI算法题中的知......
  • 树莓派-5-GPIO的应用实验之GPIO的编码方式和SDK介绍
    文章目录1GPIO编码方式1.1管脚信息1.2使用场合1.3I2C总线1.4SPI总线2RPI.GPIO2.1PWM脉冲宽度调制2.2静态函数2.2.1函数setmode()2.2.2函数setup()2.2.3函数output()2.2.4函数input()2.2.5捕捉引脚的电平改变2.2.5.1函数wait_for_e......
  • 【初涉Python】Linux的一些简单介绍
        在实际开发的时候,很多的代码都来自于经验、思考和搜索,所以不用觉得自己一定要从零开始创造才是合格的,事实上很多时候,使用已有的东西可以大大提高效率,在编程学习中不用太过苛求自己。Linux    这里介绍一些Linux的内容是因为笔者学习Python的时候是在Linu......